(未完成)STL學習筆記(3)序列式容器 (Sequence Containers)
阿新 • • 發佈:2018-12-16
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); }
// ...
}