標籤:bsp 資料 內部使用 不同的 記憶體 樣本 結構 logs sizeof
vector是C++標準模板庫中一種常見的容器,像數組類似,vector使用連續的儲存空間用來儲存元素,使用指標位移可以快速的訪問元素(通常認為是O1複雜度),與數組不同的是它的大小是可變的,在vector內部使用動態分配的記憶體儲存元素,這意味著vector增長時需要重新分配記憶體,並將原來的原來的資料複製到該記憶體單元,需要很大的開銷,因此vector並不會在每次新增元素時候都重新分配記憶體空間。vector實際容量(capacity)通常比實際大小(size)大得多。參考資料結構(C++語言版),我們可以看到capacity的增長都是成倍增長的:
template <typename T> void vector<T>::expand() { if (_size < _capacity) return; T *oldElem = _elem; _elem = new T[_capacity <<= 1]; for (int i = 0; i < _size; i++) _elem[i] = oldElem[i]; delete [] oldElem;}
vector的常見構造方法:
- 預設構造,構造一個空容器,沒有元素。
- 構造n個元素,每個元素為m
- 區間構造,可以是迭代器,也可以數組區間
- 複製構造
下面為具體程式碼範例:
std::vector<int> first; std::vector<int> second (5,100); std::vector<int> third (second.begin(),second.end()); std::vector<int> fourth (third); // 複製構造 int ary[] = {6,12,17,2}; std::vector<int> fifth (ary, ary + sizeof(ary) / sizeof(int) ); for (auto it = fifth.begin(); it != fifth.end(); ++it) std::cout << ‘ ‘ << *it; std::cout << std::endl;
C++標準模板庫之vector(Boolan)