STL迭代器失效问题记录

/*
	根据<stl源码剖析>书中所述,map和list相同的某些性质,当客户端对她进行元素新增操作或删除操作时,
	操作的所有迭代器,在操作完成之后依然有效,但让,被删除的那个元素的迭代器必然是个例外。
	而vector的迭代器在删除的时候,会返回指向下一个内容的指针,但是对vector的任何操作,一旦引起空
	间重新配置,指向原来的vector的所有迭代器都将失效了。这是程序员容易犯的一个错误。
*/
#include <map>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
	map<int, int> obj_m;
	vector<int>   obj_v(3);

	obj_v[0] = 2;
	obj_v[1] = 3;
	obj_v[2] = 4;

	obj_m[1] = 2;
	obj_m[2] = 3;
	obj_m[3] = 4;

	/*
		map的erase返回操作为void类型
		std::map::erase	
		<map>
		void erase ( iterator position );
		size_type erase ( const key_type& x );
		void erase ( iterator first, iterator last );

	*/
	map<int,int>::iterator iter = obj_m.begin();
	while(iter != obj_m.end())
	{
		obj_m.erase(iter++);
	}
	
	/*
		vector的erase返回值为迭代器
		std::vector::erase
		<vector>
		iterator erase ( iterator position );
		iterator erase ( iterator first, iterator last );
	*/
	vector<int>::iterator iter_v = obj_v.begin();
	for(; iter_v != obj_v.end();)
	{
		iter_v = obj_v.erase(iter_v);
	}

	cout<<obj_m.size()<<endl;
	cout<<obj_v.size()<<endl;

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值