转载链接:http://blog.csdn.net/hlsdbd1990/article/details/46363433 (这篇写的很全面很详细,转载的博主是个女生,厉害,比较有用所以转载收藏下)
简介
看一下9.5节容器之间的区别—-list类似于链表,容易增删改,queue是两端增删改容易。,所以删除时,用到最多的容器时list
1.删除第一个或最后一个元素—–pop_front 和pop_back 函数,函数返回void
2.删除容器内的一个或一段元素—–erase函数,erase都返回一个迭代器,它指向被删除的元素后面的元素
3.删除容器内所有的元素—clear函数
4. 注意:在删除元素后迭代器会失效,因此一定要对迭代器重新赋值。另外,erase函数返回一个迭代器,指向被删除元素的下一个元素。因为在for语句头中要对迭代器加1,所以在if语句中将迭代器减1,以免漏掉需要处理的元素。
===========================================================================================================
一、删除元素—–queue和list容器
前面提到过使用insert操作在容器的任何位置插入元素,并支持特定的push_back和push_front 操作在容器首部或尾部插入新元素。
类似的,容器提供了erase操作和特定的pop_front和pop_back操作来删除容器内的元素。
1. 删除第一个或最后一个元素pop_front 和pop_back 函数—list可以,queue也可以
-
pop_front 和pop_back函数用于删除容器内的第一个和最后一个元素。但vector容器类型不支持pop_front操作。这些操作删除指定的元素并返回void;
-
pop_front 经常与front操作配套使用,实现以栈的方式处理容器
-
pop_front 和pop_back函数的返回值并不是删除的元素值,而是void。要获取删除的元素值,则必须在删除元素之前调用front或back函数。
- 1
- 2
- 3
- 4
- 5
2.删除容器内的一个或一段元素erase操作—list容器
-
删除一个或一段元素更通用的方法是erase操作。
-
该操作有两个版本:删除由一个迭代器指向的单个元素,删除由一对迭代器标记的一段元素。erase的这两种形式都返回一个迭代器,它指向被删除的元素后面的元素。
-
必须确保用作参数的迭代器或迭代器范围是有效的。
-
* 通常要在容器中找到要删除的元素后,才使用erase操作。寻找一个指定元素的最简单方法是使用标准库的find算法。*
-
find算法在后面的11.1节还会介绍,为了使用find函数或其他泛型算法,在编程时,必须将algorithm头文件包含进来。
-
find函数需要一对标记查找范围的迭代器以及一个在该范围内查找的值做参数,查找完成后,该函数返回一个迭代器,它指向具有指定值的第一个元素,或超出末端的下一个位置。
- 1
- 2
- 3
- 4
- 5
3.删除容器内所有的元素—clear函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- erase、pop_front、pop_back函数使指向被删除元素的所有迭代器失效。对于vector容器,指向删除点后面的元素的迭代器通常也会失效,而对于queue容器,如果删除时不包括第一个元素或最后一个元素,那么deque容器相关的所有迭代器都会失效
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40