欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的各種容器的使用方法匯總

 更新時(shí)間:2023年01月10日 14:13:59   作者:踏破鐵鞋無(wú)覓處,bug一寫一上午  
這篇文章主要介紹了C++中的各種容器的使用方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

vector

vector是封裝動(dòng)態(tài)數(shù)組的順序容器。元素相繼存儲(chǔ),這意味著不僅可通過(guò)迭代器,還能用指向元素的常規(guī)指針訪問(wèn)元素。這意味著指向 vector 元素的指針能傳遞給任何期待指向數(shù)組元素的指針的函數(shù)。

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

//空的vector容器
vector<int>v1;
//size為5,值的初始化為0的vector容器
vector<int>v2(5);
//size為5,值的初始化為1的vector容器
vector<int>v3(5, 1);
//創(chuàng)建vector時(shí)就初始化
vector<int>v4 = { 1,3,4,5,7 };
//利用別的vector創(chuàng)建初始化vector
vector<int>v5(v4);
//指定起始與結(jié)束內(nèi)容創(chuàng)建與初始化
vector<int>v6(v4.begin()+3, v4.end());

迭代器iterator

begin() 返回第一個(gè)元素的迭代器 
end() 返回最末元素的迭代器 
rbegin() 返回Vector尾部的逆迭代器 
rend() 返回Vector起始的逆迭代器 

訪問(wèn)元素

v.at(i)	//返回vector v指定位置的元素
v[i]	//返回vector v指定位置的元素
v.back() //返回最末一個(gè)元素 
v.front() //返回第一個(gè)元素 

插入與刪除元素

void push_back( const TYPE &val ); //在Vector最后添加一個(gè)元素 
void pop_back(); //移除最后一個(gè)元素 
iterator erase( iterator loc );	//刪除指定loc元素
iterator erase( iterator start, iterator end );	//刪除[start,end)元素

v.push_back(3);	//vector最后添加元素3
v.pop_back();	//刪除vector最后一個(gè)元素
v.erase(v.begin());//刪除位置為begin的元素
v.erase(v.begin(),v.end());//刪除區(qū)間[begin(),end())的元素

insert函數(shù)

//在指定位置loc前插入值為val的元素,返回指向這個(gè)元素的迭代器, 
iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入num個(gè)值為val的元素 
void insert( iterator loc, size_type num, const TYPE &val );
//在指定位置loc前插入?yún)^(qū)間[start, end)的所有元素
void insert( iterator loc, input_iterator start, input_iterator end );

v.insert(v.begin(),1);//在begin()位置插入元素1
v.insert(v.begin(),5,1);//在begin()位置插入5個(gè)值為1的元素
v.insert(v.begin(),v1.begin(),v1.end());//在begin()位置插入?yún)^(qū)間[v1.begin(),v1.end())的元素

deque

是有下標(biāo)順序容器,它允許在其首尾兩段快速插入及刪除。另外,在 deque 任一端插入或刪除不會(huì)非法化指向其余元素的指針或引用。

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

//無(wú)參,創(chuàng)建一個(gè)空雙向隊(duì)列 
deque();
//size - 創(chuàng)建一個(gè)大小為size的雙向隊(duì)列 
deque( size_type size );
//num and val - 放置num個(gè)val的拷貝到隊(duì)列中 
deque( size_type num, const TYPE &val );
//from - 從from創(chuàng)建一個(gè)內(nèi)容一樣的雙向隊(duì)列 
deque( const deque &from );
//start 和 end - 創(chuàng)建一個(gè)隊(duì)列,保存從start到end的元素
deque( input_iterator start, input_iterator end );

deque<int>d1;//空雙向隊(duì)列
deque<int>d2(5);//大小為5,值為0的雙向隊(duì)列
deque<int>d3(5,1);//大小為5,值為1的雙向隊(duì)列
deque<int>d4(d3);//創(chuàng)建一個(gè)與d3相同的雙向隊(duì)列
deque<int>d5(d3.begin(),d3.end());
deque<int>d6 = {1,4,6,8};//初始化隊(duì)列

迭代器iterator

begin() 返回第一個(gè)元素的迭代器 
end() 返回最末元素的迭代器 
rbegin() 返回尾部的逆迭代器 
rend() 返回起始的逆迭代器 

訪問(wèn)元素

d.at(i)	//返回指定位置的元素
d[i]	//返回指定位置的元素
d.back() //返回最末一個(gè)元素 
d.front() //返回第一個(gè)元素 

插入與刪除元素

void push_back( const TYPE &val ); //在最后添加一個(gè)元素 
void pop_back(); //移除最后一個(gè)元素 
void push_front( const TYPE &val ); //在頭部加入一個(gè)元素 
void pop_front(); //刪除頭部的元素 
iterator erase( iterator loc );	//刪除指定loc元素
iterator erase( iterator start, iterator end );	//刪除[start,end)元素
iterator emplace( const_iterator pos, Args&&... args );

d.push_back(3);	//最后添加元素3
d.pop_back();	//刪除最后一個(gè)元素
d.push_front(1)	//首元素添加元素1
d.pop_front();	//刪除首元素
d.erase(d.begin());//刪除位置為begin的元素
d.erase(d.begin(),d.end());//刪除區(qū)間[begin(),end())的元素

insert函數(shù)

//在位置為pos插入元素val
iterator insert( iterator pos, const TYPE &val );
//在位置為pos插入num個(gè)值為val元素
iterator insert( iterator pos, size_type num, const TYPE &val );
//在位置pos插入?yún)^(qū)間[start,end)
void insert( iterator pos, input_iterator start, input_iterator end );

//在begin位置插入元素1
d.insert(d.begin(),1);
//在begin位置插入5個(gè)值為1的元素
d.insert(d.begin(),5,1);
//在begin插入?yún)^(qū)間[d2.begin(),d2.end())
d.insert(d.begin(),d2.begin(),d2.end());

queue

queue 是STL提供的隊(duì)列容器

TYPE &back(); //返回最后一個(gè)元素 
bool empty();	//如果隊(duì)列空則返回真 
TYPE &front() 返回第一個(gè)元素 
TYPE &pop() 刪除第一個(gè)元素 
void push( const TYPE &val );在末尾加入一個(gè)元素 

功能就和普通的隊(duì)列相同

Priority Queues(優(yōu)先隊(duì)列)

優(yōu)先隊(duì)列類似隊(duì)列,但是在這個(gè)數(shù)據(jù)結(jié)構(gòu)中的元素按照一定的斷言排列有序

priority_queue<Type>
priority_queue<Type, Container, Functional>    
其中Type 為數(shù)據(jù)類型, Container 為保存數(shù)據(jù)的容器,F(xiàn)unctional 為元素比較方式。
Container 這里保存的容器一般用vector和deque

priority_queue<int> q;	//排序順序默認(rèn)為降序,也就是創(chuàng)建了大頂堆
priority_queue<int,vector<int>,less<int>> q;	//排序順序?yàn)樯?,?chuàng)建了小頂堆

優(yōu)先級(jí)隊(duì)列,這個(gè)容器可以用set來(lái)實(shí)現(xiàn)。

stact

該容器與現(xiàn)實(shí)數(shù)據(jù)結(jié)構(gòu)stack相同

bool empty() 	//堆棧為空則返回真 
void pop(); 	//移除棧頂元素 
void push( const TYPE &val ); //在棧頂增加元素 
size_type size(); 	//返回棧中元素?cái)?shù)目 
TYPE &top(); 	//返回棧頂元素 

list

List將元素按順序儲(chǔ)存在鏈表中. 與 vector相比, 它允許快速的插入和刪除,但是隨機(jī)訪問(wèn)卻比較慢

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

list<T> lst; //list采用模板類實(shí)現(xiàn)對(duì)象的默認(rèn)構(gòu)造形式:
list(beg,end); //構(gòu)造函數(shù)將[beg, end)區(qū)間中的元素拷貝給本身。
list(n,elem); //構(gòu)造函數(shù)將n個(gè)elem拷貝給本身。
list(const list &lst); //拷貝構(gòu)造函數(shù)。


list<int>L;	//空的list容器
list<int>L2(5);//大小為5值為0的容器
list<int>L3(5,1);//大小為5值為1的容器
list<int>L4(L3);//用L3創(chuàng)建容器
list<int>L5 = {1,4,6,8,4};//初始化容器

迭代器iterator

iterator begin();	//返回指向第一個(gè)元素的迭代器
iterator end()		//返回末尾的迭代器
iterator rbegin()	//返回指向第一個(gè)元素的逆向迭代器
iterator rend()		//返回list末尾的逆向迭代器

訪問(wèn)元素

L.back() //返回最末一個(gè)元素 
L.front() //返回第一個(gè)元素 

插入與刪除元素

void push_back( const TYPE &val ); //在最后添加一個(gè)元素 
void pop_back(); //移除最后一個(gè)元素 
void push_front( const TYPE &val ); //在頭部加入一個(gè)元素 
void pop_front(); //刪除頭部的元素 
iterator erase( iterator loc );	//刪除指定loc元素
iterator erase( iterator start, iterator end );	//刪除[start,end)元素
void remove( const TYPE &val );	//刪除所有的指定元素
void remove_if( UnPred pr );//以一元謂詞pr為判斷元素的依據(jù),遍歷整個(gè)鏈表。如果pr返回true則刪除該元素
L.push_back(3);	//最后添加元素3
L.pop_back();	//刪除最后一個(gè)元素
L.push_front(1)	//首元素添加元素1
L.pop_front();	//刪除首元素
L.erase(d.begin());//刪除位置為begin的元素
L.erase(d.begin(),d.end());//刪除區(qū)間[begin(),end())的元素
L.remove(1);	//刪除元素1
L.remove_if([](int n) { return n > 4; });	//刪除大于4的元素

insert函數(shù)

//在位置為pos插入元素val
iterator insert( iterator pos, const TYPE &val );
//在位置為pos插入num個(gè)值為val元素
iterator insert( iterator pos, size_type num, const TYPE &val );
//在位置pos插入?yún)^(qū)間[start,end)
void insert( iterator pos, input_iterator start, input_iterator end );


//在begin位置插入元素1
L.insert(L.begin(),1);
//在begin位置插入5個(gè)值為1的元素
L.insert(L.begin(),5,1);
//在begin插入?yún)^(qū)間[L2.begin(),L2.end())
L.insert(L.begin(),L2.begin(),L2.end());

合并鏈表

merge()合并兩個(gè)list,要求兩個(gè)list必須有序;
splice()不需要list有序,splice()不復(fù)制或移動(dòng)元素,僅重指向鏈表結(jié)點(diǎn)的內(nèi)部指針
可以用advance調(diào)整iterator 的位置

void merge( list &lst );	//合并兩個(gè)list必須有序,默認(rèn)是升序,被合并list會(huì)被清空
void merge( list &lst, Comp compfunction );	//合并兩個(gè)list,按照指定的順序排序
void splice( iterator pos, list &lst );	//將lst指向pos位置
void splice( iterator pos, list &lst, iterator del );	//將lst中del指向pos
void splice( iterator pos, list &lst, iterator start, iterator end );//將lst區(qū)間start與end元素指向pos

L.merge(L2);	//將L2合并到L
L.merge(L2,Compare);	//將L2合并到L,指定Compare規(guī)則
L.splie(L.begin(),L2);	//將L2整個(gè)list指向L.begin()位置
L.splie(L.begin(),L2,L2.begin());	//從L2的迭代器L2.begin()開(kāi)始指向L.begin()位置
L.splie(L.begin(),L2,L2.begin(),L2.end());	//將L2的迭代器區(qū)間[L2.begin(),L2.end())指向L的迭代器L.begin()位置

set

set容器的底層是由二叉樹(shù)構(gòu)成。set在插入元素時(shí),是不允許插入重復(fù)元素的;multiset是允許插入重復(fù)元素的。set會(huì)自動(dòng)排序,默認(rèn)是升序。

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

set中不存在set s(size_type num,T val)。因?yàn)閟et不允許重復(fù)元素。

iterator begin();	//返回指向第一個(gè)元素的迭代器
iterator end()		//返回末尾的迭代器
iterator rbegin()	//返回指向第一個(gè)元素的逆向迭代器
iterator rend()		//返回末尾的逆向迭代器
iterator lower_bound()	//返回指向大于(或等于)某值的第一個(gè)元素的迭代器
iterator upper_bound()	//返回大于某個(gè)值元素的迭代器

可以使用set<T,Compare>指定排序規(guī)則。

迭代器iterator

iterator begin();	//返回指向第一個(gè)元素的迭代器
iterator end()		//返回末尾的迭代器
iterator rbegin()	//返回指向第一個(gè)元素的逆向迭代器
iterator rend()		//返回末尾的逆向迭代器
iterator lower_bound()	//返回指向大于(或等于)某值的第一個(gè)元素的迭代器
iterator upper_bound()	//返回大于某個(gè)值元素的迭代器

插入與刪除元素

iterator begin();	//返回指向第一個(gè)元素的迭代器
iterator end()		//返回末尾的迭代器
iterator rbegin()	//返回指向第一個(gè)元素的逆向迭代器
iterator rend()		//返回末尾的逆向迭代器
iterator lower_bound()	//返回指向大于(或等于)某值的第一個(gè)元素的迭代器
iterator upper_bound()	//返回大于某個(gè)值元素的迭代器

unordered_set

unordered_set 容器,為“無(wú)序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的區(qū)別就在于 set 容器會(huì)自行對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行排序,而 unordered_set 容器不會(huì)

	unordered_set<int>s;
	s.insert(10);
	s.insert(60);
	s.insert(30);
	s.insert(90);
	for (auto a : s) {
		cout << a<< endl;
	}
--------------------------
90
10
60
30

map

map 是有序鍵值對(duì)容器,默認(rèn)是升序,它的元素的鍵是唯一的。用比較函數(shù) Compare 排序鍵。 map 通常實(shí)現(xiàn)為紅黑樹(shù)。mutlimap是允許存儲(chǔ)重復(fù)元素。

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

set中不存在map s(size_type num,T val)。因?yàn)閟et不允許重復(fù)元素。

map<T>m; //采用模板類實(shí)現(xiàn)對(duì)象的默認(rèn)構(gòu)造形式:
map<T>m(const map& ml); //拷貝函數(shù),將s初始化為se一樣
map<T>m(iterator start,iterator end)	//將s的初始化為[start,end)區(qū)間

map<int>m1;
map<int>m2(m);
map<int>m3(m.begin(),m.end());

可以使用map<T1,T2,Compare>指定排序規(guī)則。

迭代器iterator

iterator begin();	//返回指向第一個(gè)元素的迭代器
iterator end()		//返回末尾的迭代器
iterator rbegin()	//返回指向第一個(gè)元素的逆向迭代器
iterator rend()		//返回末尾的逆向迭代器
iterator lower_bound()	//返回指向大于(或等于)某值的第一個(gè)元素的迭代器
iterator upper_bound()	//返回大于某個(gè)值元素的迭代器

插入與刪除元素

iterator insert(const pair &p); //在集合中插入元素
void insert( input_iterator start, input_iterator end );//插入?yún)^(qū)間[start,end)元素

void erase( iterator i );	//刪除i的元素
void erase( iterator start, iterator end );		//刪除區(qū)間[start,end)中的元素
size_type erase( const key_type &key );		//刪除指定元素值
 
 
m.insert(make_pair(1,10));	//插入pair(1,10)
m.insert(s2.begin(),s2,end());	//插入?yún)^(qū)間[begin,end)元素

m.erase(m.begin());	//刪除元素為begin()中的元素
m.erase(m.begin(),m.end());	//刪除區(qū)間[begin,end)的元素
m.erase(1);		//刪除key為1的pair

find()與count()

//返回一個(gè)迭代器指向鍵值為key的元素,如果沒(méi)找到就返回指向map尾部的迭代器
iterator find( const KEY_TYPE &key );
//還回map中鍵值等于key的元素的個(gè)數(shù)。map只會(huì)返回0、1,mutlimap會(huì)返回值的個(gè)數(shù)
size_type count( const KEY_TYPE &key );
map<int ,int>::iterator it=m.find(10) //在m中查找key為10的元素
int num=m.count(10);	//查找key為10的值

unordered_map

unordered_map與map的用法基本一直,最大的區(qū)別在于:
map的key是有序的,而unordered_map的key為無(wú)序。

#include<unordered_map>
int main() {
	unordered_map<int, int>m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(1, 20));//key相同是不會(huì)重復(fù)存儲(chǔ)的
	m.insert(make_pair(6, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(9, 50));
	for (auto a : m) {
		cout << a.first << endl;
	}
	return 0;
}
-----------------------------
9
1
6
3

unordered_map與unordered_set的存儲(chǔ)時(shí)按照散列表存儲(chǔ)的,輸出順序與輸入順序是不一定相同的

到此這篇關(guān)于C++中的各種容器的使用方法的文章就介紹到這了,更多相關(guān)C++容器使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++返回值是類名和返回值是引用的區(qū)別及說(shuō)明

    C++返回值是類名和返回值是引用的區(qū)別及說(shuō)明

    這篇文章主要介紹了C++返回值是類名和返回值是引用的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Qt學(xué)習(xí)教程之表格控件螞蟻線詳解

    Qt學(xué)習(xí)教程之表格控件螞蟻線詳解

    如果有用過(guò)PS的選區(qū)工具應(yīng)該就會(huì)知道螞蟻線是什么東西了,就是用來(lái)表示選區(qū)的一種虛線,關(guān)鍵還是要?jiǎng)討B(tài)的!下面這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之表格控件螞蟻線的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • C語(yǔ)言中static與extern關(guān)鍵字的深入解析

    C語(yǔ)言中static與extern關(guān)鍵字的深入解析

    在C語(yǔ)言編程中,static和extern是兩個(gè)非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個(gè)關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開(kāi)發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C語(yǔ)言算法練習(xí)之折半查找的實(shí)現(xiàn)

    C語(yǔ)言算法練習(xí)之折半查找的實(shí)現(xiàn)

    二分查找法(也叫折半查找)其本質(zhì)是分治算法的一種。這篇文章主要介紹了如何利用C語(yǔ)言實(shí)現(xiàn)折半查找,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-05-05
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐

    這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法中時(shí)間空間復(fù)雜度的基礎(chǔ)實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C語(yǔ)言中g(shù)etchar函數(shù)詳解看這一篇就夠了(函數(shù)功能、使用、返回值)

    C語(yǔ)言中g(shù)etchar函數(shù)詳解看這一篇就夠了(函數(shù)功能、使用、返回值)

    getchar讀取字符的函數(shù),今天通過(guò)本文給大家介紹C語(yǔ)言中g(shù)etchar函數(shù)簡(jiǎn)介用法示例詳解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 指向類成員函數(shù)的指針其實(shí)并非指針

    指向類成員函數(shù)的指針其實(shí)并非指針

    對(duì)于指向類成員的指針,必須緊記,指向類成員(非static)的指針并非指針
    2013-08-08
  • 巧妙使用RAII中的ScopeExit

    巧妙使用RAII中的ScopeExit

    Resource Acquisition Is Initialization,資源獲取即初始化,將資源的生命周期與一個(gè)對(duì)象的生命周期綁定,這篇文章主要介紹了巧妙使用RAII中的ScopeExit,需要的朋友可以參考下
    2021-05-05
  • C++使用jsoncpp庫(kù)解析Json

    C++使用jsoncpp庫(kù)解析Json

    對(duì)json的解析操作是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常會(huì)遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于C++使用jsoncpp庫(kù)解析Json的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語(yǔ)言中#pragma?once的作用

    C語(yǔ)言中#pragma?once的作用

    這篇文章主要介紹了C語(yǔ)言中#pragma?once的作用,pragma once 一般由編譯器提供保證,更多相關(guān)內(nèi)容在下面文章詳細(xì)展開(kāi)需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論