迭代器的空间分配和失效问题

STL中的迭代器类似指针但更强大,初始空间分配随元素增加呈翻倍增长,如vector通过reserve设定初始空间。迭代器失效主要发生在push_back或erase操作后,因容器大小变化导致迭代器无法正确指向。保险做法是注意插入后的容器容量变化及删除操作后的迭代器更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在STL中,迭代器类似于指针的作用,但是又不仅仅局限于指针。它可以用来指向类或者其他数据类型。

默认情况下,迭代器的空间分配是先分配一个,当vector的空间不够,则空间加倍,即空间的大小随着加入元素的增多,依次为0,1,2,4,8,16,...

如果使用vector.reserve进行空间大小的设定时,如果空间初始设定值为N,当元素数目大于N时,空间大小也将翻倍变为2N。

自己尝试编写一个vector的例子,帮助理解其空间分配的概念

#include<iostream>
using namespace std;

template <typename T>
struct TContainer
{
	virtual void push(const T&)=0;
	virtual void pop() = 0;
	virtual const T& begin() = 0;
	virtual const T& end() = 0;
	virtual size_t size() = 0;
};

template <typename T>
struct TVector:public TContainer<T>
{
	static const size_t _step = 10;
	TVector()
	{
		_size = 0;
		_cap = _step;
		buf = 0;
		re_capacity(_cap);
	}
	~TVector()
	{
		free(buf);
	}
	void re_capacity(size_t s)
	{
		if(!buf)
			buf = (T*)malloc(sizeof(T)*s);
		else
			buf = (T*)realloc(buf,sizeof(T)*s);
	}
	void push(const T& t)
	{
		if(_size >= _cap)
			re_capacity(_cap +=_step);
		buf[_size++] = t;
	}
	void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值