1

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

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

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++ 只是检查初始值?

4

2 回答 2

1

for-loop 将对每个循环进行评估i < distance.end()。问题在于distance.erase,它会失效i,所以结果i++是未定义的。

于 2010-08-10T19:04:01.527 回答
0

distance.end()始终准确到向量的当前状态。

for()循环总是重新评估每个循环的条件。

于 2010-08-10T19:00:16.983 回答