包括 vector、deque、list、forward_list、array、string //其中forward_list、array為c++11的新特性
另外還有3種介面卡,stack、queue、priority_queue;
#include "stdafx.h"
#include #include#include#includeusing namespace std;
int _tmain(int argc, _tchar* argv)
;//後面自動補0
vectorv(a.begin(),a.end());
//vectorv=;//error
v.push_back(0);
v.push_back(1);
v.push_back(2);
for(auto iter=v.begin();iterv1(v);
for(auto iter=v1.rbegin();iter輸出:
01230012 21003210請按任意鍵繼續. . .
思想:這種反向迭代思想不錯,利用別的容器來進行複製構造,但是還是不能像array那樣進行初始化。
assign適用於初始化之後,再用別的容器或者常量來對其賦值
如:v.assigh(c.begin(),c.end())
或者(10,8)//10個8
v1.assign(v.begin(),v.begin()+3);//這裡為從begin開始數3個字元,這是為了跟end()配合
swap
swap(v1,v);//還是很好用的
(1)array都不支援
(2)vector,string支援push_back(),不建議使用insert
(3)deque支援頭尾插
(4)insert(pos,v.begin(),v.end());//在插入位置插入數,返回插入位置
或者insert(插入位置,)//返回剛剛指向
(5)現在還沒有找到emplace和push_back等的區別,都呼叫的是複製建構函式
*iter front() at()
pop_back() erase () (begin,end) clear
#include "stdafx.h"
#include #include#includeusing namespace std;
int _tmain(int argc, _tchar* argv)
; 列表初始化,都是可以的,但是要vs2012及以上的編譯器
多餘的會被刪掉,但是不會改變容器的大小
capacity() reserve() shrink_to_fit() size()
#include "stdafx.h"
#include #includeusing namespace std;
int _tmain(int argc, _tchar* argv)
; //sort和unique操作
v.clear();
v.push_back(0);
v.push_back(2);
v.push_back(3);
v.push_back(2);
v.push_back(3);
sort(v.begin(),v.end());
auto end_iter=unique(v.begin(),v.end());//返回排序消除重複的元素的最後乙個位置,且會覆蓋掉重複的元素,那麼整個容器變得不可信
for(auto iter=v.begin();iter
思想:(1)注意fill操作不能允許為空,但是用back_inserter 還是可以的
(2)注意sort作用還是蠻大的,另外unique是返回乙個迭代器的。
1.1 繫結,形參,可修改捕獲值、修改返回型別等
適用於只在一兩個地方使用的簡單操作
繫結
int sz=4;
auto f=[&sz](int a,int b);//放在主函式內,感覺這個東西還是蠻有用的
sz=5;
cout《輸出:5
因為對捕獲值進行繫結 &sz
反之沒有繫結的話,輸出4
可修改
int sz=4;
auto f=[sz](int a,int b)mutable;//放在主函式內,感覺這個東西還是蠻有用的
sz=5;
cout《輸出:5
在沒有繫結的情況下,要修改sz的值,需要加上mutable,然而若為繫結,則不需要
修改返回型別
int sz=4;
auto f=[sz](int a,int b)mutable -> int;//放在主函式內,感覺這個東西還是蠻有用的
sz=5;
cout《輸出:5
lambda一般是不允許返回兩種型別的,會預設為void,如果非要那麼做,必須加上-> int 其中int為返回型別。
一些泛型演算法
#include #include#include#include#includeusing namespace std;
int main()
; vectorv(a,a+5);
vectorvtemp;
replace(v.begin(),v.end(),2,5);
//替換操作非常強大,但是這種方法不適用於整個文字中子串的替換吧
sort(v.begin(),v.end());//排序也挺方便
for_each(v.begin(),v.end(),(const int &a));//最後乙個引數是判斷
//可以簡寫為(const int &a)
for_each(iter,v.end(),(const int &a)) //根據後面的lambda表示式來判斷。
2、accumulate(v.begin().v.end(),val),是由第三個引數決定初始值,以及做什麼操作,以及返回什麼型別,可以是string,int等,但是如果型別是double,但是初值為0,那麼最後返回的是整形。
3、equal(v.begin(),v.end(),v1.begin())比較兩個容器中的元素,判斷是否相等。第二個容器中的元素至少和第乙個容器中的元素一樣多。
4、fill(v.begin(),v.end(),val)是覆蓋操作
fill_n(v.begin(),n,val) 從這個位置開始,後面的n個元素覆蓋為val,但是會出問題,因為原來本來就沒有這麼多元素。
因此用到auto it=back_inserter(v);其返回乙個迭代器it,當執行*it=val的時候,會呼叫push_back將元素插入。
用法為fill_n(back_inserter(v),n,val) ,會預設呼叫push_back。
5、copy
陣列拷貝如:copy(begin(a1),end(a1),a2),其中a1和a2都是陣列。
6、replace()
7、刪除重複單詞
sort(v.begin(),v.end());//可以過載其排序方法
auto iter=unique(v.begin(),v.end());
v.erase(iter,v.end());
8、字串排序
elimdups(words);//按照字典序排序,消除重複
stable_sort(words.begin().words.end(),(const string &s1,const string &s2);
sets(a,a+3);
set::iterator iter;//不能用auto
for(auto iter=s.begin();iter!=s.end();iter++)
cout<<*iter<<" ";
cout<>b;
while(cin.get()!='\n')//不為為回車,get()函式直接轉化成ascii碼,但是會刪去最後乙個元素,不好用
return 0;
}
思想:(1)在find函式中 iter不能用auto,遍歷的時候可以
(2)對於string型別的set無法用find函式
(3)利用cin.get()來判斷是否輸入回車,但是這種辦法的缺點是,最後乙個字元不能插入,這個問題有待解決
#include "stdafx.h"
#include #include #include using namespace std;
int main()
思想:
(1)第乙個引數為關鍵字,第二個為值key-value
(2)遍歷為利用iter指向來讀取,還是比較方便的
(3)進行查詢的時候若找不到關鍵字,則將關鍵字加入,預設初始化。
1、介紹
map關鍵陣列,儲存關鍵字-值對
set關鍵字即值,即只儲存關鍵字的容器
multimap關鍵字可重複出現
multiset同樣
無序unordered_map//以雜湊函式組織的map
unordered_set
unordered_multimap
unordered_set
C Primer 學習筆記之關聯容器
關聯容器 關聯容器支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是map和set。map的元素以鍵 值對的形式組織 鍵用作元素在map的索引,而值則表示所儲存和讀取的資料。set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。set和map型別的物件不允許為同乙個鍵新增第二個元素。如果...
C Primer 筆記 順序容器
將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素 vectorivec listslist dequedstr vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 stack 後進先出 lifo 棧 queue 先進先出 fifo 佇列 priorit...
C Primer 筆記 關聯容器
關聯容器 associative container 支援通過鍵來高效的查詢和讀取元素。map 關聯陣列,元素通過鍵來儲存和讀取 set 大小可變的集合,支援通過鍵來快速讀取 multimap 支援同乙個鍵出現多次的map型別 multiset 支援同乙個鍵多次出現的set型別 pairp1 建立乙...