【发布时间】:2016-11-14 23:37:56
【问题描述】:
我正在使用集合进行练习,但收到一条错误消息,我不知道如何解释。我对编程的技术方面不太了解。我是一名数学系的学生,所以我只专注于实际的编程本身,所以我不知道如何处理某些错误。
我做了集合,并用端点插入了从 0 到 100 的每个整数。然后我想擦除除 2 本身之外的所有可被 2 整除的整数。代码如下:
set<int> intSet;
for (int i = 0; i < 101; i++) {
intSet.insert(i);
}
for (set<int>::iterator twoDivIt = intSet.begin(); twoDivIt != intSet.end(); twoDivIt++) {
if (*twoDivIt % 2 == 0) {
if (*twoDivIt == 2) {
continue;
}
else {
intSet.erase(twoDivIt);
}
}
}
for (set<int>::iterator it = intSet.begin(); it != intSet.end(); it++) {
std::cout << *it << "\t";
}
我得到一个弹出窗口,告诉我 debuc 断言失败,并且“映射/设置迭代器不可增加”。我做错了什么?
【问题讨论】:
-
在迭代时删除条目是一个非常糟糕的主意。
-
在这种情况下循环遍历整数并删除我想删除的那些更好吗?
-
你为什么要把所有的整数都加起来?您可以只添加奇数,而不是添加所有并删除偶数。
-
@tkausl 是的,当然,如果这是针对实际程序,我会这样做。这是练习的明确愿望;)只是为了让我们学习如何使用集合。