【发布时间】:2014-07-11 00:34:08
【问题描述】:
以下代码有效(诚然,这不是执行此例程的最有效方法)。我的问题是,是否不鼓励像我在这里所做的那样重用迭代器?它会产生奇怪的行为吗?如果有,为什么?
std::map<char, int> map;
map['a'] = 10;
map['b'] = 30;
map['c'] = 50;
map['d'] = 70;
std::map<char, int>::iterator iterator = map.begin();
for (; iterator != map.end(); iterator++) {
if (iterator->second == 30 || iterator->second == 50) {
map.erase(iterator);
iterator = map.begin();
}
}
【问题讨论】:
-
如果您的编译器支持 C++11,您可以使用
iterator = map.erase(iterator);并避免多次遍历相同的元素。 -
是的,没关系。 “无效”意味着您不能尝试使用其中存储的值;但你可以设置一个新值。