c++ - 使循环边界无效

标签 c++ loops conditional-statements erase bounds

我最近接手了一个主要用 C++ 完成的项目,所以这是我第一次真正接触它。我想知道从 vector 的 begin()end() 限定的循环中删除 vector 的元素是否有问题。

这是(本质上)我一直在尝试做的事情:

for (vector<double>::iterator i = distance.begin(); i < distance.end(); i++) {
    for (vector<double>::iterator j = i + 1; j < distance.end(); j++) {

        /* code to assemble *i, *j, and some other values, say *x & *y 
        (also iterators) assumed to be in the distance vector */

        vector< vector<double >::iterator remove;
        remove.push_back(i); remove.push_back(j);
        remove.push_back(x); remove.push_back(y);

        sort(remove.begin(), remove.end());

        for (int r = remove.size() - 1; r >= 0; r--) {
            distance.erase(remove.at(r));
        }
    }
}

对于我正在测试的内容,这似乎有效。但是,我担心这只是侥幸,不应使用此解决方案。 distance.end() 是在每个循环开始时重置,还是 C++ 只检查初始值?

最佳答案

for 循环将评估 i < distance.end()在每个循环上。问题出在 distance.erase , 它会使 i 失效, 所以 i++ 的结果未定义。

关于c++ - 使循环边界无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452398/

相关文章:

c++ - 为什么我需要使用动态内存分配,而我可以从静态中实现相同的目的?

java - 从 Visual Studio 外部创建 JVM 崩溃

javascript - 筛选对象数组并返回满足所有给定条件的对象

python - 具有最小和最大条件 Python 的 while 循环

php - MySQL在where子句中进行条件查询

C++:从父类(super class)调用函数模板

c++ - 通过文本文件将字符串和 Int 发送到函数

javascript - React - 在类方法中使用循环创建表

c# - 用于查找数组中少数元素之和的 ParallelFor 代码(子集问题)

javascript - 搜索二维数组的更有效方法 - 匹配后中断?