我想做什么:我想将2个,3个或N个向量锁定在一起,而不是将它们复制到元组中.也就是说,将冗长放在一边,例如:
vector<int> v1 = { 1, 2, 3, 4, 5};
vector<double> v2 = { 11, 22, 33, 44, 55};
vector<long> v3 = {111, 222, 333, 444, 555};
typedef tuple<int&,double&,long&> tup_t;
sort(zip(v1,v2,v3),[](tup_t t1, tup_t t2){ return t1.get<0>() > t2.get<0>(); });
for(auto& t : zip(v1,v2,v3))
cout << t.get<0>() << " " << t.get<1>() << " " << t.get<2>() << endl;
Run Code Online (Sandbox Code Playgroud)
这应输出:
5 55 555
4 44 444
...
1 11 111
Run Code Online (Sandbox Code Playgroud)
我现在是怎么做的:我已经实现了自己的快速排序,我传递的第一个数组用于比较,排列应用于所有其他数组.我只是无法弄清楚如何重用std :: sort来解决我的问题(例如提取排列).
我试过的: boost :: zip_iterator …
前向,双向和随机访问类别的迭代器需要是默认构造的.
为什么这样,为什么输入和输出运算符不必是默认可构造的?
在阅读Eric Niebler的范围提议时,
我遇到了哨兵一词,作为最终迭代器的替代品.
我很难理解哨兵对末端迭代器的好处.
有人可以提供一个明确的例子,说明发送到表中的内容是不能用标准迭代器对完成的吗?
" 哨兵是过去的迭代器的抽象.哨兵是常规类型,可用于表示范围的结束.表示范围的哨兵和迭代器应为EqualityComparable.哨兵表示一个元素.迭代器我比较等于哨兵,我指向那个元素." - N4382
我认为哨兵在确定范围的结束时起着作用,而不仅仅是位置?