前言
STL容器在项目中被广泛的应用,现做一个简单的整理,便于后期查阅、参考。本博客关于STL相关博文均指SGI版本的STL。由于本人能力有限,博文中有不正确的地方,欢迎各位读友批评、指正。
vecotr 概述
vector 的数据安排以及操作方式,与 array 非常相似。两者唯一的差别在于对空间运用的灵活性。array 是静态空间,一旦配置了就不能改变。vector 是动态空间, 随着元素的加入, 它的内部机制会自行扩充空间以容纳新元素。一下内容主要针对 vector 基本的数据结构以及常用的方法进行介绍。
vector 的数据结构
template <class T, class Alloc = alloc>
class vector {
public:
typedef T value_type;
typedef value_type* pointer;
typedef value_type* iterator;
typedef value_type& reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
protected:
iterator start; // 表示目前使用的空间头
iterator finish; // 表示目前使用的空间尾
iterator end_of_storage; // 表示目前可用的空间尾
// 略
public:
iterator begin() { reutrn start; } // 目前以使用空间头部
iterator end() { return finish; } //目前以使用空间尾部
size_type size() const { return size_type(end() - begin()); } // 目前已使用空间大小
size_type capacity() const { return size_type(end_of_storage - begin()); } // 目前全部可使用空间大小
bool empty() const { return begin() == end(); }
}