STL::vector源码及函数

本文详细解析了C++ STL中vector容器的工作原理,包括其内部指针机制、遍历方式、空间增长策略及迭代器特性。通过具体步骤解释了insert_aux()函数如何处理元素插入,特别指出push_back()和insert()调用该函数的不同之处。

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

vector是一种动态增长的数组。
vector 遍历
在这里插入图片描述
在这里插入图片描述GNU 2.9
一个vector中所含的数据为三根指针 start, finish, end_of_storage
所以sizeof()一个vector值为12。(一个指针占4位)
满足前闭后开区间原则,start指向第一个元素,finish指向最后一个元素的下一位。

空间二倍增长:发生在添加元素时当finish==end_of_storage,利用辅助插入函数insert_aux()函数实现
在这里插入图片描述
insert_aux()步骤:
1.检查finish是否等于end_of_storage
2.如果size不为0,申请一个2*size的空间。
3.将原vector中在插入元素之前的元素拷贝到新vector中。
4.将新的元素插入在新的vector内。
5.将原vector中在新插入元素之后的元素拷贝带vector中。
注意:在push_back()中第1步和第5部是多余的。push_back()在调用insert_aux()之前已经检查过步骤1,push_back()在最后插元素不需要步骤5。insert_aux()之所以这样设计是因为除了push_back()函数意外insert()函数也会调用insert_aux(),需要步骤1和5。

vector迭代器:

GNU2.9 中直接将迭代器定义为元素类型的指针。
算法如果需要获取迭代器的特征(trait)使用萃取机( iterator_traits)
vector::iterator it=v.begin();
iterator_traits::iterator_category
iterator_traits::difference_type
iterator_traits::value_type
GNU4.9中迭代器被设计为一种复杂的class。

vector内的函数:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值