STL常用資料結構總結

2021-07-27 04:37:21 字數 3722 閱讀 7525

資料結構機考的你,想不想偷懶?快來看一看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...