gpt4 book ai didi

c++ - 使循环边界无效

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:57 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com