多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > STL 筆記(一): 順序容器 vector、list、deque

STL 筆記(一): 順序容器 vector、list、deque

來源:程序員人生   發布時間:2014-10-10 08:00:00 閱讀次數:2349次

STL 容器類

C++ STL 體現了泛型編程的思想,廣義上分為: 容器 (Container),迭代器 (Iterator),算法 (Algorithm)。容器類可以包含一組相同類型或不同類型的對象,包含相同類型對象時稱為同類容器類,包含不同類型對象時,稱為異類容器類。容器類庫共包含 10 種容器,分為三類:
  • 順序容器:向量 (vector)、雙端隊列 (deque)、列表 (list);
  • 關聯容器:集合 (set)、多重集合 (multiset)、映射 (map)和多重映射 (multimap);
  • 容器適配器:棧 (stack)、隊列 (queue)和優先隊列 (priority queue);

STL 三種順序容器的特性對比:

  • vector 可變數組,內存空間是連續的,容量不會進行縮減。支持高效隨機存取,即支持[]和at()操作。尾部插入刪除效率高,其他位置插刪效率較低;
  • list 雙向鏈表,內存空間可不連續,不支持隨機存取。插入和刪除的效率很高;
  • deque  雙端隊列,內存空間是多個連續的內存塊,在一個映射結構中保存對這些塊以及順序的跟蹤,可利用的內存更大,且內存大小是可以自動縮減的。支持隨機存取,但是隨機存取性能沒有vector 好。首尾插入效率高,其他位置插刪效率低;

使用注意:

  • 對于 vector 和 deque,使用隨機訪問時注意不要越界;
  • 對于 vector 的非尾部插入刪除和 deque的非首尾插入刪除,會導致部分元素的移動,這是需要考慮之前正在用的迭代器、指針或索引是否需要調整;

vector 容器常用函數:

#構造: vector(): #創建一個空vector vector(int nSize): #創建一個vector,元素個數為nSize vector(int nSize,const t& t): #創建一個vector,元素個數為nSize,且值均為t vector(const vector&): #復制構造函數 vector(begin,end): #復制[begin,end)區間內另一個數組的元素到vector中 #增刪: void push_back(const T& x): #向量尾部增加一個元素X iterator insert(iterator it,const T& x): #向量中迭代器指向元素前增加一個元素x iterator insert(iterator it,int n,const T& x): #向量中迭代器指向元素前增加n個相同的元素x iterator insert(iterator it,const_iterator first,const_iterator last): #向迭代器指向元素前插入另一個相同類型向量的[first,last)間的數據 iterator erase(iterator it): #刪除向量中迭代器指向元素 iterator erase(iterator first,iterator last): #刪除向量中[first,last)中元素 void pop_back(): #刪除向量中最后一個元素 void clear(): #清空向量中所有元素 #遍歷: reference at(int pos): #返回pos位置元素的引用 reference front(): #返回首元素的引用 reference back(): #返回尾元素的引用 iterator begin(): #返回向量頭指針,指向第一個元素 iterator end(): #返回向量尾指針,指向向量最后一個元素的下一個位置 reverse_iterator rbegin(): #反向迭代器,指向最后一個元素 reverse_iterator rend(): #反向迭代器,指向第一個元素之前的位置 #功能: bool empty() const: #判斷向量是否為空,若為空,則向量中無元素 int size() const: #返回向量中元素的個數 int capacity() const: #返回當前向量張紅所能容納的最大元素值 int max_size() const: #返回最大可允許的vector元素數量值 void swap(vector&): #交換兩個同類型向量的數據 void assign(int n,const T& x): #設置向量中第n個元素的值為x void assign(const_iterator first,const_iterator last): #向量中[first,last)中元素設置成當前向量元素

list 容器常用函數:

#構造: list<Elem> c: #創建一個空的list list<Elem> c1(c2): #復制另一個同類型元素的list list<Elem>c(n): #創建n個元素的list,每個元素值由默認構造函數確定 list<Elem>c(n,elem): #創建n個元素的list,每個元素的值為elem list<Elem>c(begin,end): #由迭代器創建list,迭代區間為[begin,end) #增刪: void push_back(const T& x): #尾部增加一個元素x void push_front(const T& x): #首部添加一個元素X void pop_back(): #刪除容器尾元素,當且僅當容器不為空 void pop_front(): #刪除容器首元素,當且僅當容器不為空 void remove(const T& x): #刪除容器中所有元素值等于x的元素 void clear(): #刪除容器中的所有元素 iterator insert(iterator it, const T& x ): #在迭代器指針it前插入元素x,返回x迭代器指針 void insert(iterator it,size_type n,const T& x): #迭代器指針it前插入n個相同元素x void insert(iterator it,const_iterator first,const_iteratorlast): #把[first,last)間的元素插入迭代器指針it前 iterator erase(iterator it): #刪除迭代器指針it對應的元素 iterator erase(iterator first,iterator last): #刪除迭代器指針[first,last)間的元素 #遍歷: iterator begin(): #返回首元素的迭代器指針 iterator end(): #返回尾元素之后位置的迭代器指針 reverse_iterator rbegin(): #返回尾元素的逆向迭代器指針,用于逆向遍歷容器 reverse_iterator rend(): #返回首元素前一個位置的迭代器指針 reference front(): #返回首元素的引用 reference back(): #返回尾元素的引用 #功能: void sort(): #容器內所有元素排序,默認是升序 template<class Pred>void sort(Pred pr): #容器內所有元素根據預斷定函數pr排序 void swap(list& str): #兩list容器交換功能 void unique(): #容器內相鄰元素若有重復的,則僅保留一個 void splice(iterator it,list& li): #隊列合并函數,隊列li所有函數插入迭代指針it前,x變成空隊列 void splice(iterator it,list& li,iterator first): #隊列li中移走[first,end)間元素插入迭代指針it前 void splice(iterator it,list& li,iterator first,iterator last): #x中移走[first,last)間元素插入迭代器指針it前 void reverse(): #反轉容器中元素順序

deque 容器常用函數

#構造 deque(): #創建一個空deque deque(int nSize): #創建一個deque,元素個數為nSize deque(int nSize,const T& t): #創建一個deque,元素個數為nSize,且值均為t deque(const deque &): #復制構造函數 #增刪: void push_front(const T& x): #雙端隊列頭部增加一個元素X void push_back(const T& x): #雙端隊列尾部增加一個元素x iterator insert(iterator it,const T& x): #雙端隊列中某一元素前增加一個元素x void insert(iterator it,int n,const T& x): #雙端隊列中某一元素前增加n個相同的元素x void insert(iterator it,const_iterator first,const_iteratorlast): #雙端隊列中某一元素前插入另一個相同類型向量的[forst,last)間的數據 iterator erase(iterator it): #刪除雙端隊列中的某一個元素 iterator erase(iterator first,iterator last): #刪除雙端隊列中[first,last)中的元素 void pop_front(): #刪除雙端隊列中最前一個元素 void pop_back(): #刪除雙端隊列中最后一個元素 void clear(): #清空雙端隊列中最后一個元素 #遍歷: reference at(int pos): #返回pos位置元素的引用 reference front(): #返回手元素的引用 reference back(): #返回尾元素的引用 iterator begin(): #返回向量頭指針,指向第一個元素 iterator end(): #返回指向向量中最后一個元素下一個元素的指針(不包含在向量中) reverse_iterator rbegin(): #反向迭代器,指向最后一個元素 reverse_iterator rend(): #反向迭代器,指向第一個元素的前一個元素 #功能: bool empty() const: #向量是否為空,若true,則向量中無元素 int size() const: #返回向量中元素的個數 int max_size() const: #返回最大可允許的雙端對了元素數量值 void swap(deque&): #交換兩個同類型隊列的數據 void assign(int n,const T& x): #向量中第n個元素的值設置為x

vector 小例子:

關于 vector 的一個小例子
#include <iostream> #include <algorithm> #include <vector> using namespace std; void display(int val){ cout<< val <<' '; } int main(){ vector<int> v; for (int i = 0; i < 10; ++i) { v.push_back(i); } for_each(v.begin(), v.end(), display); // for_each 函數模版 cout<<" Use iterator "; vector<int>::iterator iter; for(iter = v.begin(); iter != v.end(); ++iter){ cout<< *iter << " "; } cout<<"---"<<v.at(9); cout<<" This is an two-dimensional array "; vector< vector<int> > array; vector<int> line; for(int i = 0; i < 5; ++i){ array.push_back(line); for(int j = 0; j < 9; ++j){ array[i].push_back(j); } } for(int i = 0; i < 5; ++i){ for(int j = 0; j < array[i].size(); ++j){ cout<< array[i][j] <<" "; } cout<<endl; } return 0; } /* 結果: 0 1 2 3 4 5 6 7 8 9 Use iterator 0 1 2 3 4 5 6 7 8 9 ---9 This is an two-dimensional array 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 */

【地址:http://blog.csdn.net/thisinnocence/article/details/39579647】

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 一级爱一级做a性视频 | 猛操网| 国产视频久久 | 曰本人一级毛片免费完整视频 | 真实呦女free性 | riav久久中文一区二区 | 欧美xxxxxxxxxx| 国产一级一片免费播放视频 | 亚洲产在线精品第一站不卡 | 国产精品99一区二区三区 | 69视频最新在线观看 | 爱爱小视频在线看免费 | 国产日产欧美精品一区二区三区 | 黄网站色网址 | 欧美日本不卡 | 欧美xxxx日本 | 18video性欧美19sex | 波多野结衣在线视频播放 | 久久h视频| 成人午夜免费在线观看 | 韩国全部三级伦在线 | 免费精品久久久视频 | 成人影院wwwwwwwwwww | 国产一区二区网站 | 色亚洲影院| 亚洲欧美激情另类 | 偷拍videosex | 嫩草影院久久精品 | 噜噜噜噜影院 | 岛国午夜精品视频在线观看 | 欧欧美18videosex性哦欧美美 | 4444亚洲国产成人精品 | a黄色片| 国产女主播一区二区在线观看 | 在线 v亚洲 v欧美v 专区 | 亚洲免费网 | 亚洲图片欧美小说 | 2020久久国产最新免费观看 | 亚欧成人在线 | 国产亚洲人成网站在线观看 | 亚洲地址一地址二地址三 |