vector::erase

转自http://www.cnblogs.com/xkfz007/archive/2012/08/17/2644061.html

erase的返回值是一个迭代器,而这个迭代器就是指向删除之前元素后的第一个元素

erase把要删除的指针指向了指针的下一个位置

remove,这个函数可以将迭代器范围内的等于某个值的元素“删除“

这里的删除是不改变容器的大小,只是将一些不满足条件的元素前移

这样的话保留的元素都移到了容器的前面,而remove正好就指向要删除的第一个元素,而后面的就是要删除的

然后执行erase操作

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=100010;
 4 vector<int> v;
 5 int x;
 6 int main(){
 7     puts("测试1:------");
 8     v.clear();
 9     v.push_back(2);
10     v.push_back(5);
11     v.push_back(5);
12     v.push_back(5);
13     v.push_back(5);
14     v.push_back(9);
15    // v.push_back(5);
16     x=5;
17     vector<int> ::iterator it;
18     for(it=v.begin();it!=v.end();it++) if(*it==x) v.erase(it);
19     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
20
21     puts("测试2:------");
22     v.clear();
23     v.push_back(2);
24     v.push_back(5);
25     v.push_back(5);
26     v.push_back(5);
27     v.push_back(5);
28     v.push_back(9);
29     v.push_back(5);
30     x=5;
31     for(it=v.begin();it!=v.end();) {
32         if(*it==x) v.erase(it);
33         else it++;
34     }
35     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
36
37     puts("测试3:------");
38      v.clear();
39     v.push_back(2);
40     v.push_back(5);
41     v.push_back(5);
42     v.push_back(5);
43     v.push_back(5);
44     v.push_back(9);
45     v.push_back(5);
46     x=5;
47     v.erase(remove(v.begin(),v.end(),x),v.end());
48     for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;
49 }

时间: 2024-11-13 06:11:48

vector::erase的相关文章

map/vector erase

问题核心:erase之后迭代器是否失效 vector调用erase之后,该迭代器之后的迭代器都失效: map调用erase之后,其他迭代器并不会失效. 1 vector<int> vecData; 2 for (typeof(vecData.begin()) it; it != vecData.end();) 3 { 4 if (*it == 1) 5 { 6 it = vecData.erase(it); 7 //vv.erase(it++); //vector erase之后,it迭代器后

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法

C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法. C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换. 1.std::vector::erase() 函数原型:iterator erase (iterator position); //删除指定元素 iterator erase (iterator first, iterator last); //删除指定范围内的元素 返回值:指向删除元素(或

MSDN?中?对vector::erase()的解释.xml

pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9;font-style:italic;font-weight:bold;} .selfFuc{color:#f1f9be;} .bool{color:#69305e;} .condition{color:#628698;font-weight:bold;} .key{color:#e336b6;} .

Stl——Vector.erase()用法

今天用上了Vector.erase()方法,发现很多鬼畜.后来查资料才发现,erase()是删除当前迭代器返回下一个迭代器.如果你仅仅是使用了erase但是没有更新遍历的迭代器就会导致当前迭代器被释放成野指针,成为野指针后再使用++ -- 的操作肯定会出问题.于是你需要将迭代器更新,即iter = myVec.erase():更新之后,iter已经指向了删除元素的下一位.此时跳出判断,又回到了for循环,for循环中iter又++了一次,这样就使得后面一个元素被跳过了.所以,在使用iter =

map, set, vector erase的正确使用方法

map, set, vector erase的正确使用方法 在C++中, 如果我们使用STL,那 如何使用 erase() 来删除 map, set, vector 的所有数据?下面将给出正确的使用方法. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃. 在使用 list.set 或 map遍历

C++ 容器 LIST VECTOR erase

在Vector中 做erase操作就是按照下面的步骤来做的: copy() destory(); 在list容器中 erase操作 destory() deallocate() Vector使用从某种意义上来说内存空间只是有增无减[如果不通过某种技术的话] 而list就像正常操作一样 该释放就释放 不改释放就不释放 Vector缩容的方法: 调用swap 这是真正释放内存的方法  a.swap(b)的方法来释放a以前的内存. swap也是有动作开销的 1个拷贝构造 加上2个复制操作符 不容小觑.

C++ vector erase函数的使用注意事项

最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项. 在C++primer中对c.erase(p) 这样解释的:  c.erase(p)    删除迭代器p所指向的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素,则返回尾后迭代器,若p是尾后迭代器,则会产生未定义行为. 这个函数我在使用的过程中发现有那么一点小小的注意事项 如果要想遍历一个容器,并且删除某个不符合要求的元素,那么最好使用while而不是使用for 因为 vector<RotatedRect>::iterat

stl vector erase

C++ Code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475   #include <stdio.h> #include <stdlib.h> #include <string.h> #include <vector> #

map 和 vector 的erase函数说明

1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: ? 1 2 3 4 5 (1) void erase (iterator position); (2)size_type erase (const key_type& k); (3)void erase (iterator first, iterator last); 在C++11中: ? 1 2 3 4 5 (1)iterator