1 stack<int>q; 2 q.push(1); //入棧 3 q.pop(); //出棧 4 q.top(); //返回棧頂成員 5 q.size(); //返回棧成員個數 6 q.empty(); //判斷是否爲空棧
1 queue<int>q; 2 q.push(1); //入隊列 3 q.pop(); //出隊列 4 q.front(); //返回最上面(最後進入)的成員 5 q.size(); //返回隊列成員個數 6 q.empty(); //判斷是否爲空隊列
1 priority_queue<int,vector<int>,greater<int> >q; 2 q.push(1); //入優先隊列 3 q.top(); //返回優先隊列頭成員 4 q.pop(); //出優先隊列 5 q.size(); //返回優先隊列成員個數 6 q.empty(); //判斷是否爲空優先隊列
1 struct node{ 2 int x,y; 3 4 //重載運算符,按x的值排優先級 5 friend operator < (node a,node b){ 6 return a.x < b.x; 7 } 8 };
1 struct node{ 2 int x,y; 3 }; 4 struct cmp{ 5 //重載運算符,按x的值排優先級 6 bool operator() (node a,node b){ 7 return a.x < b.x; 8 } 9 }; 10 11 priority_queue<node,vector<node>,cmp >q;
1 int num[] = {1,2,3,4,5,6}; 2 deque<int>q; //建立一個空雙向隊列 3 deque<int>p(5); //建立一個具備5個成員的雙向隊列 4 deque<int>s(5,1); //建立一個具備5個成員且初始值爲1的雙向隊列 5 deque<int>s2(s); //建立一個雙向隊列s2,並拷貝s中全部成員 6 deque<int>n(num,num+5); //建立一個雙向隊列n,並拷貝num至num+5中元素入隊 7 8 q.push_front(a); //頭部入隊 9 q.pop_back(b); //尾部入隊 10 q.insert(iter,x); //在iter位置插入x,iter爲迭代器 11 q.pop_front(); //頭部出隊 12 q.pop_back(); //尾部出隊 13 14 q.front(); //返回頭成員 15 q.back(); //返回尾元素 16 q.size(); //返回雙向隊列成員個數 17 q.max_size(); //返回系統支持成員最大個數 18 q.empty(); //判斷雙向隊列是否爲空 19 20 q.at(i); //返回第i個元素 21 q.begin(); //返回頭部迭代器 22 q.end(); //返回尾部迭代器 23 q.rbegin(); //返回尾部反向迭代器 24 q.rend(); //返回頭部反向迭代器 25 26 q.erase(iter); //刪除iter元素,iter爲迭代器 27 q.clear(); //狀況雙向隊列 28 q.swap(p); //交換q和p中的全部元素
1 vector<int>q; //建立空Vector 2 vector<int>p(5); //建立擁有5個成員的Vector 3 vector<int>s(5,1); //建立擁有5個成員,且初始值爲1的Vector 4 vector<int>s2(s); //建立s2,並拷貝s元素給s2 5 vector<int>s3(s.begin(),s.end()); //建立s3,拷貝s.begin()至s.end()中元素給s3 6 7 q.push_back(x); //尾部加入元素 8 q.insert(iter,x); //在iter位置插入x,傳回新數據位置 9 q.insert(iter,n,x); //在iter位置插入n個x,無返回值 10 q.insert(iter,l,r); //在iter位置插入[l,r)區間內的數據,無返回值 11 q.pop_back(); //刪除最後一個元素 12 q.front(); //返回第一個數據 13 q.back(); //返回最後一個數據 14 15 q.size(); //返回容器內成員個數 16 q.resize(x); //從新指定容器大小 17 q.empty(); //判斷Vector是否爲空 18 q.capacity(); //返回Vector可用空間的大小 19 q.reserve(); //從新指定空間大小,小於當前capacity時保持爲本來的capacity值 20 q.swap(p); //交換p,q容器內元素 21 q.assign(iter1,iter2); //將區間[iter1,iter2)內元素賦值給vector,並清空vector容器以前的內容。 22 q.assign(n,x); //將n個x賦值到vector中,並清空vector容器以前的內容。 23 24 q.at(i); //返回第i個元素 25 q.begin(); //返回頭位置迭代器 26 q.end(); //返回尾位置迭代器 27 q.rbegin(); //返回尾部反向迭代器 28 q.rend(); //返回頭部反向迭代器 29 30 q.clear(); //狀況Vector 31 q.erase(); //刪除iter位置元素 32 q.erase(iter1,iter2); //刪除[iter1,iter2)區間內的元素
1 list<int>q; //建立空List 2 list<int>p(5); //建立擁有5個成員的List 3 list<int>s(5,1); //建立擁有5個成員,且初始值爲1的List 4 list<int>s2(s); //建立s2,並拷貝s元素給s2 5 list<int>s3(s.begin(),s.end()); //建立s3,拷貝s.begin()至s.end()中元素給s3 6 7 q.back() //返回最後一個元素 8 q.begin() //返回指向第一個元素的迭代器 9 q.clear() //刪除全部元素 10 q.empty() //若是list是空的則返回true 11 q.end() //返回末尾的迭代器 12 q.erase() //刪除一個元素 13 14 q.front() //返回第一個元素 15 q.get_allocator() //返回list的配置器 16 q.insert() //插入一個元素到list中 17 q.max_size() //返回list能容納的最大元素數量 18 q.merge() //合併兩個list 19 q.pop_back() //刪除最後一個元素 20 q.pop_front() //刪除第一個元素 21 q.push_front() //在list的頭部添加一個元素 22 23 q.rbegin() //返回指向第一個元素的逆向迭代器 24 q.remove() //從list刪除元素 25 q.remove_if() //按指定條件刪除元素 26 q.rend() //指向list末尾的逆向迭代器 27 q.resize() //改變list的大小 28 q.reverse() //把list的元素倒轉 29 q.size() //返回list中的元素個數 30 q.sort() //給list排序 31 q.splice() //合併兩個list 32 q.swap() //交換兩個list 33 q.unique() //刪除list中重複的元素
1 pair<int,int>q; //建立一個空對 2 pair<int,int>p(2,3);//建立一個對p,並分別賦值2,3 3 pair<int,int>s(p); //建立一個對s,拷貝p給s 4 5 //賦值利用make_pair函數 6 q = make_pair(1,2); 7 //訪問pair內元素操做 8 q.first; //返回成員第一個數據 9 q.second; //返回成員第二個數據
1 int a[] = {1,2,3,4,5}; 2 set<int>q; 3 set<int>p; 4 5 q.insert(x); //集合中插入元素 6 q.insert(a,a+5); //插入數組a至a+5的元素 7 q.find(x); //返回x值位置的迭代器,找不到返回q.end() 8 q.erase(iter); //刪除集合中的元素 9 q.size(); //返回當前set容器中的元素個數 10 q.count(); //返回某個值元素的個數(根據set的特性,就是判斷這個元素在不在,返回0或1) 11 q.begin(); //返回頭位置迭代器 12 q.end(); //返回尾位置迭代器 13 q.rbegin(); //返回尾部反向迭代器 14 q.rend(); //返回頭部反向迭代器 15 q.clear(); //刪除set容器中的全部的元素 16 q.empty(); //判斷set容器是否爲空 17 q.lower_bound(); //返回指向大於(或等於)某值的第一個元素的迭代器 18 q.upper_bound(); //返回大於某個值元素的迭代器
1 struct cmp{ 2 bool operator() (const node &a,const node &b){ 3 return a.x < b.x; 4 } 5 }; 6 7 set<node,cmp>q;
1 map<int,int>q; 2 3 q.insert(pair<int,int>(1,2)); //經過pair進行插入操做 4 q.insert(map<int,int>::value_type (1,2));//經過value_type進行插入 5 q[1] = 2; //用數組方式進行插入 6 /*三者不一樣的是,當map存在這個關鍵字時 7 *數組方式會覆蓋關鍵字的值,而insert操做沒法插入。 8 */ 9 10 q.size(); //返回容器內元素個數 11 q.empty(); //判斷容器是否爲空 12 q.begin(); //返回頭位置迭代器 13 q.end(); //返回尾位置迭代器 14 q.rbegin(); //返回尾部反向迭代器 15 q.rend(); //返回頭部反向迭代器 16 q.find(key); //查找並返回關鍵字key的位置 17 q.count(key); //查詢是否有關鍵字key(有則返回1,不然0) 18 q.lower_bound();//返回鍵值>=給定元素的第一個位置 19 q.upper_bound();//返回鍵值>給定元素的第一個位置 20 q.erase(iter); //刪除迭代器iter的元素 21 q.erase(iter1,iter2);//刪除[iter1,iter2)區間內的元素 22 q.erase(key); //刪除關鍵字爲key的元素 23 q.clear(); //清空容器 24 q.swap(p); //交換兩個map 25 q.key_comp(); //返回比較元素key的函數 26 q.max_size(); //返回能夠容納的最大元素個數 27 q.value_comp(); //返回比較元素value的函數 28 q.equal_range();//返回特殊條目的迭代器對
1 class sort{ 2 3 public: 4 bool operator() (node const &a,node const &b) const{ 5 return a.x < b.x; 6 } 7 8 };
原本想講BitSet,可是以爲bitset比較特殊,到時候專門詳細講吧。node
其實全部容器都挺簡單的,根據特性基本都能想出操做。熟悉了這些容器以後,對作題和學習頗有幫助的。數組
記住操做沒啥用,得不斷的練習使用這些容器 ,才能熟練操做。less
emmmm都說的很簡陋,原本想講每一個容器的具體實現一塊兒構造方式。後來一想,篇幅太長了,還容易誤導別人以爲容器很複雜。這些都算是學個表面吧,最重要的仍是不斷敲敲敲,熟悉各類用法。函數
大體就這樣吧 =7=學習
後續:Stack,Queue,Pair並非C++的標準容器,可是我以爲性質差很少,就一塊兒講了,可是防止誤導初學者,這裏仍是提一下。spa