我正在将一个中型C++项目从Visual Studio 2005移植到MacOS,XCode/GCC 4.0.
我偶然发现的一个差异与从地图中删除元素有关.在Visual Studio中,我可以擦除迭代器指定的元素,并将返回值赋给迭代器以获取下一个元素的位置.这样,迭代器在擦除后不会指向某个无效地址.
换句话说,在Visual Studio中我可以这样做:
itor = m_ResourceMap.erase(itor);
在GCC 4.0中,擦除函数返回void,所以我不能这样做.这是否意味着以下映射元素向后移动,因此迭代器自动指向下一个元素,或者这是否意味着我必须在之后增加迭代器?该 在线文档STL是不是关于这个问题的非常简洁的XCode似乎并没有什么.
谢谢你的帮助,
阿德里安
不.在擦除之前必须增加迭代器.像这样
m_ResourceMap.erase(itor++);
擦除无效的迭代器,因此您不能在之后递增它.