資料結構機考的你,想不想偷懶?快來看一看c++的stl吧。
stl(standard template library)標準模板庫提供了一些列資料結構和演算法,幫你更高效地解決問題。下面列出一些常用的(stl的一小部分)資料結構和演算法介面,標準採用sgi stl,參考自the annotated stl sources
(所有容器採用泛型設計,可採用泛型方式呼叫,標頭檔案為容器名)
一、vector 向量容器
vector與array相比,其差異在於vector動態分配空間(線性連續位址),並且整合了一系列操作函式。
public介面:(建構函式與析構函式不列出且有省略)
iterator begin(); //返回首元素
inerator end(); //返回末尾元素的下乙個位置指標,注意不是最後乙個元素
size_type size() const; //返回vector長度
size_type capacity() const; //返回容器容量
bool empty() const; //返回向量是否為空
reference operator; //可用符號進行同陣列一樣的下標訪問
void push_back(const t& x); //將x元素新增到最後
void pop_back(); //將最後乙個元素取出
iterator erase(iterator position); //刪除position位置的元素,並返回操作後position位置的元素
void resize(size_type new_size); //改變向量長度
void clear(); //清空向量
遍歷: 迭代器方法、直接線性遍歷方法
二、stack 棧
stack沒有迭代器,不可遍歷。
stack底層採用list實現。
public介面:
(建構函式與析構函式不列出且有省略
)bool empty() const;
size_type size() cosnt;
reference top(); //返回棧頂元素
void push(const value_type& x); //元素入棧
void pop(); //棧頂元素彈棧
三、queue 佇列
queue沒有迭代器,不可遍歷。
queue底層採用list實現。
public介面:
(建構函式與析構函式不列出且有省略
)bool empty() const;
size_type size() const;
reference front(); //返回隊首元素
reference back(); //返回隊尾元素
void push(const value_type& x); //元素入隊
void pop(); //元素出隊
四、 set 集合
set中所有元素會根據鍵值自動排序,set中不允許有相同鍵值元素。set是非線性排列的,其底層採用紅黑樹,採用平衡二叉搜尋機制,set的迭代器是const型別,不能寫入修改值。(預設公升序)set的遍歷採用迭代器,迭代器重載過操作符對平衡樹進行中序遍歷。
public介面:
(建構函式與析構函式不列出且有省略
)iterator begin() const;
iterator end() const;
bool empty() const;
size_type size() const;
void swap(set& x); //交換兩個集合中元素
pairinsert(cosnt value_type& x); //插入x元素
void insert(inputiterator first, inputiterator last); //插入first到last區間(前閉後開)內的所有元素
void erase(iterator position); //刪除position位置迭代器的元素
size_type erase(const key_type& x); //刪除key為x的元素
void erase(iterator first, iterator last); //刪除集合中等於first到last區間內的所有元素
void clear();
iterator find(const key_type& x); //查詢key等於x的元素,查詢成功返回x的迭代指標,失敗返回end()
在algorithm裡提供了一些列對set操作的演算法:
outputiterator set_union(inputiterator first1, inputiterator last1, inputiterator first2, inputiterator last2, outputiterator result);
//函式求兩個集合的並集並返回結果
outputiterator set_intersection(
inputiterator first1, inputiterator last1, inputiterator first2, inputi
terator last2, outputiterator result
);//函式求兩個集合的交集並返回結果
outputiterator set_difference(
inputiterator first1, inputiterator last1, inputiterator first2, inputi
terator last2, outputiterator result
);//函式求兩個集合的差集,出現在[first1, last1)但不出現在[first2, last2)的元素
五、map 鍵值對容器
所有元素會根據鍵值排序
(預設公升序)
,map中的所有元素都是pair,同時擁有實值和鍵值,pair的第一元素為鍵值,第二元素為實值。map不允許有兩個相同鍵值的元素。map底層實現依靠紅黑樹機制。map的迭代器不能修改鍵值,但可以修改實值,遍歷採用迭代器方式,自動對平衡樹進行中序遍歷。
public介面:
(建構函式與析構函式不列出且有省略
)iterator begin();
iterator end();
iterator rbegin();
bool empty() const;
size_type size() const;
t& operator (const key_type& k); //根據key值,通過下邊方式取得實值
pairinsert(const value_type& x);
iterator insert(iterator position, const value_type& x);
void insert(inputiterator first, inputiterator last);
void erase(iterator position);
size_type erase(const key_type& x);
void erase(iterator first, iterator last); //刪除集合中等於first到last區間內的所有元素
iterator find(const key_type& x); //查詢key等於x的元素,查詢成功返回x的迭代指標,失敗返回end()
鍵值對的構造,可以採用make_pair的方式,也可以採用map::value_type(k, t())的型別轉換。
STL 常用資料結構總結
對於面試的人來說,基本上會用到的就下面幾種資料結構,如果可以使用stl的話就使用下面幾種 stack,priority queue,queue,vector,list,set,map,unordered map 主要操作 push,top,pop include using namespace st...
STL常用資料結構
vector與陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。便於隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進入插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 此外,當陣列記憶體空間不足,會採取擴容,通過重新申請一塊更大的記憶體空間進行記憶體拷貝。支援 等操作 ...
STL中常用資料結構
stl中常用的資料結構 1 stack queue預設的底層實現為deque結構。2 deque 用map管理多個size大小的連續記憶體塊,方便頭尾插入。3 vector 變長動態陣列,每次增大1.5倍,刪除元素時不釋放空間。4 priority queue底層預設採用vector向量o nlog...