網站首頁 編程語言 正文
vector
vector是封裝動態數組的順序容器。元素相繼存儲,這意味著不僅可通過迭代器,還能用指向元素的常規指針訪問元素。這意味著指向 vector 元素的指針能傳遞給任何期待指向數組元素的指針的函數。
構造函數
//空的vector容器
vector<int>v1;
//size為5,值的初始化為0的vector容器
vector<int>v2(5);
//size為5,值的初始化為1的vector容器
vector<int>v3(5, 1);
//創建vector時就初始化
vector<int>v4 = { 1,3,4,5,7 };
//利用別的vector創建初始化vector
vector<int>v5(v4);
//指定起始與結束內容創建與初始化
vector<int>v6(v4.begin()+3, v4.end());
迭代器iterator
begin() 返回第一個元素的迭代器
end() 返回最末元素的迭代器
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
訪問元素
v.at(i) //返回vector v指定位置的元素
v[i] //返回vector v指定位置的元素
v.back() //返回最末一個元素
v.front() //返回第一個元素
插入與刪除元素
void push_back( const TYPE &val ); //在Vector最后添加一個元素
void pop_back(); //移除最后一個元素
iterator erase( iterator loc ); //刪除指定loc元素
iterator erase( iterator start, iterator end ); //刪除[start,end)元素
v.push_back(3); //vector最后添加元素3
v.pop_back(); //刪除vector最后一個元素
v.erase(v.begin());//刪除位置為begin的元素
v.erase(v.begin(),v.end());//刪除區間[begin(),end())的元素
insert函數
//在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,
iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入num個值為val的元素
void insert( iterator loc, size_type num, const TYPE &val );
//在指定位置loc前插入區間[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個值為1的元素
v.insert(v.begin(),v1.begin(),v1.end());//在begin()位置插入區間[v1.begin(),v1.end())的元素
deque
是有下標順序容器,它允許在其首尾兩段快速插入及刪除。另外,在 deque 任一端插入或刪除不會非法化指向其余元素的指針或引用。
構造函數
//無參,創建一個空雙向隊列
deque();
//size - 創建一個大小為size的雙向隊列
deque( size_type size );
//num and val - 放置num個val的拷貝到隊列中
deque( size_type num, const TYPE &val );
//from - 從from創建一個內容一樣的雙向隊列
deque( const deque &from );
//start 和 end - 創建一個隊列,保存從start到end的元素
deque( input_iterator start, input_iterator end );
deque<int>d1;//空雙向隊列
deque<int>d2(5);//大小為5,值為0的雙向隊列
deque<int>d3(5,1);//大小為5,值為1的雙向隊列
deque<int>d4(d3);//創建一個與d3相同的雙向隊列
deque<int>d5(d3.begin(),d3.end());
deque<int>d6 = {1,4,6,8};//初始化隊列
迭代器iterator
begin() 返回第一個元素的迭代器
end() 返回最末元素的迭代器
rbegin() 返回尾部的逆迭代器
rend() 返回起始的逆迭代器
訪問元素
d.at(i) //返回指定位置的元素
d[i] //返回指定位置的元素
d.back() //返回最末一個元素
d.front() //返回第一個元素
插入與刪除元素
void push_back( const TYPE &val ); //在最后添加一個元素
void pop_back(); //移除最后一個元素
void push_front( const TYPE &val ); //在頭部加入一個元素
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(); //刪除最后一個元素
d.push_front(1) //首元素添加元素1
d.pop_front(); //刪除首元素
d.erase(d.begin());//刪除位置為begin的元素
d.erase(d.begin(),d.end());//刪除區間[begin(),end())的元素
insert函數
//在位置為pos插入元素val
iterator insert( iterator pos, const TYPE &val );
//在位置為pos插入num個值為val元素
iterator insert( iterator pos, size_type num, const TYPE &val );
//在位置pos插入區間[start,end)
void insert( iterator pos, input_iterator start, input_iterator end );
//在begin位置插入元素1
d.insert(d.begin(),1);
//在begin位置插入5個值為1的元素
d.insert(d.begin(),5,1);
//在begin插入區間[d2.begin(),d2.end())
d.insert(d.begin(),d2.begin(),d2.end());
queue
queue 是STL提供的隊列容器
TYPE &back(); //返回最后一個元素
bool empty(); //如果隊列空則返回真
TYPE &front() 返回第一個元素
TYPE &pop() 刪除第一個元素
void push( const TYPE &val );在末尾加入一個元素
功能就和普通的隊列相同
Priority Queues(優先隊列)
優先隊列類似隊列,但是在這個數據結構中的元素按照一定的斷言排列有序
priority_queue<Type>
priority_queue<Type, Container, Functional>
其中Type 為數據類型, Container 為保存數據的容器,Functional 為元素比較方式。
Container 這里保存的容器一般用vector和deque
priority_queue<int> q; //排序順序默認為降序,也就是創建了大頂堆
priority_queue<int,vector<int>,less<int>> q; //排序順序為升序,創建了小頂堆
優先級隊列,這個容器可以用set來實現。
stact
該容器與現實數據結構stack相同
bool empty() //堆棧為空則返回真
void pop(); //移除棧頂元素
void push( const TYPE &val ); //在棧頂增加元素
size_type size(); //返回棧中元素數目
TYPE &top(); //返回棧頂元素
list
List將元素按順序儲存在鏈表中. 與 vector相比, 它允許快速的插入和刪除,但是隨機訪問卻比較慢
構造函數
list<T> lst; //list采用模板類實現對象的默認構造形式:
list(beg,end); //構造函數將[beg, end)區間中的元素拷貝給本身。
list(n,elem); //構造函數將n個elem拷貝給本身。
list(const list &lst); //拷貝構造函數。
list<int>L; //空的list容器
list<int>L2(5);//大小為5值為0的容器
list<int>L3(5,1);//大小為5值為1的容器
list<int>L4(L3);//用L3創建容器
list<int>L5 = {1,4,6,8,4};//初始化容器
迭代器iterator
iterator begin(); //返回指向第一個元素的迭代器
iterator end() //返回末尾的迭代器
iterator rbegin() //返回指向第一個元素的逆向迭代器
iterator rend() //返回list末尾的逆向迭代器
訪問元素
L.back() //返回最末一個元素
L.front() //返回第一個元素
插入與刪除元素
void push_back( const TYPE &val ); //在最后添加一個元素
void pop_back(); //移除最后一個元素
void push_front( const TYPE &val ); //在頭部加入一個元素
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為判斷元素的依據,遍歷整個鏈表。如果pr返回true則刪除該元素
L.push_back(3); //最后添加元素3
L.pop_back(); //刪除最后一個元素
L.push_front(1) //首元素添加元素1
L.pop_front(); //刪除首元素
L.erase(d.begin());//刪除位置為begin的元素
L.erase(d.begin(),d.end());//刪除區間[begin(),end())的元素
L.remove(1); //刪除元素1
L.remove_if([](int n) { return n > 4; }); //刪除大于4的元素
insert函數
//在位置為pos插入元素val
iterator insert( iterator pos, const TYPE &val );
//在位置為pos插入num個值為val元素
iterator insert( iterator pos, size_type num, const TYPE &val );
//在位置pos插入區間[start,end)
void insert( iterator pos, input_iterator start, input_iterator end );
//在begin位置插入元素1
L.insert(L.begin(),1);
//在begin位置插入5個值為1的元素
L.insert(L.begin(),5,1);
//在begin插入區間[L2.begin(),L2.end())
L.insert(L.begin(),L2.begin(),L2.end());
合并鏈表
merge()合并兩個list,要求兩個list必須有序;
splice()不需要list有序,splice()不復制或移動元素,僅重指向鏈表結點的內部指針
可以用advance調整iterator 的位置
void merge( list &lst ); //合并兩個list必須有序,默認是升序,被合并list會被清空
void merge( list &lst, Comp compfunction ); //合并兩個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區間start與end元素指向pos
L.merge(L2); //將L2合并到L
L.merge(L2,Compare); //將L2合并到L,指定Compare規則
L.splie(L.begin(),L2); //將L2整個list指向L.begin()位置
L.splie(L.begin(),L2,L2.begin()); //從L2的迭代器L2.begin()開始指向L.begin()位置
L.splie(L.begin(),L2,L2.begin(),L2.end()); //將L2的迭代器區間[L2.begin(),L2.end())指向L的迭代器L.begin()位置
set
set容器的底層是由二叉樹構成。set在插入元素時,是不允許插入重復元素的;multiset是允許插入重復元素的。set會自動排序,默認是升序。
構造函數
set中不存在set s(size_type num,T val)。因為set不允許重復元素。
iterator begin(); //返回指向第一個元素的迭代器
iterator end() //返回末尾的迭代器
iterator rbegin() //返回指向第一個元素的逆向迭代器
iterator rend() //返回末尾的逆向迭代器
iterator lower_bound() //返回指向大于(或等于)某值的第一個元素的迭代器
iterator upper_bound() //返回大于某個值元素的迭代器
可以使用set<T,Compare>指定排序規則。
迭代器iterator
iterator begin(); //返回指向第一個元素的迭代器
iterator end() //返回末尾的迭代器
iterator rbegin() //返回指向第一個元素的逆向迭代器
iterator rend() //返回末尾的逆向迭代器
iterator lower_bound() //返回指向大于(或等于)某值的第一個元素的迭代器
iterator upper_bound() //返回大于某個值元素的迭代器
插入與刪除元素
iterator begin(); //返回指向第一個元素的迭代器
iterator end() //返回末尾的迭代器
iterator rbegin() //返回指向第一個元素的逆向迭代器
iterator rend() //返回末尾的逆向迭代器
iterator lower_bound() //返回指向大于(或等于)某值的第一個元素的迭代器
iterator upper_bound() //返回大于某個值元素的迭代器
unordered_set
unordered_set 容器,為“無序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的區別就在于 set 容器會自行對存儲的數據進行排序,而 unordered_set 容器不會
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 是有序鍵值對容器,默認是升序,它的元素的鍵是唯一的。用比較函數 Compare 排序鍵。 map 通常實現為紅黑樹。mutlimap是允許存儲重復元素。
構造函數
set中不存在map s(size_type num,T val)。因為set不允許重復元素。
map<T>m; //采用模板類實現對象的默認構造形式:
map<T>m(const map& ml); //拷貝函數,將s初始化為se一樣
map<T>m(iterator start,iterator end) //將s的初始化為[start,end)區間
map<int>m1;
map<int>m2(m);
map<int>m3(m.begin(),m.end());
可以使用map<T1,T2,Compare>指定排序規則。
迭代器iterator
iterator begin(); //返回指向第一個元素的迭代器
iterator end() //返回末尾的迭代器
iterator rbegin() //返回指向第一個元素的逆向迭代器
iterator rend() //返回末尾的逆向迭代器
iterator lower_bound() //返回指向大于(或等于)某值的第一個元素的迭代器
iterator upper_bound() //返回大于某個值元素的迭代器
插入與刪除元素
iterator insert(const pair &p); //在集合中插入元素
void insert( input_iterator start, input_iterator end );//插入區間[start,end)元素
void erase( iterator i ); //刪除i的元素
void erase( iterator start, iterator end ); //刪除區間[start,end)中的元素
size_type erase( const key_type &key ); //刪除指定元素值
m.insert(make_pair(1,10)); //插入pair(1,10)
m.insert(s2.begin(),s2,end()); //插入區間[begin,end)元素
m.erase(m.begin()); //刪除元素為begin()中的元素
m.erase(m.begin(),m.end()); //刪除區間[begin,end)的元素
m.erase(1); //刪除key為1的pair
find()與count()
//返回一個迭代器指向鍵值為key的元素,如果沒找到就返回指向map尾部的迭代器
iterator find( const KEY_TYPE &key );
//還回map中鍵值等于key的元素的個數。map只會返回0、1,mutlimap會返回值的個數
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的用法基本一直,最大的區別在于:
map的key是有序的,而unordered_map的key為無序。
#include<unordered_map>
int main() {
unordered_map<int, int>m;
m.insert(make_pair(1, 10));
m.insert(make_pair(1, 20));//key相同是不會重復存儲的
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的存儲時按照散列表存儲的,輸出順序與輸入順序是不一定相同的
原文鏈接:https://blog.csdn.net/weixin_45939085/article/details/128608489
相關推薦
- 2022-06-11 golang實現簡單工廠、方法工廠、抽象工廠三種設計模式_Golang
- 2022-07-13 Python中常用序列數據結構
- 2022-09-21 android實現簡單底部導航欄_Android
- 2022-10-08 C語言實現影院管理系統程序設計_C 語言
- 2022-12-09 Android入門之ProgressBar的使用教程_Android
- 2022-05-01 大數據Spark?Sql中日期轉換FROM_UNIXTIME和UNIX_TIMESTAMP的使用_數
- 2022-07-12 springboot整合jasypt加密yml配置文件
- 2022-10-12 C#集合本質之鏈表的用法詳解_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支