網站首頁 編程語言 正文
一、Vector的基礎函數(shù)
之前有學習過 vector、set、map等容器,都是需要什么搜什么,沒有詳細的了解其中的內容。最近在看 STL 的相關內容,就順手整理一些基礎性內容,避免以后遇到的時候再臨時抱佛腳。
1. 構造函數(shù)
vector<T> v; ? ? //創(chuàng)建一個空的vector
vector<T> v(int nSize, const t& t); ? ? //創(chuàng)建一個vector,元素個數(shù)為nSize,元素值均為t
vector<T> v(int nSize); ? ? //創(chuàng)建一個vector,元素個數(shù)為nSize
vector<T> v(const vector&); ? ? //復制構造函數(shù)
vector<T> v = vector(begin,end); ? ? //復制[begin,end]范圍內另一個數(shù)組的元素到 v中
2. 增加元素
v.push_back(const T& x); ? ? //在vector尾部增加一個元素x
v.insert(iterator it, const T& x); ? ? //在vector中迭代器指向的元素前插入一個元素x
v.insert(iterator it, int n,const T& x); ? ? //在vector中迭代器指向的元素前插入n個相同的元素x
v.insert(iterator it,const_iterator first,const_iterator last); ? ? //在vector中迭代器指向的元素前插入另一個相同類型vector中[first,last]間的元素
3. 刪除元素
v.erase(iterator it); ? ? //刪除vector中迭代器指向的元素
v.erase(iterator first, iterator last); ? ? //刪除vector中[first,last)的元素
v.pop_back(); ? ? //刪除vector中的最后一個元素
v.clear(); ? ? //清空向量中的所有元素
4. 遍歷vector
v.at(int nPos); ? ? //返回nPos位置元素
v.front(); ? ? //返回vector的首元素
v.back(); ? ? //返回vector的尾元素
v.begin(); ? ? //返回指向第一個元素的迭代器
v.end(); ? ? //返回指向最后一個元素下一位置的迭代器
v.rbegin(); ? ? //反向迭代器,指向最后一個元素
v.rend(); ? ? //反向迭代器,指向第一個元素的前一個位置
5. 判斷函數(shù)
v.empty(); ? ? //判斷vector是否為空
6. 大小函數(shù)
v.size(); ? ? //返回vector中元素個數(shù)
v.capacity(); ? ? //返回當前vector中所能容納的最大元素個數(shù)
v.max_size(); ? ? //返回當前vector最大可允許的元素數(shù)量個數(shù)
7. 其他函數(shù)
v.swap(vector& v2); ? ? //交換兩個同類型的vector
v.assign(int n,const T& t); ? ? //設置vector中第n個元素的值為t
v.assign(const_iterator first,const_iterator last); ? ? //vector中[first,last)中的元素設置成當前vector元素
二、deque的介紹及使用
deque(double ended queue) 作為雙端隊列,不論在尾部或頭部插入元素,都十分便捷。而在中間插入元素會比較費時,因為必須移動中間其他的元素。
雙端隊列是一種隨機訪問的數(shù)據(jù)類型,提供了在序列兩端快速插入和刪除的功能,它可以在需要的時候改變自身大小,完成了標準 C++ 數(shù)據(jù)結構中隊列的所有功能。
三、deque 和 vector的差別
- deque 則是一種雙向開口的連續(xù)線性空間,vector是單向開口的連續(xù)線性空間。
- deque 對象在隊列的兩端插入和刪除元素比較高效,vector 在序列末尾插入和刪除元素比較高效。
- deque 允許在常數(shù)時間內在序列頭部進行元素的插入和刪除操作,并且 deque 沒有所有的 capacity() 觀念,它是動態(tài)地以分段連續(xù)空間組合而成,隨時可以增加一段新的空間并鏈接起來。vector會因舊空間不足而重新配置一塊更大空間,然后復制元素,再釋放舊空間,即空間預留機制。
雖然 deque 也提供 Random Access Iterator,但它的迭代器并不是普通的指針,復雜度較高。因此除非必要,應盡可能選擇使用 vector 而非 deque。對 deque 的排序操作,可以先完整復制到一個 vector 中,使用 STL 中的排序操作對 vector 排序后,再復制回 deque。
deque 通常由一些獨立的區(qū)塊組成,第一個區(qū)塊朝某方向擴展,最后一個區(qū)塊朝另一方向擴展。它允許較為快速地隨機訪問,但不像 vector 一樣把所有對象保存在一個連續(xù)的內存塊,而是多個連續(xù)的內存塊,并且在一個映射結構中保存對這些塊以及順序的跟蹤。
1、構造函數(shù)
#include<deque>
deque<type> deq; ? ? ? ? ? ?//聲明一個元素類型為 type 的雙端隊列 deq
deque<type> deq(nSize); ? ? ? ? ? ?//聲明含有 nSize 個默認初始化元素的 deq
deque<type> deq(nSize, value) ? ? ? ? ? ?//聲明含有 nSize 個值為 value 的元素的deq
deque<type> deq(MyDeque); ? ? ? ? ? ?//復制MyDeque到deq
deque<type> deq(first, last); ? ? ? ? ? ?//使用迭代器first,last范圍內的元素初始化deq
2、常用成員函數(shù)
deq[nPos]; ? ? ? ? ? ?//訪問雙向序列中 nPos 位置上的元素
deq.front(); ? ? ? ? ? ?//返回第一個元素
deq.back(); ? ? ? ? ? ?//返回最后一個元素
deq.push_front(x); ? ? ? ? ? ?//把元素 x 插入到 deq 的頭部
deq.pop_front(); ? ? ? ? ? ?//彈出 deq 的第一個元素
deq.push_back(x); ? ? ? ? ? ?//把元素 x 插入到 deq 的尾部
deq.pop_back(); ? ? ? ? ? ?//彈出 deq 的最后一個元素
3、特點
- 支持使用 [] 和 at() 進行隨機訪問,但性能沒有 vector 好;
- 可以在內部進行插入和刪除操作,但性能沒有 list 好;
- deque 的元素存取和迭代器操作會稍微較慢,因為內部結構中多一個間接過程;
- deque 的迭代器是一種特殊的智能指針,能夠在不同區(qū)塊之間跳轉;
- deque 不支持對容量和內存分配時機的控制。
- deque 的內存重分配優(yōu)于 vector,因為其內部不需要復制所有元素。
- deque 的內存塊不再被使用時,會被釋放。但是該機制由實際操作版本控制是否執(zhí)行。
四、STL中容器的通用操作函數(shù)
最近在學習 C++ 中 STL 標準庫中的東西,關于list、vector、deque、set、map等容器的操作函數(shù)中存在一些通用函數(shù),整理出來一起學習。
1. 構造函數(shù)
ContType<T> C; ? ? ? ? ? ?//創(chuàng)建一個空容器
ContType<T> C(nSIze); ? ? ? ?//創(chuàng)建一個含有 nSize 個默認元素的容器
ContType<T> C(nSize, Value); ? ?//創(chuàng)建一個含有 nSize 個值為 Value 的元素的容器
ContType<T> C1(C2); ?//復制一個同類型容器
ContType<T> C(first, last); ? ? ?//復制[first,last)范圍內的元素到新容器中
C.~ContType(); ? ? ? ? ? ?//刪除所有元素,釋放內存
2. 判斷函數(shù)
C.empty(); ? ? ? ? ? ?//判斷容器是否為空
C1==C2; ? ? ? ? ? ?//判斷c1是否等于c2
3. 訪問函數(shù)
lst.get_allocator(); ? ? ? ?//返回容器的內存模型
C.begin(); ? ? ? ?//正向迭代器,指向第一個元素
C.end(); ? ? ? ? //正向迭代器,指向最后一個元素的下一位置
C.rbegin(); ? ? //反向迭代器,指向最后一個元素
C.rend(); ? ? ?//反向迭代器,指向第一個元素的前一個位置
C.size(); ? ? ?//返回容器當前存儲的元素數(shù)量
C.max_size(); ?//返回容器能容納的最大元素數(shù)量
4. 賦值函數(shù)
C1=C2;//將c2的值賦給c1
//swap()交換函數(shù)
C1.swap(C2);//交換c1和c2的數(shù)據(jù)
Swap(C1,C2);//同上
//assign()賦值函數(shù)
C.assign(size_type nSize, const_type Value); ? ? ? ?//將list中元素替換為 nSize 個值為 Value 的元素
C.assign(iterator first,iterator last); ? ? ? ?//將[first,last)中的元素復制到當前容器中
C.assign(ContType<T> &C2); ? ? ? ? ? //將另一個容器中的元素復制到當前容器中
5. 操作函數(shù)
C.clear();//清空容器
//insert()插入元素
C.insert(iterator iter, const_type Value);//在 iter 指向的位置插入值為 Value的元素
C.insert(iterator iter,size_type num, const_type &Value);//在 iter 指向的位置插入 num 個值為 Value的元素
C.insert(iterator iter,iterator fisrt,last);//在 iter 指向的位置插入[first,end)區(qū)間內的所有元素
//erase()刪除元素
C.erase(nPos,nSize);//刪除從下標 nPos 開始的 nSize 個元素
C.erase(iterstor iter);//刪除該迭代器指向的元素
C.erase(iterator first,iterator lase);//刪除[first,last)區(qū)間的元素
//vector、deque、list
C.front(); ? ? ? ?//返回第一個元素
C.back(); ? ? ? ?//返回最后一個元素
C.resize(); ? ? ? ?//改變list的大小
//deque、list
C.pop_front(); ? ? ? ?//刪除第一個元素
C.push_front(Value); ? ? ? ?//在容器頭部添加一個元素Value
//vector、deque、list
C.front(); ? ? ? ? ? ? ? //返回第一個元素
C.back(); ? ? ? ? ? ? ? //返回最后一個元素
C.resize(); ? ? ? ? ? ? //改變list的大小
C.pop_back(); ? ? ? ? ? //刪除最后一個元素
C.push_back(Value); ? ? //在容器末尾添加一個元素Value
//vector、list
C.reverse(); ? ? ? ?//把list中的元素反轉
原文鏈接:https://blog.csdn.net/qq_33021529/article/details/123973349
相關推薦
- 2022-04-09 Linux普通用戶使用sudo顯示權限不足,admin is not in the sudoers
- 2022-08-29 .NET實現(xiàn)API版本控制_實用技巧
- 2022-05-08 Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查_實用技巧
- 2022-09-18 jenkins配置golang?代碼工程自動發(fā)布的實現(xiàn)方法_Golang
- 2022-03-26 C語言關于時間復雜度詳解_C 語言
- 2022-04-12 Http 請求常見狀態(tài)碼報錯(200/404/500)
- 2022-05-05 C#?模式匹配完全指南_C#教程
- 2022-06-04 C#復雜XML反序列化為實體對象兩種方式小結_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支