迭代器能否在C++;? 在C++中,如果我有两个数组 a(10)和b(10)< />,我可以介绍一个索引i,它可以用于两个数组指向(i+1)-th-元素, a[i]和b[i] < /Cord>。迭代器是否也可以共享,或者我需要执行以下操作: vector<int> a; vector<int> b; //assume both are initiated and same vector<int>::iterator i; //assume program know i=10 and *i=20 in vector a vector<int>::iterator j = b.begin(); for(;j != b.end();j++){ if(*j == *i){ break; } } 向量a; 载体b//假设两者都已启动且相同 向量::迭代器i//假设程序知道向量a中的i=10和*i=20 向量::迭代器j=b.begin(); 对于(;j!=b.end();j++){ 如果(*j==*i){ 打破 } }

迭代器能否在C++;? 在C++中,如果我有两个数组 a(10)和b(10)< />,我可以介绍一个索引i,它可以用于两个数组指向(i+1)-th-元素, a[i]和b[i] < /Cord>。迭代器是否也可以共享,或者我需要执行以下操作: vector<int> a; vector<int> b; //assume both are initiated and same vector<int>::iterator i; //assume program know i=10 and *i=20 in vector a vector<int>::iterator j = b.begin(); for(;j != b.end();j++){ if(*j == *i){ break; } } 向量a; 载体b//假设两者都已启动且相同 向量::迭代器i//假设程序知道向量a中的i=10和*i=20 向量::迭代器j=b.begin(); 对于(;j!=b.end();j++){ 如果(*j==*i){ 打破 } },c++,vector,iterator,C++,Vector,Iterator,然后我得到迭代器j,它指向相同的位置,但在向量b中?我可以简单地知道I在a中的位置,然后j=b。begin()+pos(I)不,你不能比较不同集合的迭代器,即使是相同类型和相同数据的迭代器。正因为这两个向量看起来是相同的,所以它们是两个不同的对象,因此底层数据占用的内存是不同的。标准C++库中的 < P>迭代器是在指针之后建模的,而不是在索引之后。正如指针不能在多个数组之间共享一样,迭代器也不能在向量或其他集合之间共享 如果需要并行迭代多个向量,可以使用索引而不是迭代器。如果您需要找到迭代器的位

然后我得到迭代器j,它指向相同的位置,但在向量b中?我可以简单地知道I在a中的位置,然后
j=b。begin()+pos(I)
不,你不能比较不同集合的迭代器,即使是相同类型和相同数据的迭代器。正因为这两个向量看起来是相同的,所以它们是两个不同的对象,因此底层数据占用的内存是不同的。标准C++库中的

< P>迭代器是在指针之后建模的,而不是在索引之后。正如指针不能在多个数组之间共享一样,迭代器也不能在向量或其他集合之间共享

如果需要并行迭代多个向量,可以使用索引而不是迭代器。如果您需要找到迭代器的位置,可以使用
std::distance
如下:

std::distance(b.begin(), my_iter)
如果需要将向量
a
中的迭代器
i
移动到与向量
b
中的迭代器
j
相同的位置,可以执行以下操作:

auto i = a.begin();
// j is an iterator in vector "b"
advance(i, distance(b.begin(), j));

您可以使用以下选项:

#include <iterator>
j = b.begin() + distance(i, a.begin());
#包括
j=b.begin()+距离(i,a.begin());

不,那是不可能的。迭代器不能在两个容器之间共享。如果您想在两个
向量
上有一个通用索引,请改用
运算符[]

一种更简洁的方法是使用std::find()进行迭代,如下所示:

j=std::find(b.begin(),b.end(),*i)

向量之间可以共享迭代器吗

不,每个迭代器变量最多只能引用一个容器中的一个元素,比较迭代器引用不同容器中的元素是不合法的

但是。。。在代码
if(*j==*i)
中,您没有比较迭代器,而是比较迭代器引用的值。这是完全合法的,不管迭代器
i
j
引用的容器是什么(只要它们是可取消引用的,即它们引用的是有效元素)

然后我得到迭代器j,它指向相同的位置,但在向量b中

这在上面代码的上下文中没有意义。如果您的意思是在一个容器中选择一个元素,在第二个容器中选择引用相同位置(索引)的迭代器,那么您可以这样做:

j = std::next(b.begin(),std::distance(a.begin(),i));
此外,还有一些算法可以用于相同的目的:

std::find()          // find an element equal to the last argument
std::find_if()       // find an element that matches a functor

迭代器“等于10”意味着什么?不清楚其意图是什么。如前所述,明确的答案是否定的,但真正问题的答案可能是肯定的。除此之外,上述内容将非常有效。请注意,有些库支持
zip
ing容器和并行迭代。