小编use*_*682的帖子

地图上的C++循环没有检测到地图结束的变化

我在循环通过地图时遇到问题(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++ containers dictionary iterator loops

4
推荐指数
1
解决办法
140
查看次数

如何让 g++ 强制我遵守 C++ 标准

我正在尝试学习 C++,以前没有使用过 C++ 或 C,而且我发现一些培训材料有时试图教我 C 编码而不是 C++。

由于我没有足够的知识来辨别这些书是否试图教我正确的 C++,我想我可以在 g++ 编译器上设置一些参数来解决这个问题。所以我的问题是:

如何在Windows中设置g++编译器,以便如果我写的不是纯C++标准,他就不会编译?

提前谢谢了

c++ standards gcc compilation g++

1
推荐指数
1
解决办法
1323
查看次数

标签 统计

c++ ×2

compilation ×1

containers ×1

dictionary ×1

g++ ×1

gcc ×1

iterator ×1

loops ×1

standards ×1