c++語言本身提供了乙個序列式容器array,stl另外再提供vector、list、deque、stack、queue、priority_queue等序列式容器。
vector的資料安排以及操作方式,與array是很相似的,唯一的不同點在於空間的運用的靈活性,array是靜態的,一旦配置了就不能再改變了,而vector是動態開闢空間的,隨著元素的不斷加入,內部機制會自行進行擴充來容納元素。如果每增加乙個元素,擴充乙個空間,是不明智的,所以vector底層實現時,會一次性擴充好舊空間的2倍。
擴充的過程大致如下:開闢新空間; 搬移元素;釋放舊空間。
模擬實現vector
#include
監視視窗,主要檢視v4和v5的初始化是否按照我們預期的初始化。//初始化
vector
v1;//宣告乙個int型的向量,初始值為0
vector
v2(10);//宣告乙個初始值為10的向量,初始值為0
vector
v3(10, 1);//宣告乙個初始值為1且有10個元素的向量
vector
tmp(v3.begin(), v3.begin() + 2);//用v3的第0個到第1個值初始化tmp
int arr = ;
vector
v4(arr, arr + 5);//用陣列元素進行初始化向量
vector
v5(&arr[1], &arr[3]);//用陣列中某一段位址進行初始化向量
(1)容量(capacity)
(2)修改(modifiers)v.size();//向量大小
v.max_size();//向量最大容量
v.capacity();//向量真實大小
v.empty();//向量判空
v.resize(newsize);//更改向量的大小
將幾個有多個函式原型的修改函式重點拿出來講一下。v.assign();//多個元素賦值
v.push_back(data);//尾插
v.pop_back();//尾刪
v.insert();//任意位置插入元素
v.erase();//任意位置刪除元素
v.swap();//交換兩個vector
v.clear();//清空向量元素
assign
assign函式原型:
assign的使用:template
void assign ( inputiterator first, inputiterator last );
void assign ( size_type n, const t& u );
vector
v1;//宣告乙個int型的向量,初始值為0
insert的函式原型:
iterator insert ( iterator position, const t& x );//在任意位置插入乙個元素
void insert ( iterator position, size_type n, const t& x );//在任意位置插入n個元素
template
void insert ( iterator position, inputiterator first, inputiterator last );//在任意位置插入某一段元素
erase
erase的函式原型:
iterator erase ( iterator position );//刪除任意位置的乙個元素
iterator erase ( iterator first, iterator last );//刪除任意位置的多個元素
swap
swap的函式原型:
void swap ( vector
& vec );//交換兩個陣列的元素
//使用
v1.swap(v2);
v.begin();//開始指標
v.end();//末尾指標
v.rbegin();//反向迭代器的開始指標
v.rend();//反向迭代器的末尾指標
v[2];//下標訪問,不會檢查是否越界
v.at(2);//下標訪問,會檢查是否越界,越界丟擲異常
v.front();//訪問第乙個元素
v.back();//訪問最後乙個元素
遍歷元素//方法一
vector
::iterator it;
for( it = v.begin(); it != v.end(); it++)
sort(v.begin(), v.end(), comp);
檢視文件進一步學 教你使用STL容器之list
相較於vector的連續線性空間,list就稍微有點複雜,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。list對於空間的運用有絕對的精準,一點也不浪費,而且對於任何位置元素的插入和刪除,list時間複雜度為o 1 list底層是乙個帶頭結點的雙向迴圈鍊錶。list的插入和刪除操作都不...
stl容器之順序容器
stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...
STL之關聯容器
1.set單重集合 不允許key重複 set作為乙個容器,也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料 c stl中標準關聯容器set,multiset,map,multimap內部採用的就是一種非常高效的平衡檢索二叉樹 紅黑樹 include using namespace ...