gpt4 book ai didi

c++ - 在两个 for 循环中删除 vector 的元素

转载 作者:行者123 更新时间:2023-11-28 00:36:36 27 4
gpt4 key购买 nike

我正在遍历二维数组 (lib) 的行,并将每行中的前 4 个条目与包含 4 个元素的元组 vector (near_pts) 进行比较。基本上,我想从 lib 中提取所有行,其中前 4 个元素(在该行中)与 near_pts 中的任何元组匹配,并将这些行添加到新的二维数组 (sub_lib)。 lib 或 near_pts 中不应有任何重复。

当来自 near_pts 的元组在 lib 中匹配时,我想从 near_pts 中删除它,这样就不会浪费时间来尝试匹配那个特定的元组。我希望,因为我在删除后立即有一个 break 语句,我们将转到外部 for 循环的下一次迭代,并且 near_pts 上的迭代器将被重置以处理 near_pts 的修改版本。然而,这似乎并没有发生,一些元组永远不会匹配(并且应该总是匹配)。我知道问题与迭代器有关,因为我的调试工作表明,当多个元素仍然存在时,迭代器有时只在 1 个元素 near_pts 上循环,但我无法弄清楚为什么会这样。代码如下,如果需要更多信息和/或清晰度,请告诉我。

int n = 0;
for (int i=0; i<numPts; i++) {
for (vector<my_tup>::iterator it = near_pts.begin(); it != near_pts.end(); it++) {
bool match = (get<0>(*it)==lib[i][0] && get<1>(*it)==lib[i][1] &&
get<2>(*it)==lib[i][2] && get<3>(*it)==lib[i][3]);

// If there is a match, add it to the sub-library, erase the entry
// from near_pts, and exit the interior loop.
if (match) {
for (int j=0; j<numLibCols; j++) { sub_lib[n][j] = lib[i][j]; }
n++;
near_pts.erase(it);
break;
}
// If we have found all of the tuples, exit the loop.
if (n==near_pts.size()) { break; }
}
}

注意:lib 实际上是一个大小为 numPts x 13 的二维数组,near_pts 是一个 my_tup 的 vector ,其中 my_tup 是一个元组 ,而 sub_lib 是一个大小为 near_pts.size 的二维数组() x 13,其中此大小是在删除 near_pts 的任何元素之前设置的。

最佳答案

你的最终条件

// If we have found all of the tuples, exit the loop.
if (n==near_pts.size()) { break; }

不正确,因为 near_pts 在每场比赛中都会减少,而 n 会增加。

您可能想要检查类似if (near_pts.empty()) break;

关于c++ - 在两个 for 循环中删除 vector 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669763/

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