【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
文章目錄
- queue 隊(duì)列
- stack 棧
- priority_queue 優(yōu)先級隊(duì)列
- priority_queue 優(yōu)先級隊(duì)列指定排序方法
- priority_queue 優(yōu)先級隊(duì)列排序行為
- priority_queue 優(yōu)先級隊(duì)列存儲自定義類型
- 關(guān)聯(lián)式容器
- set 集合
- 容器遍歷
- map 映射
- 容器代碼示例
queue 隊(duì)列
1. queue 隊(duì)列 : 是一個(gè)先進(jìn)先出的容器 ; 下面是隊(duì)列的使用流程 ;
2. 引入頭文件 : 使用 queue 隊(duì)列之前 , 必須先包含其頭文件 , queue 隊(duì)列是 STL 模板類中提供的容器 ;
//引入隊(duì)列頭文件 , 才能使用 queue 隊(duì)列 //queue 隊(duì)列 , 也是 STL 模板類中提供的容器 #include <queue>3. 聲明隊(duì)列 : 格式 " queue<元素類型> 容器對象變量名稱 " , 尖括號中聲明了容器中存儲的元素類型 , 如下代碼表示該隊(duì)列存儲的是 int 類型元素 ;
//聲明隊(duì)列queue<int> queue_1;4. 添加元素 : 調(diào)用隊(duì)列對象的 " push( 元素變量 ) " 向 queue 隊(duì)列中添加元素 ;
//添加元素到隊(duì)列中 queue_1.push(8);queue_1.push(88);5. 刪除元素 : 調(diào)用 " pop() " 方法 , 將最后加入的元素彈出隊(duì)列 ;
//將元素彈出隊(duì)列queue_1.pop();6. 獲取 queue 隊(duì)列首元素 : 調(diào)用隊(duì)列對象的 " front() " 方法可以獲取隊(duì)列首元素 ;
7. 獲取 queue 隊(duì)列尾元素 : 調(diào)用隊(duì)列對象的 " back() " 方法可以獲取隊(duì)列最后的元素 ;
stack 棧
1. stack 棧 : 后進(jìn)先出的容器 ;
2. 引入頭文件 : 使用 queue 隊(duì)列之前 , 必須先包含其頭文件 , queue 隊(duì)列是 STL 模板類中提供的容器 ;
//引入 stack 棧的頭文件 #include <stack>3. 聲明 stack 棧 : 格式 " stack<元素類型> 容器對象變量名稱 " , 尖括號中聲明了容器中存儲的元素類型 , 如下代碼表示該 stack 棧存儲的是 int 類型元素 ;
// III . stack 棧//stack 棧 是后進(jìn)先出的容器stack<int> stack_1;priority_queue 優(yōu)先級隊(duì)列
1. 聲明優(yōu)先級隊(duì)列 : 聲明時(shí)指定元素類型 , priority_queue 后尖括號中的類型就是其存儲的元素類型 ;
//聲明優(yōu)先級隊(duì)列priority_queue<int> pq;2. 添加元素 : 向優(yōu)先級隊(duì)列中添加元素 , 默認(rèn)最大值在隊(duì)首 ;
//其默認(rèn)復(fù)制數(shù)值最大的在隊(duì)首 pq.push(88);pq.push(8);pq.push(888);3. 獲取隊(duì)首元素 : 調(diào)用優(yōu)先級隊(duì)列對象的 " top() " 方法 , 獲取隊(duì)首元素 , 將其打印出來 , 默認(rèn)情況下 , 隊(duì)首元素是最大值 ;
//獲取隊(duì)首元素 , 將其打印出來 , 應(yīng)該是將最大的 888 打印到了控制臺//雖然 888 是最后添加進(jìn)去的 , 但是其數(shù)值最大 , 被放在了首元素位置 int pq_top = pq.top();cout << "打印 priority_queue 優(yōu)先級隊(duì)列的首元素 : pq.top() : " << pq.top() << endl;4. 代碼執(zhí)行結(jié)果 :
打印 priority_queue 優(yōu)先級隊(duì)列的首元素 : pq.top() : 888priority_queue 優(yōu)先級隊(duì)列指定排序方法
1. 排序算法 : 優(yōu)先級隊(duì)列默認(rèn)情況下 , 會將最大值放在隊(duì)首 , 是因?yàn)槠淠J(rèn)的排序算法是 less<元素類型> , 上面的 priority_queue 優(yōu)先級隊(duì)列其排序算法類型是 less ;
2. 指定 priority_queue 優(yōu)先級隊(duì)列排序算法 : 這里指定隊(duì)列中元素排序算法 , 將最大值放在隊(duì)尾 , 最小值在隊(duì)首 ;
- ( 1 ) 指定三個(gè)類型 : 在 priority_queue 后的 <> 中指定 隊(duì)列元素類型 , 隊(duì)列中使用的內(nèi)部容器 , 排序行為 三種類型 ;
- ( 2 ) 指定元素類型 : 隊(duì)列中存儲的是 int 類型元素 , 這里指定 int 類型 ;
- ( 3 ) 隊(duì)列內(nèi)部使用的容器 : 由于元素類型是 int 類型 , 這里設(shè)置 vector 即可 ;
- ( 4 ) 排序行為 :
- ① greater 是將最小值放在隊(duì)尾 ;
- ② less : 是默認(rèn)行為 , 最大的元素在前面 ;
3. 代碼執(zhí)行結(jié)果 :
打印 pq_1 優(yōu)先級隊(duì)列的首元素 : pq.top() : 8priority_queue 優(yōu)先級隊(duì)列排序行為
C++ 中定義的排序方法 : 其中的 less 結(jié)構(gòu)體就是優(yōu)先級隊(duì)列中默認(rèn)使用的排序方法 ;
// STRUCT TEMPLATE greater template <class _Ty = void> struct greater { // functor for operator>_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const { // apply operator> to operandsreturn _Left > _Right;} };// STRUCT TEMPLATE less template <class _Ty = void> struct less { // functor for operator<_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const { // apply operator< to operandsreturn _Left < _Right;} };priority_queue 優(yōu)先級隊(duì)列存儲自定義類型
1. 定義自定義類型 : 內(nèi)部定義 age 成員變量 , 構(gòu)造函數(shù)中設(shè)置該變量值 ;
//自定義容器 class Student { public :int age; //聲明構(gòu)造方法 , 后面的 : age(age) // 左側(cè)的 age 表示給 age 成員賦值 , 右邊的表示參數(shù)中的 age 值Student(int age) : age(age){} };2. 自定義類型的排序方法定義 : 按照官方的定義方式定義排序方法 , 這里省略的模板方法相關(guān)內(nèi)容 , 因?yàn)楸容^的就是 Student 類型對象 , 這里按照其 age 成員變量的大小進(jìn)行比較 , age 成員變量最大的放在隊(duì)首 ;
// Student 類對象排序方法定義 // 排序方式 : 左側(cè)對象的 age 成員變量 , 大于右側(cè)對象的 age 成員變量 struct StudentLess { constexpr bool operator()(const Student& _Left, const Student& _Right) const { return _Left.age < _Right.age;} };3. 聲明自定義類型容器隊(duì)列 :
- ( 1 ) 必須制定排序方法 : 注意此處必須指定 Student 對象之間的排序方式 , 否則編譯時(shí)會報(bào)錯 , 可以參考 less 和 greater 的實(shí)現(xiàn) ;
- ( 2 ) 自定義的排序方法 : StudentLess , 其會將 Student 對象的 age 成員變量大的排在前面 ;
4. 加入 Student 對象 : 使用構(gòu)造方法創(chuàng)建 Student 對象 , 并將對象放入隊(duì)列中 , 打印出隊(duì)首元素 ;
//向自定義類型容器隊(duì)列中加入 3 個(gè)對象 , 使用構(gòu)造函數(shù)生成對象pq_student.push(Student(8));pq_student.push(Student(18));pq_student.push(Student(15));cout << "打印 pq_student 優(yōu)先級隊(duì)列的首元素 : pq_student.top().age : " << pq_student.top().age << endl;5. 執(zhí)行結(jié)果 :
打印 pq_student 優(yōu)先級隊(duì)列的首元素 : pq_student.top().age : 18關(guān)聯(lián)式容器
關(guān)聯(lián)式容器操作 : 關(guān)聯(lián)式容器的操作 , 與序列式容器調(diào)用方法基本一致 ;
關(guān)聯(lián)式容器訪問方式 : 通過關(guān)鍵字保存和訪問元素 , 如 Java 中的 Map , Set ;
set 集合
1. Set 集合 : 內(nèi)部是由紅黑樹實(shí)現(xiàn)的 , 每個(gè)節(jié)點(diǎn)都是一個(gè)元素 , 其元素不可重復(fù) ;
2. 包含頭文件 :
//引入 set 集合的頭文件 #include <set>3. 聲明 set 集合 :
set<int> set_1 = {8 , 888 , 8888};4. 插入元素 : 注意 set 集合中元素不能重復(fù) , 如果插入重復(fù)的元素該操作是無效的 ;
//插入 18 , 集合中沒有元素 18 , 此時(shí)插入成功set_1.insert(18);//插入 888 , 此時(shí)之前已經(jīng)有了 888 元素 , set 集合不允許重復(fù) , 本次插入失敗set_1.insert(888);5. 插入解析 : 上面的兩個(gè)操作中 , 集合中已經(jīng)有了 888 元素 , 再次插入 888 元素 , 該操作是無效的 ;
6. 插入返回值解析 : insert 返回值是一個(gè)鍵值對 , 返回值類型 : pair<iterator, bool> ;
- ( 1 ) 具體的返回值類型 : pair<set::iterator, bool> ;
- ( 2 ) 其鍵是一個(gè)迭代器 ;
- ( 3 ) 值是 bool 類型 , 如果插入成功值為 true , 否則為 false ;
7. 刪除元素 : 刪除一個(gè)元素 , 其大小發(fā)生了改變 ;
//刪除某個(gè)元素set_1.erase(888); //打印容器大小cout << "打印 set_1 刪除 888 容量大小 : set_1.size() : " << set_1.size() << endl;8. 代碼示例 :
// VI . set 集合// Set : 集合 , 內(nèi)部是由紅黑樹實(shí)現(xiàn)的 , 每個(gè)節(jié)點(diǎn)都是一個(gè)元素 , 其元素不可重復(fù)set<int> set_1 = {8 , 888 , 8888};//插入 18 , 集合中沒有元素 18 , 此時(shí)插入成功set_1.insert(18);//插入 888 , 此時(shí)之前已經(jīng)有了 888 元素 , set 集合不允許重復(fù) , 本次插入失敗set_1.insert(888);//insert 返回值是一個(gè)鍵值對 , 其鍵是一個(gè)迭代器 ,// 值是 bool 類型 , 如果插入成功值為 true , 否則為 false// 返回值類型 : pair<iterator, bool>// 具體的返回值類型 : pair<set<int>::iterator, bool>//刪除某個(gè)元素set_1.erase(888); //打印容器大小cout << "打印 set_1 刪除 888 容量大小 : set_1.size() : " << set_1.size() << endl;9. 執(zhí)行結(jié)果 :
打印 set_1 刪除 888 容量大小 : set_1.size() : 3容器遍歷
迭代器不是指針 , 是一個(gè)模板類 , 與指針行為一致 , 可以當(dāng)做指針來用 ;
1. 迭代器使用 : 迭代器是一個(gè)模板類 ;
2. 獲取迭代器 : 調(diào)用 vector 對象的 begin() 和 end() 方法 都可獲取迭代器
vector<int> vector_iterator = {8 , 88 , 888};//該迭代器指向容器中第 0 個(gè)元素vector<int>::iterator iterator_begin = vector_iterator.begin();//迭代器指向容器中最后一個(gè)元素的下一個(gè)元素 , // 注意 : 不是指向最后一個(gè)元素vector<int>::iterator iterator_end = vector_iterator.end();3. 使用迭代器進(jìn)行遍歷 , 打印 vector 中的元素;
for ( ; iterator_begin < iterator_end; iterator_begin ++ ) {cout << "迭代器遍歷 : " << *iterator_begin << endl;}4. 代碼示例 :
// VII . 容器的遍歷//迭代器使用 : 迭代器是一個(gè)模板類 //獲取迭代器 : 調(diào)用 vector 對象的 begin() 和 end() 方法 都可獲取迭代器vector<int> vector_iterator = {8 , 88 , 888};//該迭代器指向容器中第 0 個(gè)元素vector<int>::iterator iterator_begin = vector_iterator.begin();//迭代器指向容器中最后一個(gè)元素的下一個(gè)元素 , // 注意 : 不是指向最后一個(gè)元素vector<int>::iterator iterator_end = vector_iterator.end();//使用迭代器進(jìn)行遍歷 , 打印 vector 中的元素for ( ; iterator_begin < iterator_end; iterator_begin ++ ) {cout << "迭代器遍歷 : " << *iterator_begin << endl;}//循環(huán)時(shí)盡量不修改容器大小 : 遍歷時(shí)不能進(jìn)行刪除增加操作 , 否則會出錯 ; //如果循環(huán)時(shí)修改大小 : 要根據(jù)實(shí)際情況進(jìn)行操作 , 如刪除操作 , // 如果將本元素刪除 , 那么循環(huán)控制變量就不能自增//迭代器不是指針 , 是一個(gè)模板類 , 與指針行為一致 , 可以當(dāng)做指針來用 ;5. 執(zhí)行結(jié)果 :
迭代器遍歷 : 8 迭代器遍歷 : 88 迭代器遍歷 : 888map 映射
1. 包含頭文件 :
//引入 map 的頭文件 #include <map>2. map 特點(diǎn) : map 中不能存在重復(fù)的 key ;
3. 聲明 map : 直接初始化元素 ;
//聲明 map 時(shí) , 直接初始化元素map<string, int> map_student = { {"Tom" , 6} , {"Jerry" , 2} };4. 插入鍵值對 :
//插入一個(gè)鍵值對map_student.insert({ "Trump" , 70 });5. 訪問對應(yīng)鍵值對 :
//獲取對應(yīng)鍵的值 , 使用 map變量名稱[鍵] 可以獲取對應(yīng)的值 map_student["Tom"] = 18;6. 代碼示例 :
// VIII . map 集合//map 中不能存在重復(fù)的 key ; //聲明 map 時(shí) , 直接初始化元素map<string, int> map_student = { {"Tom" , 6} , {"Jerry" , 2} };//插入一個(gè)鍵值對map_student.insert({ "Trump" , 70 });//獲取對應(yīng)鍵的值 , 使用 map變量名稱[鍵] 可以獲取對應(yīng)的值 map_student["Tom"] = 18;cout << "map_student[\"Tom\"] : " << map_student["Tom"] << endl;7. 執(zhí)行結(jié)果 :
map_student["Tom"] : 18容器代碼示例
1. 容器代碼示例 :
// 004_Container.cpp: 定義應(yīng)用程序的入口點(diǎn)。 //#include "004_Container.h"//vector 是 C++ 中定義的模板類 #include <vector>//引入隊(duì)列頭文件 , 才能使用 queue 隊(duì)列 //queue 隊(duì)列 , 也是 STL 模板類中提供的容器 #include <queue>//引入 stack 棧的頭文件 #include <stack>//引入 set 集合的頭文件 #include <set>//引入 map 的頭文件 #include <map>using namespace std;//自定義容器 class Student { public :int age; //聲明構(gòu)造方法 , 后面的 : age(age) // 左側(cè)的 age 表示給 age 成員賦值 , 右邊的表示參數(shù)中的 age 值Student(int age) : age(age){} };// Student 類對象排序方法定義 // 排序方式 : 左側(cè)對象的 age 成員變量 , 大于右側(cè)對象的 age 成員變量 struct StudentLess { constexpr bool operator()(const Student& _Left, const Student& _Right) const { return _Left.age < _Right.age;} };int main() {cout << "Hello Container。" << endl;// I . vector 向量 ( vector , dequeue , list 調(diào)用方式基本一致 )//vector 向量是一種支持快速隨機(jī)訪問的 , 連續(xù)存儲元素的容器//聲明向量vector<int> vector_1;//調(diào)用向量的構(gòu)造方法 , 并傳入一個(gè) int 類型參數(shù)//表示創(chuàng)建一個(gè)有 8 個(gè) int 類型元素空間的向量vector<int> vector_2(8);//表示創(chuàng)建有 8 個(gè)元素的向量 , 8 個(gè)元素的值都是 2vector<int> vector_3(8 , 2);//初始化向量時(shí) , 傳入另一個(gè)向量vector<int> vector_4(vector_3);// 2. 使用向量 : 增刪查改// ( 1 ) 增加元素 : 調(diào)用 push_back 方法 , 容器出入策略 , 后進(jìn)先出vector_1.push_back(8);vector_1.push_back(88);// ( 2 ) 查詢元素 : // <1> 通過下標(biāo)獲取元素// 這里的 [] 在 vector 中進(jìn)行了運(yùn)算符重載cout << "通過下標(biāo)獲取 vector_1 第 0 個(gè)元素 : vector_1[0] : " << vector_1[0] << endl;// <2> 通過 at() 方法獲取對應(yīng)索引的元素cout << "通過 at 方法獲取 vector_1 第 0 個(gè)元素 : vector_1.at(0) : " << vector_1.at(0) << endl;// <3> 獲取第一個(gè)元素cout << "通過 front 方法獲取 vector_1 第 1 個(gè)元素 : vector_1.front() : " << vector_1.front() << endl;// <4> 獲取最后一個(gè)元素cout << "通過 back 方法獲取 vector_1 最后 1 個(gè)元素 : vector_1.back() : " << vector_1.back() << endl;// ( 4 ) 刪除元素 : // <1> 調(diào)用 pop_back 方法 , 容器出入策略 , 后進(jìn)先出vector_1.pop_back();//之前向 vector 中先后放入了 8 和 88 兩個(gè)數(shù) , // 然后刪除了后一個(gè)元素 88 , 目前只剩下一個(gè)元素 8// <2> 刪除所有元素 , 這里只是清空元素內(nèi)容為 0vector_1.clear();// <3> 刪除指定位置區(qū)間的元素 , 這里只是清空元素內(nèi)容為 0// 第 1 個(gè)是刪除的起始位置 , // 第 2 個(gè)參數(shù)是刪除的結(jié)束位置 ;//刪除從開始到結(jié)束的所有元素vector_1.erase(vector_1.begin() , vector_1.end());//關(guān)于刪除元素內(nèi)存說明 : // 刪除若干元素后 , vector 的容量 , 即內(nèi)存所占的空間是不會減小的 ; // 調(diào)用刪除方法后 , 就不能在查詢上述元素了//打印 vector 容器容量大小 , 調(diào)用 vector 的 capacity() 方法即可獲取其容量大小// 這個(gè)容量大小是元素個(gè)數(shù) , 不是內(nèi)存字節(jié)數(shù)cout << "打印 vector_1 容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;// ( 5 ) 改變?nèi)萘?, 容器交換 , 這里使用一個(gè)容量為 0 的容器與之交換即可//創(chuàng)建一個(gè)新的 vector , 此時(shí)其容量為 0vector<int> vector_swap;//將創(chuàng)建的新的 vector_swap 與 vector_1 容器進(jìn)行交換vector_swap.swap(vector_1);cout << "打印 vector_1 交換后的容量大小 : vector_1.capacity() : " << vector_1.capacity() << endl;// II . queue 隊(duì)列//隊(duì)列是一個(gè)先進(jìn)先出的容器//聲明隊(duì)列queue<int> queue_1;//添加元素到隊(duì)列中 queue_1.push(8);queue_1.push(88);//將元素彈出隊(duì)列queue_1.pop(); //獲取首尾元素queue_1.front();queue_1.back();// III . stack 棧//stack 棧 是后進(jìn)先出的容器stack<int> stack_1;// IV . priority_queue 優(yōu)先級隊(duì)列//聲明優(yōu)先級隊(duì)列priority_queue<int> pq;//其默認(rèn)復(fù)制數(shù)值最大的在隊(duì)首 pq.push(88);pq.push(8);pq.push(888);//獲取隊(duì)首元素 , 將其打印出來 , 應(yīng)該是將最大的 888 打印到了控制臺//雖然 888 是最后添加進(jìn)去的 , 但是其數(shù)值最大 , 被放在了首元素位置 int pq_top = pq.top();cout << "打印 priority_queue 優(yōu)先級隊(duì)列的首元素 : pq.top() : " << pq.top() << endl;//指定優(yōu)先級隊(duì)列最大值放在隊(duì)尾//參數(shù) 1 : 代表隊(duì)列中元素的類型是 int 類型//參數(shù) 2 : 代表優(yōu)先級隊(duì)列使用的內(nèi)部容器 , 整個(gè)隊(duì)列是基于 vector 容器的//參數(shù) 3 : 設(shè)置排序行為 , 這個(gè)行為是在 STL 中定義的模板類 // less<int> : 是默認(rèn)行為 , 最大的元素在前面// greater<int> : 最小的在前面priority_queue< int, vector<int> , greater<int> > pq_1;pq_1.push(88);pq_1.push(8);pq_1.push(888);cout << "打印 pq_1 優(yōu)先級隊(duì)列的首元素 : pq.top() : " << pq_1.top() << endl;//自定義類型容器隊(duì)列// 注意此處必須指定 Student 對象之間的排序方式 , 否則編譯時(shí)會報(bào)錯 // 可以參考 less 和 greater 的實(shí)現(xiàn)//自定義的排序方法 : StudentLess , 其會將 Student 對象的 age 成員變量大的排在前面priority_queue< Student, vector<Student>, StudentLess > pq_student;//向自定義類型容器隊(duì)列中加入 3 個(gè)對象 , 使用構(gòu)造函數(shù)生成對象pq_student.push(Student(8));pq_student.push(Student(18));pq_student.push(Student(15));cout << "打印 pq_student 優(yōu)先級隊(duì)列的首元素 : pq_student.top().age : " << pq_student.top().age << endl;// V . 關(guān)聯(lián)式容器//操作 : 關(guān)聯(lián)式容器的操作 , 與序列式容器調(diào)用方法基本一致//訪問方式 : 通過關(guān)鍵字保存和訪問元素 , 如 Java 中的 Map , Set ; // VI . set 集合// Set : 集合 , 內(nèi)部是由紅黑樹實(shí)現(xiàn)的 , 每個(gè)節(jié)點(diǎn)都是一個(gè)元素 , 其元素不可重復(fù)set<int> set_1 = {8 , 888 , 8888};//插入 18 , 集合中沒有元素 18 , 此時(shí)插入成功set_1.insert(18);//插入 888 , 此時(shí)之前已經(jīng)有了 888 元素 , set 集合不允許重復(fù) , 本次插入失敗set_1.insert(888);//insert 返回值是一個(gè)鍵值對 , 其鍵是一個(gè)迭代器 ,// 值是 bool 類型 , 如果插入成功值為 true , 否則為 false// 返回值類型 : pair<iterator, bool>// 具體的返回值類型 : pair<set<int>::iterator, bool>//刪除某個(gè)元素set_1.erase(888); //打印容器大小cout << "打印 set_1 刪除 888 容量大小 : set_1.size() : " << set_1.size() << endl;// VII . 容器的遍歷//迭代器使用 : 迭代器是一個(gè)模板類 //獲取迭代器 : 調(diào)用 vector 對象的 begin() 和 end() 方法 都可獲取迭代器vector<int> vector_iterator = {8 , 88 , 888};//該迭代器指向容器中第 0 個(gè)元素vector<int>::iterator iterator_begin = vector_iterator.begin();//迭代器指向容器中最后一個(gè)元素的下一個(gè)元素 , // 注意 : 不是指向最后一個(gè)元素vector<int>::iterator iterator_end = vector_iterator.end();//使用迭代器進(jìn)行遍歷 , 打印 vector 中的元素for ( ; iterator_begin < iterator_end; iterator_begin ++ ) {cout << "迭代器遍歷 : " << *iterator_begin << endl;}//循環(huán)時(shí)盡量不修改容器大小 : 遍歷時(shí)不能進(jìn)行刪除增加操作 , 否則會出錯 ; //如果循環(huán)時(shí)修改大小 : 要根據(jù)實(shí)際情況進(jìn)行操作 , 如刪除操作 , // 如果將本元素刪除 , 那么循環(huán)控制變量就不能自增/*vector<int> vector_iterator_delete = { 8 , 88 , 888 };vector<int>::iterator iterator_begin_delete = vector_iterator_delete.begin();vector<int>::iterator iterator_end_delete = vector_iterator_delete.end();//遍歷時(shí)刪除元素 : 使用迭代器進(jìn)行遍歷 , 打印 vector 中的元素 , 遇到 888 元素 , 將其刪除for (; iterator_begin_delete < iterator_end_delete; iterator_begin_delete ++ ) {if (*iterator_begin_delete == 888) {cout << "迭代器遍歷刪除 ( 本次遍歷刪除該元素 ) : " << *iterator_begin_delete << endl;//如果元素值為 888 , 那么刪除該元素//iterator_begin_delete = vector_iterator_delete.erase(iterator_begin_delete);//iterator_begin_delete--;}else {cout << "迭代器遍歷刪除 ( 本次遍歷沒有刪除 ) : " << *iterator_begin_delete << endl;}}*///迭代器不是指針 , 是一個(gè)模板類 , 與指針行為一致 , 可以當(dāng)做指針來用 ; // VIII . map 集合//map 中不能存在重復(fù)的 key ; //聲明 map 時(shí) , 直接初始化元素map<string, int> map_student = { {"Tom" , 6} , {"Jerry" , 2} };//插入一個(gè)鍵值對map_student.insert({ "Trump" , 70 });//獲取對應(yīng)鍵的值 , 使用 map變量名稱[鍵] 可以獲取對應(yīng)的值 map_student["Tom"] = 18;cout << "map_student[\"Tom\"] : " << map_student["Tom"] << endl;return 0; }2. 執(zhí)行結(jié)果 :
Hello Container。 通過下標(biāo)獲取 vector_1 第 0 個(gè)元素 : vector_1[0] : 8 通過 at 方法獲取 vector_1 第 0 個(gè)元素 : vector_1.at(0) : 8 通過 front 方法獲取 vector_1 第 1 個(gè)元素 : vector_1.front() : 8 通過 back 方法獲取 vector_1 最后 1 個(gè)元素 : vector_1.back() : 88 打印 vector_1 容量大小 : vector_1.capacity() : 2 打印 vector_1 交換后的容量大小 : vector_1.capacity() : 0 打印 priority_queue 優(yōu)先級隊(duì)列的首元素 : pq.top() : 888 打印 pq_1 優(yōu)先級隊(duì)列的首元素 : pq.top() : 8 打印 pq_student 優(yōu)先級隊(duì)列的首元素 : pq_student.top().age : 18 打印 set_1 刪除 888 容量大小 : set_1.size() : 3 迭代器遍歷 : 8 迭代器遍歷 : 88 迭代器遍歷 : 888 map_student["Tom"] : 18總結(jié)
以上是生活随笔為你收集整理的【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++ 语言】vector 容器 (
- 下一篇: 【C++ 语言】类型转换 ( 转换操作符