草庐IT

四元组

全部标签

c++ - 解压缩元组列表

关于如何实现这个功能有什么想法吗?templateautounzip(constlist>&l){...}此函数将接收元组列表并返回列表元组。第一个列表将包含get(t)的元素,等等。我可以遍历元组的项,当然也可以遍历列表。但我不知道如何声明这样的tuple,list...>有什么线索或引用吗? 最佳答案 我会这样做:templateautounzip_impl(list>const&l,std::index_sequence){tuple...>ret;for(autoconst&el:l){std::initializer_li

c++ - 为什么我的直接四元数乘法比 SSE 快?

我经历了几个不同的四元数乘法实现,但我很惊讶地发现引用实现是迄今为止我最快的实现。这是有问题的实现:inlinestaticquatmultiply(constquat&lhs,constquat&rhs){returnquat((lhs.w*rhs.x)+(lhs.x*rhs.w)+(lhs.y*rhs.z)-(lhs.z*rhs.y),(lhs.w*rhs.y)+(lhs.y*rhs.w)+(lhs.z*rhs.x)-(lhs.x*rhs.z),(lhs.w*rhs.z)+(lhs.z*rhs.w)+(lhs.x*rhs.y)-(lhs.y*rhs.x),(lhs.w*rhs.w)

c++ - 检查引用元组是否默认可构造时出错

使用g++-5我得到以下输出#include#includeintmain(){boolb;b=std::is_default_constructible::value;//Compiles,returnstrueb=std::is_default_constructible::value;//Compiles,returnsfalseb=std::is_default_constructible>::value;//Compiles,returnstrueb=std::is_default_constructible>::value;//Doesnotcompile}这是is_def

c++ - 为类提供类似元组的结构化绑定(bind)访问

我正在尝试为一个类支持类似元组的结构化绑定(bind)访问。为简单起见,我将在本文的其余部分使用以下类:structTest{intv=42;};(我知道这个类支持开箱即用的结构化绑定(bind),但我们假设它不支持。)收件人enabletuple-likeaccess给Test的成员,我们必须专业std::tuple_size和std::tuple_element:namespacestd{templatestructtuple_size{staticconststd::size_tvalue=1;};templatestructtuple_element{usingtype=int

c++ - 如何用元组转发unique_ptr?

想象一个函数期望对std::unique_ptr的右值引用。voidfoo(std::unique_ptr&&a);在我的真实示例中,有不止一个参数,因此我决定使用std::tuple将参数转发给它右值引用-所以std::forward_as_tuple:voidforward_to_foo(std::tuple&&>&&t);intmain(){forward_to_foo(std::forward_as_tuple(std::make_unique(8)));}目前一切正常当我想“解压”这个元组时出现问题voidforward_to_foo(std::tuple&&>&&t){fo

c++ - 在 C++11 中构建 union 元组

元组是一种likestructs.是否也有表现得像union的元组?或者我可以在元组中访问成员的union,例如my_union_tupleu;get(u);get(u);//C++14only,orseebelow对于第二行,请参阅here.当然,该解决方案不仅适用于特定的union,例如,但对于任意类型和类型数量。 最佳答案 没有std::tuple表示A和B。如果您想要一个类型安全的类union容器,请查看boostvariant.boost::variantv;v="hello";std::cout它确实为游客提供了安全的交

c++ - 交换引用的临时元组

我正在编写一个自定义迭代器,它在取消引用时返回一个引用元组。由于元组本身是短暂的,我认为我无法从operator*()返回引用。我认为我的迭代器在语义上是有意义的,因为它具有引用语义,即使operator*返回一个值也是如此。问题是,当我尝试调用std::swap时(或者更确切地说,当std::sort调用时),如下所示,我收到错误,因为交换需要左值。有解决此问题的简单方法吗?#includeclasstest{public:test():v1(10),v2(10){}classiterator{public:iterator(std::vector&_v1,std::vector&_

c++ - 如何在新元组中提取元组的子集?

我有一个包含变量类型元组的类,如下所示:templatestructTester{std::tuplet;templatestd::tupleGet(){???}};一个例子是Tester我希望我的Get函数只返回内部元组的一个子集。例如,tester.Get将返回std::tuple其值是从内部元组的适当成员中复制的。您可以假设每种类型在一个元组中最多出现一次,并且Get只会使用元组中合理的模板参数调用。 最佳答案 实际上,这比您想象的要容易。std::get采用类型作为元组成员索引的替代(C++14起),并返回元组中的第一个匹配

c++ - boost 元组性能

根据boost::tupledocumentation,访问元组的单个元素与访问成员变量具有相同的性能。例如,给定以下声明:tuplet1(A(),B(),C());structT{Aa;Bb;Cc;}Tt2;这两个语句的性能应该相同(或差异可以忽略不计):t1.get();t2.c;我查看了boost::tuple的来源,如果我理解正确(我不确定我理解的是否正确),get函数实际执行此操作:Cget(tuple&t){returnt.tail.tail.head;//Generally:returnt.tail.>.head;}与直接访问相比,这更类似于链表中的查找,并且据我所知,复

c++ - 将从元组派生的对象放入 C++ 中的 vector 中

我想创建一个包含3个值的结构:一个字符串和两个整数。该字符串是强制性的,但其中一个(或两个)整数是可选的,如果未指定则可以默认为-1。但是,与其使用结构,不如尝试使用std::tuple。为了合并两个整数的可选性,我设置了一个继承自std::tuple的“Trio”类,如下所示:#include#includeclassTrio:publicstd::tuple{public:explicitTrio(std::stringconst&name,intval1=-1,intval2=-1):tuple(name,val1,val2){}};然后我通过将一些Trio对象插入std::ve