容器删除元素erase,迭代器失效的问题
来源:互联网 发布:linux系统数据库备份 编辑:程序博客网 时间:2024/05/10 14:28
转载链接: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
注意:在删除元素后迭代器会失效,因此一定要对迭代器重新赋值。另外,erase函数返回一个迭代器,指向被删除元素的下一个元素。因为在for语句头中要对迭代器加1,所以在if语句中将迭代器减1,以免漏掉需要处理的元素。
- 容器删除元素erase,迭代器失效的问题
- 容器erase迭代器失效的问题
- 删除容器中元素时的迭代器失效问题
- erase-remove删除容器元素
- 小心删除容器中元素时的迭代器失效
- 小心删除容器中元素时的迭代器失效
- 小心删除容器中元素时的迭代器失效
- 容器元素的删除erase,size,clear方法的使用
- 容器insert、erase操作引起迭代器失效问题
- STL容器中元素的删除erase()、remove()
- STL容器之删除元素,迭代器失效
- STL容器之删除元素,迭代器失效
- 迭代器失效(1)-小心使用STL容器的erase()
- 迭代器失效(1)-小心使用STL容器的erase()
- STL中容器操作的迭代器失效-erase()函数陷阱
- 容器erase删除的使用
- remove/remove_if算法配合容器的erase方法实现容器删除元素功能
- C++中容器迭代器删除失效问题
- 高性能网站建设指南总结
- Linux mysqldump crontab 备份数据失败
- 将Node.js项目docker容器化并纳入kubernetes调度编排的实践
- Webpack modules.rules所包含的数组的Rule具有的一些参数
- 假装是一个成功的布局——3、java逻辑代码
- 容器删除元素erase,迭代器失效的问题
- python enumerate函数
- Android之SoundPool详细讲解
- maven resources的理解
- VIM基本操作
- 随机验证码生成和获取——基于python tkinter、pytesseract实现
- Tomcat
- Eclipse unhandled event loop exception no more handles
- 11.10第八节课