在MSDN中: Standard C++ Library Reference 
list::erase 

Removes an element or a range of elements in a list from specified positions.(从指定的位置,移除list中一个元素,或者是移除一块区域的元素)

Return Value:
            A bidirectional iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the list if no such element exists.
 我的理解是:一个双向的迭代器指向移除元素或元素块的 下一个存在在元素。or  当在该list 中没有找到要删除的元素,那么将指向 end.


如果我想在一个list中保存 1---10,然后查找并且 删除5 的代码 应该是

#include <iostream>
#include 
<list>
using namespace std;

list
<int> lst;
int main()
{
    
for (int i = 0; i < 10; i++)
    {
        lst.push_back(
10-i);
    }

    list
<int>::iterator it = lst.begin();
    
for (; it != lst.end();)
    {
        
if((*it) == 5)
        {
            cout 
<< "Find It" << endl;
            cout 
<< (*it) << endl;
            lst.erase(it);
            cout 
<< (*it) << endl;//这不是我想要的4 而是一个随机数字
            break;
        }
        
else
        {
            it
++;
        }
    }

    it 
= lst.begin();
    lst.erase(it);
         cout 
<< (*it) << endl;//这处同样的问题    
    
for (it = lst.begin(); it != lst.end(); it++)
    {
        cout 
<< (*it) << endl;
    }
    return 
0;
}
在思考下。。。。这个问题缠绕我很久了,今天记录下来~~~~
  

关键是Return 的返回。。。。。
那么就要一个 it = lst.erase(it);    此时的 it 才是我要要的,也是Return 所描述的。。。
代码 如下:

#include <iostream>
#include 
<list>
#include 
<vector>
using namespace std;

list
<int> lst;
vector
<int> vec;
int main()
{
    
for (int i = 0; i < 10; i++)
    {
        lst.push_back(
10-i);
        vec.push_back(i);
    }

    list
<int>::iterator it = lst.begin();
    
for (; it != lst.end();)
    {
        
if((*it) == 5)
        {
            cout 
<< "Find It" << endl;
            cout 
<< (*it) << endl;
            it 
= lst.erase(it);//注意要接受返回的值
            cout 
<< (*it) << endl;
            break;
        }
        
else
        {
            it
++;
        }
    }
    vector
<int>::iterator it2 = vec.begin();

    
for (; it2 != vec.end(); it2++)
    {
        
if((*it2) == 5)
        {
            cout 
<< "Find it in vector" << endl;
            cout 
<< *it2 << endl;
            it2 
= vec.erase(it2);//注意要接受返回的值
            cout 
<< *it2 << endl;
        }
    }

    it 
= lst.begin();
    it 
= lst.erase(it);  //注意要接受返回的值
    cout 
<< (*it) << endl;

    
for (it = lst.begin(); it != lst.end(); it++)
    {
        cout 
<< (*it) << endl;
    }
    return 
0;
}

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理