日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【c++】标准模板库STL入门简介与常见用法

發(fā)布時(shí)間:2025/4/5 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c++】标准模板库STL入门简介与常见用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、STL簡(jiǎn)介

1、什么是STL

STL(Standard Template Library)標(biāo)準(zhǔn)模板庫(kù),主要由容器、迭代器、算法、函數(shù)對(duì)象、內(nèi)存分配器和適配器六大部分組成。STL已是標(biāo)準(zhǔn)C++的一部分,使用STL開發(fā)系統(tǒng)可以提高開發(fā)效率。

2、容器(Containers)

容器類是可以包含其它對(duì)象的模板類,如向量類(vector)、鏈表類(list)、雙向隊(duì)列類(deque)、集合類(set)和映射類(map)等。其中vector、list、deque為序列式容器,set、map為關(guān)聯(lián)式容器。如:

vector<int> x;? //向量x,每個(gè)分量是int

vector<point> v; //向量v,每個(gè)分量是point

list<int> L1;??? //鏈表L1,每個(gè)節(jié)點(diǎn)是int

3、算法(Algorithms)

STL提供了非常多的數(shù)據(jù)結(jié)構(gòu)算法,它們?cè)趕td命名空間的范圍內(nèi)定義,通過#include<algorithm>獲得對(duì)它們的使用權(quán)。

注意:算法都是全局函數(shù)模板,如:for_each( )、find()、count()和sort()等

4、迭代器(Iterator)

迭代器類似于C++的指針,是一個(gè)指示器,用來指示容器中的某個(gè)元素,迭代器的出現(xiàn)使得容器與算法的分離成為可能,即使用算法必須使用容器和迭代器。

5、函數(shù)對(duì)象:具有operator()運(yùn)算符重載函數(shù)的對(duì)象。

二、vector技術(shù)

1、vector概述

vector是STL提供的最簡(jiǎn)單,也是最常用的容器類模板之一,類似于傳統(tǒng)數(shù)組。

vector特點(diǎn):提供了對(duì)數(shù)組元素的快速、隨機(jī)訪問,以及在序列尾部快速、隨機(jī)的插入和刪除;vector對(duì)象在運(yùn)行時(shí)可以動(dòng)態(tài)改變自身的大小以便容納任何數(shù)目的元素。

vector頭文件:vector是在標(biāo)準(zhǔn)頭文件<vector>或在非標(biāo)準(zhǔn)向后兼容頭文件vector.h中定義。

2、vector的成員函數(shù)

(1)構(gòu)造函數(shù):

vector<T> v1;???? ? ? ??? // vector保存類型為T對(duì)象。默認(rèn)構(gòu)造函數(shù)v1為空。

vector<T> v2(v1); ? ? // v2是v1的一個(gè)副本。

vector<T> v3(n, i);????? // v3 包含 n 個(gè)值為 i 的元素。

vector<T> v4(n);???? ??? // v4 具有n個(gè)元素。

(2)操作

v.empty();??? // 如果 v 為空,則返回 true,否則返回 false。

v.size();???????? // 返回 v 中元素的個(gè)數(shù)。

v.push_back(t);?? // 在 v 的末尾增加一個(gè)值為 t 的元素。

v.pop_back();??? // 刪除v的末尾元素

v.erase(iter);//刪除iter指示器指示的元素

v.erase(iter_F,iter_L);//刪除指示器iter_F和iter_L之間的所有元素

v.resize(10);???? //改變v的大小為10;

v[n];???????????? // 返回 v 中位置為 n 的元素。

v1 = v2;????????? // 把 v1 的元素替換為 v2 中元素的副本。

v1 == v2;???? ??? // 如果 v1 與 v2 相等,則返回 true。

// !=, <, <=, >, 和>=保持這些操作符慣有的含義。

例題1基本操作練習(xí)

#include <vector>

#include <iostream>

using namespace std;

void main()

{

??? vector<int> v(5,8);

??? cout<<"v.size()="<<v.size()<<endl;

??? v.push_back(10);

??? v.push_back(12);

??? cout<<"v.size()="<<v.size()<<endl;

??? for ( int i=0;i<v.size();i++)

?????? cout<<v[i]<<endl;

??? v.pop_back();

??? v.pop_back();

??? v.pop_back();

??? v.pop_back();

??? cout<<"v.size()="<<v.size()<<endl;

??? for ( i=0;i<v.size();i++)

?????? cout<<v[i]<<endl;

}

3、高級(jí)操作

迭代器和算法同樣適用于其它容器。

(1)迭代器

迭代器類型:

vector<T>::iterator

舉例:

?????? for (vector<int>::iterator iter=v.begin();iter<v.end();iter++)

????????????? cout<<*iter<<endl;

(2)算法

for_each 算法:

for_each(起始iterator,末尾iterator,函數(shù)模板);

舉例:

#pragma warning(disable:4786)

#include <vector>

#include <string>

#include <iostream>

#include <algorithm>

using namespace std;

void PrintIt(string & S)

{

?????? cout<<S<<endl;

}

void main()

{

?????? vector<string> v;

?????? v.push_back("English");

?????? v.push_back("Math");

?????? v.push_back("Chinese");

?????? v.push_back("Program");

?????? for_each (v.begin(),v.end(),PrintIt);

}

sort算法

sort((起始iterator,末尾iterator);

舉例:

?????? sort(v.begin(),v.end());

?

count算法

count(起始iterator,末尾iterator,某個(gè)值)統(tǒng)計(jì)某個(gè)值的出現(xiàn)次數(shù)

舉例:

#pragma warning(disable:4786)

#include <vector>

#include <iostream>

#include <algorithm>

using namespace std;

void PrintIt(string & S)

{

?????? cout<<S<<endl;

}

void main()

{

?????? vector<int> v;

?????? v.push_back(100);

?????? v.push_back(80);

?????? v.push_back(90);

?????? v.push_back(100);

?????? v.push_back(80);

?????? cout<<count(v.begin(),v.end(),100)<<endl;

}

find算法

find(起始iterator,末尾iterator,某個(gè)值)查找某個(gè)值是否出現(xiàn)

舉例:

?????? vector<int>::iterator iter;

?????? iter=find(v.begin(),v.end(),100);

?????? if (iter==v.end())

????????????? cout<<"No found!"<<endl;

?????? else

????????????? cout<<*iter<<endl;

count_if和find_if算法:這兩個(gè)算法的使用需要借助函數(shù)對(duì)象完成。

4、vector應(yīng)用

練習(xí)1:vector綜合練習(xí)

//文件名:CHAPTER6-24.cpp

#include <vector>

#include <algorithm>

#include <iostream>

using namespace std;

void pause()? //程序暫停

{?? char c;

??? cout << "\n\nPress return to continue: ";

??? cin.get(c);

??? cout << "\n\n";

}

int main()

{

??? vector<int> v(10,0);?? //定義一個(gè)vector變量,大小為10,值都為0

??? ostream_iterator<int> out(cout, " "); ?//定義一個(gè)輸出迭代器

??? copy(v.begin(), v.end(), out);// 通過算法函數(shù)copy輸出v中全部的數(shù)據(jù)

??? pause(); //程序輸出為:0 0 0 0 0 0 0 0 0 0

??? vector<int>::iterator i = v.begin(); //定義頭迭代器

??? i += 4;? //指向第5個(gè)元素

??? *i++ = 7;? // or v[4] = 7; //使第5個(gè)元素值為7,同時(shí)迭代器指向下一個(gè)元素

??? *i = 9;??? // or v[5] = 9; //賦值第6個(gè)元素大小為9

??? copy(v.begin(), v.end(), out); // 把通過迭代器賦值后的所有元素打印出來

??? pause();//程序輸出為: 0 0 0 0 7 9 0 0 0 0

??? vector<int>::iterator where = find(v.begin(), v.end(), 9);//在v中查找值為9的元素,并返回相應(yīng)的迭代器

??? copy(where, v.end(), out);// 把查找到的元素及其該元素后的數(shù)據(jù)全部顯示出來。

??? pause();//程序輸出為:9 0 0 0 0

??? where = v.insert(where, 8); //在迭代器指示的元素前插入一個(gè)元素,其值為8

??? copy(v.begin(), v.end(), out); //檢驗(yàn)insert函數(shù)的效果

??? pause();//程序輸出為:0 0 0 0 7 8 9 0 0 0 0

??? where += 3;? //迭代器指示當(dāng)前元素后的第三個(gè)元素為當(dāng)前元素

??? where = v.insert(where, 4); //在當(dāng)前元素前插入一個(gè)元素,值為4

??? copy(v.begin(), v.end(), out);

??? pause();//程序輸出為:0 0 0 0 7 8 9 0 4 0 0 0

??? where -= 6;//迭代器前移6個(gè)元素

??? where = v.insert(where, 11); //插入元素11到vector中

??? copy(v.begin(), v.end(), out);

??? pause();//程序輸出為:0 0 11 0 0 7 8 9 0 4 0 0 0

??? v.erase(where+2);? // 刪除迭代器后的第2個(gè)元素

??? copy(v.begin(), v.end(), out);

??? pause();//程序輸出為:0 0 11 0 7 8 9 0 4 0 0 0

??? sort(v.begin(), v.end()); //對(duì)vector進(jìn)行由大到小排序

??? copy(v.begin(), v.end(), out);

??? pause();//程序輸出為:0 0 0 0 0 0 0 4 7 8 9 11

??? if (binary_search(v.begin(), v.end(), 8)) // vector的查找

???????? cout << "Yes, 8 occurs in vector v.";

??? else

???????? cout << "No, didn't find 8 in vector v.";

??? pause();//程序輸出為:Yes, 8 occurs in vector v.

??? if (binary_search(v.begin(), v.end(), 12)) //? vector的查找

???????? cout << "Yes, 12 occurs in vector v.";

??? else

???????? cout << "No, didn't find 12 in vector v.";

??? pause();//程序輸出為:No, didn't find 12 in vector v.

??? where = lower_bound(v.begin(), v.end(), 8); //查找第一次出現(xiàn)8的位置

??? copy(where, v.end(), out);

??? pause();//程序輸出為:8 9 11

??? where = lower_bound(v.begin(), v.end(), 0); //查找第一次出現(xiàn)0的位置

??? copy(where, v.end(), out);

??? pause();//程序輸出為:0 0 0 0 0 0 0 4 7 8 9 11

??? where = upper_bound(v.begin(), v.end(), 0); //查找第一次不出現(xiàn)0時(shí)的位置

??? copy(where, v.end(), out);

??? pause();//程序輸出為:4 7 8 9 11

??? vector<int> w(v);

??? if (v == w) //兩個(gè)vector直接比較

?????? cout << "v and w have the same contents";

??? else

?????? cout << "v and w have different contents";

??? pause();//程序輸出為:v and w have the same contents

??? w[5] = 17;

??? if (v == w)

?????? cout << "v and w have the same contents";

??? else

?????? cout << "v and w have different contents";

??? pause();//程序輸出為:v and w have different contents

??? v[5] = 17;

??? if (v == w)

?????? cout << "v and w have the same contents";

??? else

?????? cout << "v and w have different contents";

??? pause();//程序輸出為:v and w have the same contents

??? return 0;

}

練習(xí)2???? 讀入一段文本到vector對(duì)象,每個(gè)單詞存儲(chǔ)為vector中的一個(gè)元素。把vector對(duì)象中每個(gè)單詞轉(zhuǎn)化為大寫字母。輸出vector對(duì)象中轉(zhuǎn)化后的元素,每8個(gè)單詞為一行輸出。

?

三、deque技術(shù)

1、deque概述

deque(double-ended queue)是一種動(dòng)態(tài)的數(shù)組形式,可以向兩端發(fā)展。

deque特點(diǎn):也是隨機(jī)訪問的數(shù)據(jù)類型;提供了在序列兩端快速的插入和刪除操作的功能;可以在需要時(shí)修改其自身大小。

deque頭文件:deque是在標(biāo)準(zhǔn)頭文件<deque>或在非標(biāo)準(zhǔn)向后兼容頭文件deque.h中定義。

2、deque的成員函數(shù)

(1)構(gòu)造函數(shù):

deque<T> name1;????? ? ?

deque<T> name2 (name1);? ? ?

deque<T> name3(size);??????

deque<T> name4(size,value);???? ???

說明:

第一種創(chuàng)建了一個(gè)可容納類型為T的空deque對(duì)象name1;

第二種用拷貝構(gòu)造函數(shù)從現(xiàn)有的name1創(chuàng)建了新的deque對(duì)象name2;

第三種創(chuàng)建了一個(gè)初始大小為size的deque對(duì)象name3;

第四種創(chuàng)建了一個(gè)初始大小為size,每個(gè)元素初始化值為value的deque對(duì)象name4;

(2)操作

d.empty();??????? // 如果 d 為空,則返回 true,否則返回 false。

d.size();??? ?????// 返回 d 中元素的個(gè)數(shù)。

d.push_back(t);? // 在 d 的末尾增加一個(gè)值為 t 的元素。

d.push_front(t); // 在 d 的頭部增加一個(gè)值為 t 的元素。

d.pop_back();???? // 刪除d的末尾元素

d.pop_front();??? // 刪除d的第一個(gè)元素

d.insert(iterator , t); //在d的iterator處插入t。

d.insert(iterator, iter_F,iter_L);

//在d的iterator處插入iter_F到iter_L之間的元素。

d.erase(iter);???? //刪除iter指示器指示的元素

d.erase(iter_F,iter_L);//刪除指示器iter_F和iter_L之間的所有元素

d.resize(10);???? //改變d的大小為10;

d[n]??????????????? // 返回 d 中位置為 n 的元素。

d1=d2?????????????? // 把 d1 的元素替換為 d2 中元素的副本。

d1==d2????????????? // 如果 d1 與 d2 相等,則返回 true。

// !=, <, <=, >, 和>=保持這些操作符慣有的含義。

d.swap(d1);??????? //d和d1容器中的內(nèi)容互換。

3、高級(jí)操作

(1)迭代器

deque<T>iterator

舉例:

?????? for (deque<int>::iterator iter=d.begin();iter<d.end();iter++)

????????????? cout<<*iter<<endl;

(2)算法

for_each()算法、sort()算法、count()算法、find()算法同樣適用于deque容器;

3、deque應(yīng)用

練習(xí):deque綜合練習(xí)

#include <iostream>

#include <deque>??

#include <string>

#include <algorithm>

using namespace std;

int main()

{

?????? //create empty deque of strings

?????? deque<string> coll;

?????? //insert several elements

?????? coll.assign (3, string("string"));

?????? coll.push_back ("last string");

?????? coll.push_front ("first string");

?????? //print elements separated by newlines

?????? copy (coll.begin(), coll.end(),?????? ostream_iterator<string>(cout,"\n"));

?????? cout << endl;

?????? //remove first and last element?????

?????? coll.pop_front();

?????? coll.pop_back();????

?????? //insert ''another'' into every element but the first

?????? for (int i=1; i<coll.size(); ++i) {

????????????? coll[i] = "another " + coll [i];

?????? }

?????? //change size to four elements

?????? coll.resize (5, "resized string");

?????? //print elements separated by newlines

?????? copy (coll.begin(), coll.end(),ostream_iterator<string>(cout,"\n"));

}

四、list技術(shù)

1、list概述

list是一個(gè)雙向鏈表容器,不支持隨機(jī)訪問。

list特點(diǎn):不支持隨機(jī)訪問,訪問鏈表元素要從鏈表的某個(gè)端點(diǎn)開始,插入和刪除操作所花費(fèi)的時(shí)間是固定的,即與元素在鏈表中的位置無關(guān);優(yōu)勢(shì)是在任何位置執(zhí)行插入或刪除動(dòng)作都非常迅速;可以在需要時(shí)修改其自身大小。

list頭文件:list是在標(biāo)準(zhǔn)頭文件<list>或在非標(biāo)準(zhǔn)向后兼容頭文件list.h中定義。

2、list的成員函數(shù)

(1)構(gòu)造函數(shù):

list<T> name1;?????? ? ?

list <T> name2 (name1);? ? ?

list <T> name3(size);??????

list <T> name4(size,value);???? ???

說明:

第一種創(chuàng)建了一個(gè)可容納類型為T的空l(shuí)ist對(duì)象name1;

第二種用拷貝構(gòu)造函數(shù)從現(xiàn)有的name1創(chuàng)建了新的list對(duì)象name2;

第三種創(chuàng)建了一個(gè)初始大小為size的list對(duì)象name3;

第四種創(chuàng)建了一個(gè)初始大小為size,每個(gè)元素初始化值為value的list對(duì)象name4;

(2)操作

d.empty();??????? // 如果 d 為空,則返回 true,否則返回 false。

d.size();???????? // 返回 d 中元素的個(gè)數(shù)。

d.push_back(t);? // 在 d 的末尾增加一個(gè)值為 t 的元素。

d.push_front(t); // 在 d 的頭部增加一個(gè)值為 t 的元素。

d.pop_back();???? // 刪除d的末尾元素

d.pop_front();??? // 刪除d的第一個(gè)元素

d.front();???????? //返回d的第一個(gè)元素的引用

d.back();?????????? //返回d的最后一個(gè)元素的引用

d.insert(iterator , t); //在d的iterator處插入t。

d.insert(iterator, iter_F,iter_L);

//在d的iterator處插入iter_F到iter_L之間的元素。

d.erase(iter);//刪除iter指示器指示的元素

d.erase(iter_F,iter_L);//刪除指示器iter_F和iter_L之間的所有元素

d.swap(d1);??????? //d和d1容器中的內(nèi)容互換。

d.sort();?????????? //list類的排序使用成員函數(shù)完成。而不是用通用算法函數(shù)。

d.resize(10);???? //改變d的大小為10;

d.merge(d1);?????? //合并d1和d,以升序排列存儲(chǔ)到d中

d.splice(iterator, T);//把另一個(gè)list對(duì)象T插入到iterator位置

d.splice(iterator,T,iter);//把另一個(gè)list對(duì)象T的iter位置的元素插入到d的iterator位置。

迭代器

begin()和end()返回頭尾的迭代器;

rbegin()和rend()返回尾頭的反向迭代器:rbegin()返回最后一個(gè)元素的迭代器,rbegin++返回倒數(shù)第二個(gè)元素。(注意:迭代器只能使用==和!=比較,不能使用>或<比較)。

3、list應(yīng)用

#include <iostream>

#include <list>

#include <algorithm>

#if _MSC_VER > 1020?? // if VC++ version is > 4.2

?? using namespace std;? // std c++ libs implemented in std

#endif

void printLists(const list<int>& l1, const list<int>& l2)

{

?????? cout << "list1: ";

?????? copy (l1.begin(), l1.end(), ostream_iterator<int>(cout," "));

?????? cout << endl << "list2: ";

?????? copy (l2.begin(), l2.end(), ostream_iterator<int>(cout," "));

?????? cout << endl << endl;

};

int main()

{

?????? //create two empty lists

?????? list<int> list1, list2;

?????? //fill both lists with elements

?????? for (int i=0; i<6; ++i)

?????? {

????????????? list1.push_back(i);

????????????? list2.push_front(i);

?????? }

?????? printLists(list1, list2);

?????? ?//insert all elements of list1 before the first element with value 3 of list2

?//-find() returns an iterator to the first element with value 3

?????? list2.splice(find(list2.begin(),list2.end(), // destination position

????????????? 3), list1); // source list

?????? printLists(list1, list2);//move first element to the end

?????? list2.splice(list2.end(), // destination position

????????????? list2, // source list

????????????? list2.begin()); // source position

?????? printLists(list1, list2);

?????? //sort second list, assign to list1 and remove duplicates

?????? list2.sort();

?????? list1 = list2;

?????? list2.unique();

?????? printLists(list1, list2);

?????? //merge both sorted lists into the first list

?????? list1.merge(list2);

?????? printLists(list1, list2);

?????? return 0;

}

五、set技術(shù)

1、set概述

set是一種關(guān)聯(lián)式容器,關(guān)聯(lián)式容器依據(jù)特定的排序準(zhǔn)則,自動(dòng)為其元素排序。set中每個(gè)元素只能出現(xiàn)一次。即數(shù)學(xué)中的集合。

set頭文件:set是在標(biāo)準(zhǔn)頭文件<set>或在非標(biāo)準(zhǔn)向后兼容頭文件set.h中定義。

2、set的成員函數(shù)

(1)構(gòu)造函數(shù):

set<T> s1;??? ? ?

set<T> s2(s1);??? ? ?

(2)操作

s.empty();??????? // 如果 s 為空,則返回 true,否則返回 false。

s.size();???????? // 返回 s 中元素的個(gè)數(shù)。

s.insert( t);??? //在s中插入t。

s.insert(iter_F,iter_L); //在s中插入iter_F到iter_L之間的元素。

s.erase(iter);?? //刪除iter指示器指示的元素

s.erase(iter_F,iter_L);//刪除指示器iter_F和iter_L之間的所有元素

s.erase(key);??? //刪除s中的key元素。

s.lower_bound(key);//返回key前面的元素的迭代器

s.upper_bound(key);//返回key后面的元素的迭代器

s.find(key); ?????//在s中查找鍵值key,找到返回iterator,否則返回end()。

s.resize(10);???? //改變s的大小為10;

3、set應(yīng)用

??? 編寫程序通過刪除單詞尾部的’s’生成該單詞的非復(fù)數(shù)版本。同時(shí)建立一個(gè)單詞排除集,用于識(shí)別以’s’結(jié)尾、但這個(gè)結(jié)尾的’s’又不能刪除的單詞。例如,放在該排除集中的單詞可能有success和class。使用這個(gè)排除集編寫程序,刪除輸入單詞的復(fù)數(shù)后綴,而如果輸入的是排除集的單詞,則保持該單詞不變。

#pragma warning(disable: 4786)

#include <set>

#include <iostream>

int main()

{

?????? std::set<int> c1 ;

?????? int ai[] = {0, 1, 2, 3} ;

?????? //construct from a range

?????? std::set<int> c2(ai, ai + 4) ;

?????? //copy constructor

?????? std::set<int> c3(c2) ;

?????? std::set<int>::iterator Iter ;

?????? std::set<int>::reverse_iterator RevIter ;

?????? //判斷c1是否為空

?????? if(c1.empty())

?????? {??????????? std::cout << "set c1 is empty" << std::endl ; }

?????? else

?????? {??????????? std::cout << "set c1 is not empty" << std::endl ;?? }

?????? //使用begin, end顯示c2所有元素

?????? std::cout << "c2 (using begin, end)? = " ;

?????? for(Iter = c2.begin(); Iter != c2.end(); Iter++)

?????? {??????????? std::cout << *Iter << " " ;???? }

?????? std::cout << std::endl ;

?????? //使用rbegin,rend顯示c2所有元素

?????? std::cout << "c2 (using rbegin, rend) = " ;

?????? for(RevIter = c2.rbegin(); RevIter != c2.rend(); RevIter++)

?????? {??????????? std::cout << *RevIter << " " ;?????? }

?????? std::cout << std::endl ;

?????? //使用find進(jìn)行元素的查找

?????? std::set<int>::const_iterator constIter = c1.find(3) ;

?????? if(constIter != c1.end())

?????? {??????????? std::cout << "c1 contains element 3, *constIter = "

???????????????????? << *constIter << std::endl ;

?????? }

?????? //使用size返回c1的最大元素大小

?????? std::cout << "c1.size() = " << c1.size() << std::endl ;

?????? //使用swap把c1和c2進(jìn)行元素交換

?????? c1.insert(4) ;

?????? c2.swap(c1) ;

?????? std::cout << "The last element of c2 = " << *(c2.rbegin())

????????????? << std::endl ;

?????? //使用clear進(jìn)行c1元素的清除

?????? c1.clear() ;

?????? std::cout << "After calling c1.clear(), c1.size() = "

????????????? << c1.size() << std::endl ;

?????? //使用upper_bound返回c2當(dāng)前值的最近增值迭代器

?????? std::cout << "* (c2.upper_bound(3)) = "

????????????? << *(c2.upper_bound(3)) << std::endl ;

?????? //使用lower_bound返回c2當(dāng)前值的最近降值迭代器

?????? std::cout << "* (c2.lower_bound(3)) = "

????????????? << *(c2.lower_bound(3)) << std::endl ;

?????? //使用erase進(jìn)行元素的刪除操作

?????? if(c3.erase(1) != 0)

?????? {??????????? std::cout << "c3 does not contain 1 any more" << std::endl ;????? }

?????? else

?????? {??????????? std::cout << "No elements in c3 match key 1" << std::endl ;????? }

?????? if((c2.erase(c2.begin())) != c2.end())

?????? {??????????? std::cout << "c2 does not contain 0 any more" << std::endl ;????? }

?????? else

?????? {??????????? std::cout << "No elements in c2 match key 0" << std::endl ;????? }

?????? c3.erase(c3.begin(), c3.end()) ;

?????? std::cout << "after c3.erase(c3.begin(), c3.end()), c3.size() = "

????????????? << c3.size() << std::endl ;

?????? return 0 ;

}

六、map技術(shù)

1、map概述

map是一種關(guān)聯(lián)式容器,set中每個(gè)元素都是由“鍵值/實(shí)值”所形成的一對(duì)組合,每個(gè)鍵值只能出現(xiàn)一次,不能重復(fù)。

map頭文件:map是在標(biāo)準(zhǔn)頭文件<map>或在非標(biāo)準(zhǔn)向后兼容頭文件map.h中定義。

2、map的成員函數(shù)

(1)構(gòu)造函數(shù):

map<k, v> m2;

// 創(chuàng)建一個(gè)名為m2的空map對(duì)象,其鍵和值的類型分別為k和v

map<k, v> m(m2);

// 創(chuàng)建m2的副本m,m與m2必須有相同的鍵類型和值類型

map<k, v> m(iter_F, iter_L);

// 創(chuàng)建map類型的對(duì)象m,存儲(chǔ)迭代器iter_F和 iter_L標(biāo)記的范圍內(nèi)所有元素的副本。元素的類型必須能轉(zhuǎn)換為pair<const k, v>

對(duì)于鍵類型,唯一的約束就是必須支持 < 操作符,至于是否支持其他的關(guān)系或相等運(yùn)算,則不作要求。

(2)操作:

m.empty()、m.size()、m.begin()、m.end()、m.rbegin()、m.rend()、m.swap(m1)、m.lower_bound(key)、m.upper_bound(key)、、

m.insert(pair<k,v>(key,value))、

m.insert(iterator, pair<k,v>(key,value))、

m.erase(iterator)、m.erase(key)、m.erase(iter_F,iter_L)、

m[key]????? //如果下標(biāo)所表示的鍵在容器中不存在,則添加新元素

3、map應(yīng)用

(1)編寫程序統(tǒng)計(jì)并輸出所讀入的單詞出現(xiàn)次數(shù)。

(2)輸入兩個(gè)多項(xiàng)式,計(jì)算兩個(gè)多項(xiàng)式的加法運(yùn)算結(jié)果。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【c++】标准模板库STL入门简介与常见用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品无码国产一区二区三区51安 | 美女少妇直播 | 夜色一区二区三区 | 欧美成人黑人xx视频免费观看 | av天天干| 国产一级免费视频 | 男人女人拔萝卜视频 | 亚洲av无一区二区三区怡春院 | 中文乱码人妻一区二区三区视频 | 日韩av成人网 | 亚洲精品9 | 性欧美一区 | 成人毛片在线免费观看 | 美女啪啪无遮挡 | 诱人的乳峰奶水hd | 日韩精品人妻一区 | 麻豆视频污 | 色一区二区三区 | 欧美激情喷水 | 重囗味sm一区二区三区 | 日韩欧美在线播放 | 456av| 久久偷看各类女兵18女厕嘘嘘 | 亚洲永久免费观看 | 黄网站免费入口 | 91看片看淫黄大片 | www.精品在线| 精品成人国产 | 亚洲婷婷丁香 | 国产成人无码一区二区三区在线 | 国产区在线观看 | 亚洲激情中文字幕 | 麻豆免费在线观看视频 | 久久久这里有精品 | 国产片一区二区三区 | 久久免费视屏 | 中文字幕在线观看91 | 色图插插插| 99爱视频在线 | 国产成人久久精品77777综合 | 欧美日韩1区2区 | 国精品人妻无码一区二区三区喝尿 | 性饥渴的农村熟妇 | 日本久久精品视频 | 字幕网在线| www啪啪 | 国产精品无码一本二本三本色 | 无码专区久久综合久中文字幕 | 99视频99| 好吊妞这里只有精品 | 欧洲做受高潮欧美裸体艺术 | 国产高清在线视频观看 | 人人干人人爽 | 欧美午夜精品久久久久久蜜 | 日本十八禁视频无遮挡 | 国产强被迫伦姧在线观看无码 | 成人污污www网站免费丝瓜 | 人人妻人人澡人人爽人人dvd | 午夜国产一区二区 | 成人在线观看免费视频 | 中文字幕高清av | 91成人免费在线观看视频 | 欧美xxxx黑人又粗又长密月 | 欧美色欧美 | 国产在线观看一区二区三区 | china国产乱xxxxx绿帽 | 欧美性白人极品1819hd | 九九久久免费视频 | 中文字幕日韩三级 | a黄色片| 欧美成人极品 | 成人免费看片98 | 精品美女在线 | 精品人妻伦一区二区三区久久 | 无套爆插 | 国产女厕一区二区三区在线视 | av免费播放 | 国产乱子一区二区 | 午夜香蕉视频 | 羞视频在线观看 | 亚洲免费观看高清在线观看 | 99999av| 欧美第1页 | 97黄色片| 西野翔夫の目の前で犯在线 | 欧美乱码视频 | 69xxx中国| 日韩精品一区二区三区电影 | 久久精品国产视频 | 国产成人一区二区三区免费看 | 午夜影视剧场 | 成人天堂网| 久草一区 | 午夜草逼 | 日韩三级a| 99精品久久久久久 | 黄色网址www | 久久发布国产伦子伦精品 | 91大神一区二区 |