在C++中,使用std::map
的erase()
函数删除一个元素时,会使得传入的迭代器无效化。这意味着如果你尝试在删除元素后继续使用该迭代器,就会导致未定义的行为。
如果您要在删除元素后继续迭代std::map
,您应该在删除元素之后递增迭代器,而不是继续使用已删除的迭代器。另外,您还可以使用std::map
的find()
函数来查找下一个元素的迭代器。
以下是一个示例代码,展示了如何在删除元素后继续迭代std::map
:
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> myMap;
myMap[1] = "one";
myMap[2] = "two";
myMap[3] = "three";
for(auto it = myMap.begin(); it != myMap.end(); ) {
if(it->first == 2) {
it = myMap.erase(it);
} else {
++it;
}
}
for(auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
return 0;
}
在上面的示例中,我们删除了键为2的元素,并且在删除后继续遍历std::map
。