vector<int> solution;
vector<int>::iterator col;
vector<int>::iterator row;
vector<int>::iterator sum;
...
for (row = vec.begin(); row != vec.end(); ++row)
{
sum = solution.begin();
for (col = row->begin(); col != row->end(); ++col)
{
if(sum == (solution.end())) //value for solution.end() doesn't change, while vector keeps growing
{
solution.push_back(*col);
}
*sum = (*sum + *col); //leads to segfault
++sum;
}
}
我想要一个允许我检查增长 vector 的条件,但是迭代器是如何在 C++ 中实现的,因为它不允许我这样做。那我该用什么?
最佳答案
push_back
有可能使 vector 中的所有迭代器失效;这解释了为什么在下一行代码中取消引用 *sum
时会出现段错误。
您可以重新计算 sum
,方法是取 begin()
的差异并将其添加到 之后的新
,或者您可以使用索引代替迭代器。begin()
>push_back()
size_t offset = sum - solution.begin();
solution.push_back(*col);
sum = solution.begin() + offset;
关于c++ - 迭代器的动态大小检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22139451/