1.vector
變長陣列
頭檔案:#include<vector>
using namespace std;
1.1定義:
vector<typename> name; vector<int> name; vector<double> name; vector<node> name;//node是結構體型別 //如果typename也是一個STL容器,定義的時候>>符號之間要加上空格 即: vector<vector<int> > name; vector<vector<int> > name; //vector陣列定義: vector<typename> arrayname[size]; //arrayname[0]--arrayname[size-1]都是一個vector容器 //與vector<vector<typename> > name 不同的是,vector陣列寫法一維長度已經固定,另一維變化
1.2訪問元素:
/* 兩種訪問方式: */ // 1.通過下標訪問 vector<typename> vi; //直接訪問 vi[index] 即可 //2.通過迭代器訪問: vector<typename>::iterator it; //通過 *it訪問vector里的元素 vector<int> vi; vector<int>::iterator it=vi.begin(); printf ( " % d \ n " , *( it+1) ); //另一種寫法 for( vector<int>::iterator it=vi.begin();it!=vi.end();it++){ printf("%d",*it) } // begin()函式的作用是取vi的首元素地址,end()函式取尾元素地址的下一個地址 //只有vector和string中,才允許使用vi.begin()+n這中迭代器加證書的寫法
1.3 常用函式:
// push_back() ---------push_back(x)在vector后面添加一個元素x for(int i=1;i<=3;i++){ vi.push_back(i); } // pop_back() ------------洗掉vector的尾元素 // size() ---------------獲得vector元素的個數 printf("%d\n",vi.size()); // clear() ----------------清空vector中的所有元素 // insert() ---------------- insert ( it , x ) 向vector的任意迭代器it處插入一個元素x vi.insert(vi.begin+2,-1); // erase() ---------------洗掉單個元素或者洗掉一個區間內所有元素 vi.erase(it)// 洗掉迭代器為it處的元素 vi.erase(vi.begin()+3) vi.erase(first,last) //洗掉【first,last)內所有元素 vi.erase(vi.begin()+1,vi.begin()+4);//洗掉 vi[1] vi[2] vi[3]
2.set 集合
內部自動有序 不含重復元素
頭檔案:#include using namespace std;
2.1 set的定義:
set<typename> name; //同樣,如果typename是STL容器,定義時在>>之間加空格
2.2 set內元素的訪問—只能通過迭代器訪問
set<int>::iterator it; //通過*it來訪問set元素 for(set<int>::iterator it=st.begin();it!=st.end();it++){ printf("%d",*it) //不能通過*(it+n)這種方法訪問元素 }
2.3 set 常用函式
// insert() ------insert(x) 將x插入set中,自動排序去重 // find() -------find(value) 回傳set中對應值為value的迭代器 set<int> st; for(int i=1;i<4;i++){ st.insert(i); } set<int>::iterator it=st.find(2);//在set中查找2,并回傳其迭代器 printf("%d",*it); 或者 printf("%d",*(st.find(2))); // erase() ---------- 洗掉單個元素 或者洗掉一個區間內所有元素 //1.洗掉單個元素 兩種方法:st.erase(it) -it為洗掉元素的迭代器 st.erase(value) -value洗掉元素的值 st.erase(st.find(3));//結合find使用 st.erase(100);//100為set內元素的值 //2.洗掉一個區間內的所有元素 st.erase(first,last) --first為洗掉區間起始迭代器,last為洗掉區間末尾迭代器的下一個地址 st.erase(st.find(1),st.end()); // size() - ------獲得set內元素個數 // clear() --------清空set中的元素
3 string
頭檔案:#include using namespace std;
3.1 string 的定義
string str; string str="abcd";
3.2 string的訪問
// 1.通過下標訪問 string str="abcd"; for(int i=0;i<str.length();i++){ printf("%c",str[i]); } //用c_str()將string轉為字符陣列 // 2.通過迭代器輸出 string::iterator it; for(string::iterator it=str.begin();it!=end();it++){ printf("%c",*it); } // 只有string 和 vector 支持 str.begin()+n 迭代器加數字這種寫法
3.3string 常用函式
// 兩個string拼接 string str1="abc",str2="def"; string str3; str3=str1+str2; cout<<str3; // 兩個string直接用 == != < <= > >=比較大小-----按照字典序 // length() / size() --回傳string的長度 // insert() 1. insert(pos,string) ---在pos位置插入字串string str.insert(3,"ancsd"); 2.insert(it,it2,it3)------it為原字串的欲插入位置,it2 和it3為待插入字串的首尾迭代器,用來表示串【it2,it3)將被插在it位置上 str.insert(str.begin()+3,str2.begin(),str2.end()); // erase() 1.洗掉單個元素 erase(it) ---洗掉單個元素 it為需要洗掉元素的迭代器 str.erase(str.begin()+4); 2.洗掉一個區間內元素 erase(first,last) --洗掉【first,last) first last均為迭代器 str.erase(str.begin()+2,str.end()); erase(pos,length)--pos為開始洗掉的起始位置,length為洗掉的字符個數 str.erase(3,2) ----洗掉3號位開始的2個字符 // clear() 清空string中的資料 // substr() ----------substr(pos,len) 回傳從pos號位開始,長度為len的子字串 str.substr(0,4); // find() ----- 1. str.find(str2) 當str2是str的子串時,回傳其在str中第一次出現的位置,如果不是,回傳string::npos 2. str.find(str2,pos) 從str的pos位置開始匹配str2,回傳值與上面相同 // replace() 1. replace(pos,len,str2) ----吧str從pos號位置開始,長度為len的子串替換為str2 2. replace(it1,it2,str2)------把str的迭代器【it1,it2)范圍的子串替換為str2
4.map
映射 ,可以將任何基本型別映射到任何基本型別
頭檔案:#include
4.1 map的定義
map<typename1,typename2> mp; //第一個是鍵的型別,第二個是值的型別 map<string,int> mp; //如果是字串到整形的映射,必須使用string不能用char陣列 //也可以是STL容器 map<set<int>,string> mp;
4.2 map內元素的訪問
// 1.通過下標訪問 map中的鍵是唯一的 map<char,int> mp; mp['c']=20; mp['d']=30; printf("%d",mp['c']); // 2.通過迭代器訪問 map<typename1,typename2>::iterator it; 通過 it->frist 來訪問鍵, 使用 it->second 訪問值 mp['c']=20; mp['d']=30; for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){ printf("%c %d\n",it->first,it->second); }
4.3 map常用函式
// find() ------find(key)回傳鍵為key的映射的迭代器 mp['c']=20; mp['d']=30; map<char,int>::iterator it=mp.find('b'); printf("%c %d",it->first,it->second); // erase() // 洗掉單個元素兩種方法 1.erase(it)--it為需洗掉元素的迭代器 mp['c']=20; mp['d']=30; map<char,int>::iterator it=mp.find('b'); mp.erase(it); 2.erase(key) --key為欲洗掉的映射的鍵 mp['c']=20; mp['d']=30; mp.erase('c'); //洗掉一個區間內的 所有元素 mp.erase(first,last) fisrt為洗掉區間起始迭代器,last為洗掉區間末尾迭代器的下一個地址 mp['c']=20; mp['d']=30; mp.erase(it,mp.end()); // size() ---回傳map中映射的對數 // clear() -----清空map中的元素
5.queue
佇列,先進先出的容器
頭檔案:#include using namespace std;
5.1 queue的定義:
queue<typename> name;
5.2 queue容器內元素的訪問
// queue 先進先出 只能通過front來訪問隊首元素,通過back來訪問隊尾元素 queue<int> q; for(int i=1;i<=5;i++){ q.push(i);//push(i)將i壓入佇列,依次入隊的是1 2 3 4 5 } printf("%d %d",q.front(),q.back());
5.3 queue 常用函式
// push() ----push(x)將x進行入隊 // front() back() 分別獲得隊首元素和隊尾元素 // pop() ----令隊首元素出隊 queue<int> q; for(int i=1;i<=5;i++){ q.push(i);//push(i)將i壓入佇列,依次入隊的是1 2 3 4 5 } for(int i=1;i<=3;i++){ q.pop() } // empty()---檢測queue是否為空,回傳true則空,回傳false則非空 // size() ---回傳queue內元素的個數
6.priority_queue
優先佇列 底層用堆實作 隊首元素一定是當前佇列中優先級最高的一個
頭檔案:#include using namespace std;
6.1 priority_queue的定義
priority_queue<typename> name;
6.2 priority_queue 容器內元素的訪問
優先佇列沒有front函式和back函式,只能通過top函式訪問隊首元素 q.push(3); q.push(4); printf("%d",q.top());
6.3priority_queue 常用函式
// push() ----push(x)將x入隊 // top() ----獲得隊首元素 // pop() ------令隊首元素出隊 // empty() -----檢測優先佇列是否為空,慷訓傳true,非慷訓傳false
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57188.html
標籤:其他
上一篇:鏈表合并
下一篇:藍橋杯 歷屆試題 螞蟻感冒
