Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使循环边界无效 我最近继承了一个C++主要完成的项目,所以这是我第一次真正接触它。我想知道在向量的begin()和end()所限定的循环中删除向量的元素是否有问题_C++_Loops_Conditional Statements_Erase_Bounds - Fatal编程技术网

使循环边界无效 我最近继承了一个C++主要完成的项目,所以这是我第一次真正接触它。我想知道在向量的begin()和end()所限定的循环中删除向量的元素是否有问题

使循环边界无效 我最近继承了一个C++主要完成的项目,所以这是我第一次真正接触它。我想知道在向量的begin()和end()所限定的循环中删除向量的元素是否有问题,c++,loops,conditional-statements,erase,bounds,C++,Loops,Conditional Statements,Erase,Bounds,以下是(基本上)我一直试图做的: 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

以下是(基本上)我一直试图做的:

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));
        }
    }
}
for(向量::迭代器i=distance.begin();i=0;r--){
距离擦除(在(r)处移除);
}
}
}
就我正在测试的内容而言,这似乎是可行的。然而,我担心这只是因为侥幸,不应该使用这种解决方案。<代码>距离>()<代码>在每个循环的开始时重置,或者C++是否只与初始值进行检查?

<代码>距离。
for()
循环始终重新计算每个循环上的条件。

距离。end()
始终精确到向量的当前状态


for()
循环总是在每个循环上重新计算条件。

for循环将在每个循环上计算
i
。问题出在
距离上。擦除
,它将使
i
无效,因此
i++
的结果未定义。

for循环将在每个循环上计算
i
。问题出在
距离中。擦除
,它将使
i
无效,因此
i++
的结果未定义。

在比较迭代器时避免使用<。使用!=比较循环中的迭代器。在比较迭代器时避免使用<。使用!=比较循环中的迭代器。