1. 程式人生 > >(未完成)STL學習筆記(3)序列式容器 (Sequence Containers)

(未完成)STL學習筆記(3)序列式容器 (Sequence Containers)

在這裡插入圖片描述

1. vector

vector與陣列array十分相似,但array是靜態空間,而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; // ... }

1.1 vector 的資料結構

在這裡插入圖片描述 很簡單,就是線性連續空間,使用了三個迭代器來指示這段空間的範圍

template <class T, class Alloc = alloc>
class vector{
// ...
protected:
	iterator start;             //表示目前使用空間的頭
	iterator finish;            //表示目前使用空間的尾
iterator end_of_storage; //表示目前可用空間的尾 // ... }

vector實際的配置大小一般會比需求量更大一些,我們用容量(capacity)表示vector當前的容量,而用大小(size)表示已經使用的空間大小。

template <class T, class Alloc = alloc>
class vector{
// ...
public:
	iterator begin() { return 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(); } reference operator[](size_type n) { return *(begin() + n); } reference front() { return *begin(); } reference back() { return *(end() - 1); } // ... }

1.2 vector的構造與記憶體管理: constructor, push_back