c++ - 迭代器的动态大小检查?

标签 c++ iterator

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/

相关文章:

php - 在 PHPUnit 中测试可迭代对象

c++ - 类的前向声明导致不完整的类型错误

c++ - #if 条件区域可以跨越包含文件边界吗?

c++ - 如何在 C++ 中使函数异步?

java - Java 迭代器返回的结果的泛型类型不兼容

python - 使用 clint 进度条显示 urllib.urlretrieve() 的状态

c++ - 来自 std::_Rb_tree_increment (__x=0x1) 的段错误

c++ - 通过 mhook 的 Winapi hook 导致程序崩溃或挂起

android - Eclipse中未定义的外部引用

java - 重新初始化ArrayList的迭代器不起作用