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;
}

posted on 2026-01-30 14:46  海的寂寞  阅读(0)  评论(0)    收藏  举报

导航