赞助

C++ vector 删除一个指定元素 和 find 一个指定元素以及遍历删除、 map遍历删除元素和删除find到的元素

vector:

1.delete element

转载:http://www.cnblogs.com/xudong-bupt/p/3522457.html

 1 #include <vector>
 2 using namespace std;
 3 void main(void)
 4 {
 5 vector<int> array;
 6 array.push_back(1);
 7 array.push_back(2);
 8 array.push_back(3);
 9 array.push_back(4);
10 array.push_back(5);
11 
12 vector<int>::iterator itr = array.begin();
13 while (itr != array.end())
14 {
15     if (*itr == 3)
16     {
17       itr = array.erase(itr);//删除元素,返回值指向已删除元素的下一个位置
18     }
19     else
20     {
21       ++itr;
22     }
23   }
24  }

 

2.find element

 转载:http://blog.sina.com.cn/s/blog_7c18235d0100tnjt.html

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 using namespace std;
 5 
 6 vector<int> array(100);//整型的array数组
 7 
 8 int main()
 9 {
10     array[20]=50;
11 
12     vector<int>::iterator s=find(array.begin(),array.end(),50);//第一个参数是array的起始地址,第二个参数是array的结束地址,第三个参数是需要查找的值
13 
14     if( s !=array.end())//找到
15     cout<<*s<<endl;
16 
17     else cout<<"not find!"<<endl;
18     system("pause");
19     return 0;
20 }

3.Traverse delete element

 1 #include <vector>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7         vector<int> test_vec;
 8         for (int i = 0; i<100;i++)
 9         {
10                 test_vec.push_back(i);
11         }
12         for(vector<int>::iterator it  = test_vec.begin(); it != test_vec.end(); )
13          {
14                  cout<<*(it)<<endl;
15                  it = test_vec.erase(it);
16         }
17          return 0;
18  } 

 

转载:http://blog.csdn.net/windren06/article/details/8141921 

转载:http://www.cnblogs.com/dabaopku/p/3912662.html

转载:http://blog.csdn.net/dds_dev_group/article/details/6951441

map:

1.Traverse  delete element

方法一

#include<map>
#include<string> int main() { map<string,int> m; m["a"]=1; m["b"]=2; m["c"]=3; map<string,int>::iterator it; for(it=m.begin();it!=m.end();) { map<string,int>::iterator it_back = it;//备份迭代器。因为删除操作后,迭代器指向空,要备份。 if(it_back != m.end()) { it++; m.erase(it_back); } } return 0; }

 it指针在元素被删除后失效了,所以在删除之前要备份当前it,it++之后移动一下个元素,然后再删除当前元素

方法二:

 1 int main()
 2 {
 3     std::map<string,int>  m;
 4     m["a"]=1;
 5     m["b"]=2;
 6     m["c"]=3;
 7     map<string,int>::iterator it;
 8     for(it=m.begin();it!=m.end();)
 9     {
10         if(it != m.end())
11         {
12             m.erase(it++);
13         }
14     }
15     return 0;
16 }

在执行erase之前,it已经被加1了。erase会使得以前那个未被加一的it失效,而加了一之后的新的it是有效的。

2. find delete element(找到指定的元素删除)

#include<map>
int main()
{
    map<string,int>  m;
    m["a"]=1;
    m["b"]=2;
    m["c"]=3;
    map<string,int>::iterator iter;

    iter = m.find("a");

    if(iter!=m.end())//找到了
    {
        cout << iter->first << endl;
        m.erase(iter);
    }
    return   0;
}

 

点击下载Demo

posted @ 2014-12-01 11:31  车臣  阅读(7017)  评论(0编辑  收藏  举报