vector< vector<int> >::iterator row;
vector<int>::iterator col;
vector<int>::iterator col2;
for (row = vec.begin(); row != vec.end(); row++) {
col2 = row->begin(); //this needs to be row2 and row2 must be assigned with vec2.begin();
for (col = row->begin(); col != row->end(); col++) {
vec[col] = 23; //doesn't work because col is a pointer
*col = 23;
*col2 = 23; //overrides value pointed by *col
col2++;
}
}
我很困惑,因为当我打印迭代器时,我得到索引值,所以我假设&lt;&lt;运算符被重载以提供索引值,而不是迭代器指向的地址。
答案 0 :(得分:1)
对您的问题的简短回答是否定的,您不能安全地从另一个容器的一个实例重用迭代器。如果将迭代器视为指针,这一点就更加清晰了。
int* pI = &some_int;
如果我取消引用pI
,我希望获得some_int
的值。它同时也不能指向some_other_int
。
如果没有一些特定的有用代码,我无法提出替代解决方案。但是,由于std::vector
支持随机访问,如果您想访问相同大小的不同向量的2个元素,则可以改为使用索引:
std::vector<int> vec1(100, 1); // 100 elements initialized to 1
std::vector<int> vec2(100, 2); // 100 elements initialized to 2
std::vector<int> vec3(100);
for (std::size_t i = 0; i < vec1.size(); ++i) // we already know vec1, vec2, and vec3 are all the same size
{
vec3[i] = vec1[i] + vec2[i];
}
答案 1 :(得分:0)
我想你想要:
vector< vector<int> >::iterator row;
vector<int>::iterator col;
vector<int>::iterator col2;
for (row = vec.begin(); row != vec.end(); row++) {
col2 = row->begin();
for (col = row->begin(); col != row->end(); col++) {
vec[col - row->begin()] = 23;
*col = 23;
*col2 = 23;
col2++;
}
}
答案 2 :(得分:0)
row2 = vec2->begin();
for (row = vec.begin(); row != vec.end(); row++)
{
// ...
row2++;
}
这只是困扰你的语法吗?事实上,一个迭代器是在循环头中处理的,而另一个是在其他地方处理的?因为可以在循环头中处理两个迭代器:
for (row = vec.begin(), row2 = vec2->begin(); row != vec.end(); row++, row2++)
{
// ...
}