我最近接手了一个主要用 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/