基本数据结构:
基本上,
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)
,数组的尾