map的erase方法

如果erase()总是返回下一元素的位置,那就可以像在vector容器中删除元素一样,如:

//     删除所有实值为2的元素

      map< int, int >::iterator itMap = mapInt.begin();

      for ( ; itMap != mapInt.end();   ) {

             if (  itMap->second == 2 ) {

                    itMap = mapInt.erase( itMap );

             }

             else {

                    ++itMap;

             }

      }

但是,注意,以上的方式只在vc使用P.J.STL中才能编译通过,而使用SGI STL库则编译不过,因为SGISTL库在设计中考虑到如果用户不需要这一特性,就会损失性能,因此否决了这种想法。所以要保证可移植性,最好采用下面的方法:

//       删除所有实值为2的元素

        map< int, int >::iterator itMap = mapInt.begin();

        for ( ; itMap != mapInt.end();  ) {

                  if (  itMap->second == 2 ) {

                           //         itMap++将使itMap指向下一个元素,但返回原迭代器的副本,所以

                           //         erase()被调用时,itMap不指向将要被删除的元素

                           mapInt.erase( itMap++ );

                  }

                  else {

                           ++itMap;

                  }

        }


ps:其实是windows下的stl和sgi stl关于earse的区别

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rufeng18/archive/2007/12/21/1957836.aspx

转载于:https://www.cnblogs.com/Ray8686/archive/2011/03/02/1968706.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值