草庐IT

c++ - std::tuple 是如何实现的?

我想知道元组是如何在C++0x的标准库中实现的。我试图阅读descriptioninlibstdc++manual然后阅读templatelisting,但是真的很难理解它是如何工作的,尤其是在阅读代码时。有人可以用几句话向我解释元组实现的想法吗?我想知道这一点,因为我考虑在我的代码中使用元组,我想了解它是如何工作的以及它带来了什么类型的开销(仅延长编译时间,在内存上执行许多复制操作,在构造函数中执行许多其他函数等)。 最佳答案 实现元组的一种方法是使用多重继承。元组元素由叶类持有,元组类本身继承自多个叶。在伪代码中:templat

c++ - 在 `std::get<I>` 上使用 `std::tuple` 是否保证对于 `I` 的不同值是线程安全的?

假设我有std::tuplemy_tuple{x0,x1,x2};其中T0、T1和T2是值类型(即不可能有别名)。p>访问my_tuple的元素并使用std::get从多个线程同时改变它们是否安全,只要每个线程访问不同的元素?例子:templatevoidprocess(T&x){/*mutate`x`*/}//...std::thread{[&]{process(std::get(my_tuple));}}.detach();std::thread{[&]{process(std::get(my_tuple));}}.detach();std::thread{[&]{process(

c++ - std::make_tuple 不做引用

我一直在尝试std::tuple结合引用文献:#include#includeintmain(){inta,b;std::tupletest(a,b);std::get(test)=1;std::get(test)=2;std::cout(test2)=-1;std::get(test2)=-2;std::cout(test3)=-1;std::get(test3)=-2;std::cout在此处的三个示例中,前两个按预期工作。然而,第三个没有。我期待auto类型(test3)与test的类型相同(即std::tuple)。看来std::make_tuple不能自动生成引用元组。为什么

c++ - Boost::Tuples vs Structs 返回值

我正试图了解元组(感谢@litb),使用它们的常见建议是返回>1值的函数。这是我通常会使用结构的东西,在这种情况下我无法理解元组的优势-对于最终懒惰的人来说,这似乎是一种容易出错的方法。Borrowinganexample,我会用这个structdivide_result{intquotient;intremainder;};使用元组,您将拥有typedefboost::tupledivide_result;但是,如果不阅读您正在调用的函数的代码(或注释,如果您愚蠢到相信它们),您将不知道哪个int是商,反之亦然。好像有点……structdivide_result{intresults

C++ std::tuple 破坏顺序

是否有规定std::tuple的成员被销毁的顺序的规则?例如,如果Function1返回std::tuple,std::unique_ptr>至Function2,那么我可以确定(当Function2的范围离开时)ClassB的实例第二个成员引用的实例在ClassA的实例之前被销毁第一个成员提到的?std::tuple,std::unique_ptr>Function1(){std::tuple,std::unique_ptr>garbage;get(garbage).reset(/*...*/);get(garbage).reset(/*...*/);returngarbage;}v

c++ - std::tuple get() 成员函数

boost::tuple有一个get()成员函数,使用如下:tuplet(5,"foo","bar");cout();//outputs"foo"看来C++0xstd::tuple没有这个成员函数,只能改用非成员函数形式:std::get(t);在我看来更丑。std::tuple没有成员函数有什么特别的原因吗?还是只是我的实现(GCC4.4)? 最佳答案 来自C++0x草案:[Note:Thereasongetisanonmemberfunctionisthatifthisfunctionalityhadbeenprovidedas

c++ - 从初始化列表初始化 std::tuple

我想知道元组是否可以通过初始化列表初始化(更准确地说,通过初始化列表的初始化列表)?考虑元组定义:typedefstd::tuple,std::array,std::array,std::array>vertex;有没有办法做到以下几点:staticvertexconstnullvertex={{{0,0,0}},{{0.0,0.0}},{{0,0,0,0}},{{0,0,0,0}}};我只想实现与使用struct而不是tuple相同的功能(因此只有数组由initializer_list初始化):staticstructvertex{std::arraym_vertex_coords;

java - Java SE 8 有 Pairs 或 Tuples 吗?

我在JavaSE8中玩懒惰的函数式操作,我想要map指数i到一对/元组(i,value[i]),然后filter基于第二个value[i]元素,最后只输出索引。我还必须忍受这个吗:WhatistheequivalentoftheC++PairinJava?在lambdas和流的大胆新时代?更新:我提出了一个相当简单的例子,它有一个由@dkatzel在以下答案之一中提供的简洁解决方案。但是,它没有概括。因此,让我添加一个更一般的例子:packagecom.example.test;importjava.util.ArrayList;importjava.util.stream.IntSt

c++ - 只有两个成员的 std::pair 和 std::tuple 之间的区别?

std::pair和只有两个成员的std::tuple之间有区别吗?(除了明显的std::pair需要两个且只有两个成员并且tuple可能有更多或更少......) 最佳答案 有一些区别:std::tuple标准不要求为standard-layout.每std::pair如果两者都是标准布局T和Y是标准布局。获取pair的内容要容易一些比tuple.您必须在tuple中使用函数调用情况下,而paircase只是一个成员字段。但仅此而已。 关于c++-只有两个成员的std::pair和st

c++ - 如何按索引设置 std::tuple 元素?

可以使用std::get通过索引从std::tuple中获取元素。以此类推,如何设置元组的元素索引? 最佳答案 std::get返回对值的引用。所以你像这样设置值:std::get(myTuple)=newValue;这当然假设myTuple是非常量。您甚至可以通过std::move将项目移出元组,方法是在元组上调用它:automovedTo=std::get(std::move(myTuple)); 关于c++-如何按索引设置std::tuple元素?,我们在StackOverflow