C++面试基础知识——C/C++篇(二)

本文总结了C++中的STL容器,包括vector、list、deque、stack和queue的特点与操作。vector提供了动态扩展的线性空间,但插入可能导致迭代器失效;list是双向链表,支持常数时间的元素插入和删除;deque是双向开口的分段连续空间,允许头部和尾部快速操作;stack和queue默认底层容器为deque,提供了特定操作接口。
摘要由CSDN通过智能技术生成

STL容器总结

1.vector

vector的元素排列和操作方式与array很相似,不同的是vector是动态空间,能够随着元素的添加自动扩展空间。它的实现关键在于对大小的控制以及重新配置空间时移动元素的效率。

vector的iterator定义是value_type*,也就是普通的指针。因为vector维护的空间是一个连续线性空间,所以普通的指针就能满足vector迭代器的所有需求

 

vectord的构造与内存管理

vector的定义默认使用的是alloc作为空间配置器,并且为了方便以元素大小为配置单位定义了data_allocator。data_allocator::allocate(n)会分配n个元素空间大小,uninitialized_fill_n则会根据迭代器的型别特性(详见《STL源码剖析》笔记-迭代器iterators)选择效率较高的方式进行构造。

当使用push_back()将元素插入尾部时,会先检查是否有备用空间,如果有就直接在备用空间中构造,并调整迭代器finish。否则,就需要进行扩展空间,vector扩展空间的方式是申请新的空间,然后把原有的内容复制过来,然后释放原有空间,这是为了保证空间的连续性。因此,一旦发生了空间的扩展,原有的迭代器全都会失效,这点需要特别注意。

2.list

相较于vector的连续线性空间,list就复杂许多ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值