如果已经提出要求,请道歉。我找不到答案。 使用迭代器作为偏移索引是否合法? 例如:
for (list<T> iterator::it = v2->vals.begin(); it!=v2->vals.end();++i) {
v3.push_back(v2[it] + v1[it]);
}
其中:const Vec&amp; V2 和vals是Vec类受保护的列表。
非常感谢!
答案 0 :(得分:4)
您不能直接使用迭代器作为索引。
但是,如果你想在容器中使用迭代器“position”来获得你想要的索引,你可以使用std::distance来实现,即:
unsigned int index = std::distance(v2.begin(), it);
//if it was the fifth element, index's value is 4.
答案 1 :(得分:0)
如果v1
和v2
是自定义数据类型的实例,那么它是可能的,因为您可以创建一个重载operator[]
函数,它采用正确的迭代器作为参数的类型。
然而,它并不像你看起来那么容易,因为至少v2
似乎是一个指针,所以你需要先取消引用它:
(*v2)[it]
或明确调用operator函数:
v2->operator[](it)
答案 2 :(得分:0)
对于多个容器的并行遍历,您可以使用Boost.Iterator的Zip Iterator:
std::transform(
boost::make_zip_iterator(boost::make_tuple(begin(v1), begin(v2))),
boost::make_zip_iterator(boost::make_tuple( end(v1), end(v2))),
std::back_inserter(v3),
[](boost::tuple<int const &, int const&> const &p) {
return p.get<0>() + p.get<1>();
}
);
然而,我确实不相信语法。恕我直言,这个库将受益于一些C ++ 11/14的胡椒化。