我在循环通过地图时遇到问题(std :: map).
在我的循环中,有一个函数调用,有时(并不总是)擦除同一个映射的元素.使用此函数后,有一些代码使用这些映射信息作为输入.
在此功能擦除任何元素后,我没有任何问题,除了在地图的最后一个元素被删除的独特情况.
我的循环semms不明白地图的最后一个元素与它开始运行时的不一样,并且会尝试对不存在的元素进行操作,从而造成崩溃.
在我看来,对循环描述的myMap.end()调用无法使用地图的新end()更新自身.
代码的相关部分如下:
for(std::map<int, ConnectionInfo>::iterator kv = myMap.begin(); kv != myMap.end(); ++kv) {
int thisConnectionID=kv->first; //This is where I get garbage when the loop enters when it shouldnt;
ConnectionInfo currentConnectionInfo=kv->second; //This is where I get garbage when the loop enters when it shouldnt;
status=eraseSomeMapElementsIfNecessary(thisConnectionID,currentConnectionInfo.DownPacket); //this function might erase elements on myMap. This generates no problems afterwards, except when the end element of myMap is erased
... //Next parts of the code …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习 C++,以前没有使用过 C++ 或 C,而且我发现一些培训材料有时试图教我 C 编码而不是 C++。
由于我没有足够的知识来辨别这些书是否试图教我正确的 C++,我想我可以在 g++ 编译器上设置一些参数来解决这个问题。所以我的问题是:
如何在Windows中设置g++编译器,以便如果我写的不是纯C++标准,他就不会编译?
提前谢谢了
c++ ×2
compilation ×1
containers ×1
dictionary ×1
g++ ×1
gcc ×1
iterator ×1
loops ×1
standards ×1