參考sgi stl 及 侯捷《stl原始碼剖析》概述
vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。但是它不是單純地 配置新空間->資料移動->釋放舊空間,它實際配置的大小會比客戶需求要大一點
定義
sgi stl的vector實現於stl_vector.h中,而不是vector.h中。
//_alloc是空間配置器
template
class
vector : protected _vector_base<_tp _alloc>
----------
typedef _tp value_type; //vector的class _tp的別名為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;
----------
#ifdef __stl_has_namespaces
using _base::_m_allocate;
using _base::_m_deallocate;
using _base::_m_start; //表示目前使用空間的頭
using _base::_m_finish; //表示目前使用空間的尾
using _base::_m_end_of_storage; //表示目前可用空間的尾
#endif /* __stl_has_namespaces */
----------
vector的迭代器
vector維護的是乙個連續線性空間,支援隨機訪問,所以vector提供的是random access iterators
vector的資料結構
使用三個指標來指示整個空間
using _base::_m_start; //表示目前使用空間的頭
using _base::_m_finish; //表示目前使用空間的尾
using _base::_m_end_of_storage; //表示目前可用空間的尾
vector的構造與記憶體管理
vector的實際可用空間將會比需要的空間大一些,一旦容量等於空間大小,將會將容量擴充兩倍
//建構函式
explicit
vector(const allocator_type& __a = allocator_type())
: _base(__a) {}
vector(size_type __n, const _tp& __value,
const allocator_type& __a = allocator_type())
: _base(__n, __a)
explicit
vector(size_type __n)
: _base(__n, allocator_type())
vector(const
vector
<_tp _alloc>& __x)
: _base(__x.size(), __x.get_allocator())
//填充並初始化
vector的元素操作
//將元素插到最末端
void push_back(const _tp& __x)
else
//沒有備用空間
_m_insert_aux(end(), __x);
}
iterator insert(iterator __position, const _tp& __x)
else
_m_insert_aux(__position, __x);
return begin() + __n;
}template
void
vector
<_tp _alloc>::_m_insert_aux(iterator __position, const _tp& __x)
else
//釋放舊空間,並重新調整各個迭代器的值
__stl_unwind((destroy(__new_start,__new_finish),
_m_deallocate(__new_start,__len)));
destroy(begin(), end());
_m_deallocate(_m_start, _m_end_of_storage - _m_start);
_m_start = __new_start;
_m_finish = __new_finish;
_m_end_of_storage = __new_start + __len;
}}
//將尾端元素取出
void pop_back()
//清除某位置上的元素
iterator erase(iterator __position)
iterator erase(iterator __first, iterator __last)
STL學習筆記(三) vector
1 定義 建構函式 1 vector vec 的內容根據儲存型別定,如char short long char string 同時結構體亦可以,其未定義大小 struct st voctor vec 2 vector vec1 6 大小為6,值預設為0 3 vector vec2 6,8 大小為6,...
STL 學習之vector測試
vector 是向量陣列,一端開口的陣列,其記憶體結構圖如下所示 可見其在尾部插入資料速度很快,而在其他地方插入資料將會很慢 void testvector vectortest vec clock t timestart clock for long i 0 i ran max i catch e...
STL學習筆記 陣列(vector)
2.屬性 3.操作 4.運算子過載 5.兩個演算法 關鍵字 引數列表 變數名 關鍵字 容器名字 類名 引數列表 容器的資料型別 2.容器的資料型別 基本資料型別 eg int char 本質和string一樣 結構體指標 物件 普通類物件 同結構體 其他容器物件 string沒有引數列表 strin...