当前位置: 首页 > news >正文

vector 迭代器 数据插入和弹出时迭代器失效的原因

vector 迭代器 数据插入和弹出时迭代器失效的原因

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<vector>
int main()
{int iarray[] = { 1,2,3,4,5 };std::vector<int> v1(iarray, iarray + 5);std::vector<int>::iterator it;//初始代iterator it = v1.begin();//iterator 是一个类中类  也是一个类型 这里有重载++for (; it != v1.end(); it++){//重载了*符号std::cout << *it << " " ;}std::cout << std::endl;it = v1.begin()+2;//这里直接报错  是应为在指定位置插入数据 实际就是 重新在堆区申请了一块区域 而iterator指针没有更新 还指向已delete的区域//v1.insert(it, 10);//std::cout << *it << std::endl;//而insert返回值 是一个指向新申请区域的iterator对像it = v1.insert(it, 10);std::cout << *it << std::endl;//同样 删除数据也会有同样的问题 v1.clear();v1 = { 1,2,3,3,3,3,3,4,5,6,7,8,9 };for (it = v1.begin(); it != v1.end(); ){if (*it == 3){it=v1.erase(it);}else{it++;}}for (it = v1.begin(); it != v1.end(); it++){//重载了*符号std::cout << *it << " ";}std::cout << std::endl;return 0;
}