c++迭代器失效问题
来源:互联网 发布:php数组是什么数据结构 编辑:程序博客网 时间:2024/06/06 23:55
Segentation fault(core dumped)
在Linux上写程序的时候,我们在调试的时候会出现如标题一样的提示,这说明你的程序访问了非法的内存,用了非法的指针(可能说的不太准确,但一定是你访问了不该访问的内存),其中一种常见的错误就是迭代器的失效问题: 举个栗子
int arr[6] = {1, 2, 3, 2, 3, 4};vector<int> v1(arr, arr+6);for(auto it = v1.begin(); it != v1.end(); it++) { if(*it == 2) { v1.erase(it); }}
乍一看这是理所当然的操作, 把vector中的2删掉,但不然,当第一个2被删的时候,迭代器已经指向了一个空内存,当执行it++的时候显然不是访问我们想要访问的内存,故出现了内存访问错误。
那么问题来了,正确的操作是怎么样的呢?
为了让大家理解,我们应该要知道vector的erase函数的返回值是所删除元素的下一个空间;
所以正确的代码为:
int arr[6] = {1, 2, 3, 2, 3, 4};vector<int> v1(arr, arr+6);auto it = v1.begin();while(it != v1.end()) { if(*it == 2) { it = v1.erase(it); } else { it++; }}
Enjoy coding1
- Written by Vilin. Thanks for your reading. ↩
阅读全文
0 0
- [C++] STL迭代器失效
- 【C++】迭代器的失效
- STL迭代器失效问题
- 迭代器失效问题
- 迭代器失效的问题
- STL迭代器失效问题
- C++迭代器失效问题
- STL迭代器失效问题
- STL迭代器失效问题
- 容器迭代器失效问题
- 迭代器失效问题
- STL迭代器失效问题
- STL 迭代器失效问题
- C++迭代器失效问题
- STL迭代器失效问题
- STL迭代器失效问题
- STL迭代器失效问题
- STL迭代器失效问题
- 后缀数组 poj. 1743. Musial Theme
- Jmeter 跨线程组传递参数
- Educational Codeforces Round 22 A. The Contest
- JavaScript
- Zookeeper可以干什么
- c++迭代器失效问题
- Matlab中设置运行时间
- leetcode520. Detect Capital
- 数据持久化
- Java学习笔记---增强for循环
- 蓝桥-ALGO-33-数列
- Oracle中的查询转换简介(上)
- 1999 ICPC WF H Flooded! 【思维】【细节】
- PDFBinder1.2汉化版,tek2y原创汉化!