赞
踩
用了这么久的 vector
,今天终于有时间来看下STL的实现源码了,开心?~
最近几个月在刷 leetcode
,用的较多的数据结构就是STL里面的 vector
了,相比较于直接的 array
数组,它具备了灵活地根据需求去分配管理内存,用户只管往里面扔东西,拿东西,而不用费心费力去解决C++里面的动态内存问题。
那么大致猜想一下,要实现一个这样的容器,不难想出在 vector
中至少存在这样三个私有成员:head(指向列表第一个元素位置), tail(指向列表最后一个元素位置), size(容器大小)
,
打开源码看看,得到验证:
- template<typename _Tp, typename _Alloc>struct _Vector_base {
- ...... struct _Vector_impl_data {
- pointer _M_start; // 指向容器中的第一个元素,是一个指针,指针类型为 Tp 所示类型 pointer _M_finish; // 指向容器最后一个元素,也是一个指针 pointer _M_end_of_storage; // 指向容器最后的位置 ...... }}template<typename _Tp, typename _Alloc = std::allocator<_tp> >class vector : protected _Vector_base<_tp> {
- typedef _Vector_base<_tp> _Base; // 如上 _Vector_base 所示,是一个基础实现 ......public:typedef _Tp value_type; // 数据类型typedef typename _Base::pointer pointer; // 全局数据指针 ......}
总之就是一层套一层,封装了一个又一个,来完成对数据的抽象。但是最后的接口是放在 vector
上放开的。
vector
支持动态内存分配&#x
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。