STL顺序容器vector与list

1 vector

vector与array的区别在于,空间运用的灵活性不同。array是静态空间,大小不能动态改变。vectro则不同,vector随着元素的增加,空间也会不断增加,用户不需要空间怎么增加。
vector的关键在于:对大小的控制以及重新配置内存时,数据移动的效率问题。

vector迭代器用的是Random Access Iterators。vector的迭代器就是普通指针。

vector的数据结构


start 表示目前使用空间的头;finish表示目前使用空间的尾后。end_of_storage表示目前可用空间的尾后。

vector内存管理:
在插入元素前要判断可用空间是否够用。如果不够用,则需要分配新空间。新空间的大小是旧空间的两倍。然后旧空间数据移动/在新空间插入新数据/析构并释放旧空间。这种内存管理机制,使得当重新分配新空间后,之前的迭代器全部失效。

vector插入操作:

假设备用空间足够容纳待插入的数据:

情况1:插入位置到finish的距离>插入元素的个数





情况2:插入位置到finish的距离<=插入元素的个数


如果备用空间不足以容纳新增数据:




2 list



list 结构是一个双向链表,而且是个环状的双向链表。只用一个指针便能表示整个环状双向链表。
list有一个空白结点,链表的指针成员node指向它,当链表为空时,node->pre 与node->next 都指向node自身。



因为list是双向链表,所以list的迭代器是Bidirectional Iterators。list与vector对比,一个重要的性质是,结点插入操作不会引起旧迭代器的失效。因为list是链式存储,没有vector的空间不足,重新分配的问题。


list中值得注意的地方:
1 成员函数unique()实现,只有“连续相同的元素”才会被除剩一个。
2 STL算法sort()只接受RandomAccessIterator,而list的迭代器类型为BiDirectional Iterators。













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值