C++容器源码分析-----Vector

本文深入探讨C++中的Vector容器,包括其基本数据结构、迭代器、构造函数、属性获取、push_back、pop_back、erase和insert等操作。详细分析了在不同情况下的插入和删除策略,以及这些操作对内存和迭代器的影响。总结指出,Vector在内存中存储连续,支持随机访问和下标操作,但插入删除操作时间复杂度为O(n),在频繁的插入删除场景中效率较低,且使用者需要注意迭代器和索引的合法性。

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

基本数据结构:

基本上, STL ⾥⾯所有的容器的源码都包含⾄少三个部分:
  • 迭代器,遍历容器的元素,控制容器空间的边界和元素的移动;
  • 构造函数,满⾜容器的多种初始化;
  • 属性的获取,⽐如 begin()end()等;

迭代器:

template <class T, class Alloc = alloc>
class vector {
public:
	// 定义 vector ⾃身的嵌套型别
    typedef T value_type;
    typedef value_type* pointer;
	typedef const value_type* const_pointer;
	// 定义迭代器, 这⾥就只是⼀个普通的指针
	typedef value_type* iterator;
	typedef const value_type* const_iterator;
	typedef value_type& reference;
	typedef const value_type& const_reference;
	typedef size_t size_type;
	typedef ptrdiff_t difference_type;
	...
protected:
	typedef simple_alloc<value_type, Alloc> data_allocator; // 设置其空间配置器
	iterator start; // 当前使⽤空间的头
	iterator finish; // 当前使⽤空间的尾
	iterator end_of_storage; // 当前可⽤空间的尾
	...
};
因为 vector 需要表示⽤户操作的当前数据的起始地址,结束地址,还需要其真正的最⼤地址。所以总共需要 3
迭代器分别指向:数据的头 (start) ,数据的尾 (finish) ,数组的尾 (end_of_storage)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是纠结伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值