Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509799
  • 博文数量: 61
  • 博客积分: 10352
  • 博客等级: 上将
  • 技术积分: 2840
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 14:43
文章分类

全部博文(61)

文章存档

2009年(2)

2008年(59)

我的朋友

分类: C/C++

2008-07-17 23:19:02

#include
#include

using namespace std;

 

int main()
{
    vector<int> arr;
    arr.push_back(6);
    arr.push_back(7);
    arr.push_back(8);
    arr.push_back(9);

    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
        {
            it = arr.erase(it);
        }
        else
        {
            ++it;
        }
    }

    //注意上面不能写成

    /*
        for(vector::iterator it=arr.begin(); it!=arr.end(); it ++)
        {
            if(* it == 8)
            {
                arr.erase(it); //在erase后,it失效,并不是指向vector的下一个元素,it成了一个“野指针”。

            }
        }
      
    */


    cout << "After remove 8:\n";

    for(vector<int>::iterator it = arr.begin(); it < arr.end(); ++it)
    {
        cout << * it << " ";
    }
    cout << endl << arr.size();
    cout << endl;

}

阅读(3270) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-07-30 15:18:36

void fun() { vector iVec; vector::iterator it; for(int i=0;i<10;i++) iVec.push_back(i); display(iVec); for(it=iVec.begin();it!=iVec.end();++it) { if(*it ==4 || *it == 7) { it=iVec.erase(it); } else ++it; } display(iVec); } l例如上面这个 1 2 3 4 5 6 7 8 9 如果要删除4 和7 两个元素 则删除4后iterator返回5,不满足if()判断,这时++it执行两次,一次是else里面,一次是for()循环里面,导致7被错过 实际上,应该是这样的 void fun() { vector iVec; vector::iterator it; for(int i=0;i<10;i++) iVec.push_ba

chinaunix网友2009-07-30 14:53:05

不对啊,erase()就是返回下一个啊,楼主测试了么?

chinaunix网友2009-07-07 04:02:00

学习了 原来成野指针了

chinaunix网友2009-05-19 18:01:16

Good