考虑以下代码片段:
map<wstring,int>::iterator it;
map<wstring,int> bimap;
//Creating Bigrams out of monograms
for (it= container.begin(); it != container.end();)
{
bimap[it->first + L" "+((++it)->first)]++;
++it;
++it;
}
如果运行此代码,程序将崩溃,而崩溃的原因是迭代器
it
的第二次增量。为什么会这样呢?迭代器需要增加,而我要增加两次而不是一次!它出什么问题了?如果我想将两个相邻的 map 项值保存到其他 map 中,就像我在上述for语句中所做的那样,该如何处理?如果我想将其他每三个项目合并并存储在一起怎么办?
我需要更新迭代器才能分别进行,但是我不知道该怎么做。
最佳答案
您将循环设置为在到达container.end
时结束,但是由于您使迭代器增加两次,所以您到达终点,然后在第二秒它++,您尝试进一步(错误)。
示例:假设您有3个元素。
it = container.begin()
++it // ok
++it //ok
it != container.end() //true
++it // ok BUT AT THIS MOMENT it = container.end !
++it // CRASH
关于c++ - 为什么在C++中迭代映射失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17772311/