+ -
当前位置:首页 → 问答吧 → list 的问题,求.........

list 的问题,求.........

时间:2011-12-02

来源:互联网

C/C++ code
    list<int> lst;
    lst.push_back(1);

    for (list<int>::iterator it = lst.begin();it!=lst.end();++it)
    {
        list<int>::iterator itemp = it;

        --it;

        lst.erase(itemp);

    }

作者: hlyces   发布时间: 2011-12-02

C/C++ code
    list<int> lst;
    lst.push_back(1);

    for (list<int>::iterator it = lst.begin();it!=lst.end();++it)
    {

        it = lst.erase(it);

    }
这两种会有问题么?

作者: hlyces   发布时间: 2011-12-02

erase会使得迭代器失效的

作者: hnuqinhuan   发布时间: 2011-12-02

都错了。

作者: qq120848369   发布时间: 2011-12-02

注意list<int>::iterator it,迭代器变量it不能为负值,你 it = lst.begin(),再--it,it为负值,出现异常。

作者: nuaazdh   发布时间: 2011-12-02

第二种情况, it = lst.erase(it);后it++越界了。

作者: nuaazdh   发布时间: 2011-12-02

erase后迭代器会失效。

下面是删除list中一个元素的定式,供参考:
C/C++ code

    for (list<int>::iterator it = lst.begin();it!=lst.end();/*++it*/)
    {
         if(删除元素的条件满足)
         {
               it = lst.erase(it);
         }
         else
         {
               ++it;
         }
    }

作者: pathuang68   发布时间: 2011-12-02

引用 6 楼 pathuang68 的回复:
erase后迭代器会失效。

下面是删除list中一个元素的定式,供参考:

C/C++ code

for (list<int>::iterator it = lst.begin();it!=lst.end();/*++it*/)
{
if(删除元素的条件满足)
{
it = lst.erase……
这个可以,或者如下:
C/C++ code
#include <list>
#include <iostream>
using namespace std;
int main()
{
    list<int> lst;
    lst.push_back(1);
    lst.push_back(1);
    lst.push_back(1);
    lst.push_back(1);
    lst.push_back(1);
    list<int>::iterator it1 = lst.begin(),
        it2 = lst.end();
    for (;it1 != it2;)
    {
        list<int>::iterator temp = it1;
        it1++;
        lst.erase(temp);
    }
    cout << lst.size() << endl;
    return 0;
}

作者: qscool1987   发布时间: 2011-12-02