当前位置:  开发笔记 > 编程语言 > 正文

为什么g ++ 4.0版本的map <T> :: erase(map :: <T> iterator)不返回迭代器?

如何解决《为什么g++4.0版本的map<T>::erase(map::<T>iterator)不返回迭代器?》经验,为你挑选了1个好方法。

我正在将一个中型C++项目从Visual Studio 2005移植到MacOS,XCode/GCC 4.0.

我偶然发现的一个差异与从地图中删除元素有关.在Visual Studio中,我可以擦除迭代器指定的元素,并将返回值赋给迭代器以获取下一个元素的位置.这样,迭代器在擦除后不会指向某个无效地址.

换句话说,在Visual Studio中我可以这样做:

itor = m_ResourceMap.erase(itor);

在GCC 4.0中,擦除函数返回void,所以我不能这样做.这是否意味着以下映射元素向后移动,因此迭代器自动指向下一个元素,或者这是否意味着我必须在之后增加迭代器?该 在线文档STL是不是关于这个问题的非常简洁的XCode似乎并没有什么.

谢谢你的帮助,

阿德里安



1> jpalecek..:

不.在擦除之前必须增加迭代器.像这样

m_ResourceMap.erase(itor++);

擦除无效的迭代器,因此您不能在之后递增它.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有