C ++ 0x元组没有迭代器,对吗?

时间:2011-07-31 12:13:11

标签: c++ iterator c++11 tuples

查看标准N3291我找不到tuple支持begin()end()的任何引用。但是当我多年前看到我的笔记时,我似乎已经记下了我需要稍后再研究一下。我们来了。

我在当前的C ++ 0x标准中找不到tuple<...>.begin()tuple<...>.end()的任何痕迹,这是正确的吗?不可能将带有迭代器的元组传递给算法,也不能将for - 循环遍历它,对吗?

tuple<int,string,double> val;
for(auto a : val) cerr << val;     // very wrong!

这当然是胡说八道,因为auto应该是什么?

我需要确认我的笔记包含错误,并且没有办法获取元组元素的迭代器。或者标准讨论中可能有一条废弃的道路?

注意:我知道可以使用 TMP Variadic模板来实现 do-for-all-element-of-a-tuple ,但我的问题实际上是关于迭代器。

3 个答案:

答案 0 :(得分:7)

BoostFusion包含可迭代的元组 - boost::fusion::vector<> - 以及许多iteration, query, and transformation algorithms元组。

它还有代码adapt boost::tuple<> for use with those iterators and algorithms;您可以使用该代码并将其修改为与std::tuple<>配合使用。

答案 1 :(得分:3)

元组的迭代器与类成员的迭代器一样有用。元组并不意味着具有那种可迭代的内容。

答案 2 :(得分:1)

不,元组没有迭代器。迭代器是一个运行时概念,而元组是一个编译时构造。正如你正确地指出的那样,甚至没有办法理解通用元组迭代器。

如果需要类型擦除运行时容器,可以使用boost::any s的向量。