網站首頁 編程語言 正文
引言
之前學了字符串,字符,數字這些類型,字符串可以看出包含多個字符的序列,那么包含多個數字的序列該是啥,包含其他類型的呢,c++當中滿足這個需求是vector,我們一起來看看吧。
Vector
標準庫類型vector表述對象的集合,可以看成一個存放其他對象的容器,但是這里要注意的是同一個vector集合當中智能容納一個類型,容器里面的元素都有一一對應的索引,可以通過索引訪問元素。當然,vector是標準庫類型,使用需要使用加載,代碼如下:
#include <iostream>
#include <vector>
int main(){
using namespace std;
vector<int> vec01;
vector<int> vec02(4);
vector<int> vec03(4, 10);
vector<int> vec04(vec04.begin(),vec04.end());
return 0;
}
當然這里用到了vector的的一些方法,begin,end,這些會在后面再聊聊。
模板與實例化
上面是代碼層面的一個簡單了解,接下來聊聊發生了什么?
這里首先要明確一個點,vector不是一個對象,而是創建對象的一個配置,可以稱為模板,而vector是類模板,當然也有函數模板,具體來看模板的話,首先要知道,我們再開發的過程當中可能用到函數,可能用到類,通常情況下需要先定義,再使用,但是有沒有可能動態的去聲明一個類呢,比如:
vector <int> vec01; //定義一個數字類型的容器
vector <string> veco2; //定義一個字符串類型的容器
這種情況下,兩行代碼用的都是vector,但是一個創建的是數字容器,一個創建的是string容器,那么vector的作用就不是一個對象,而是定義一個對象。至于int vec01,string vec02這些都是他定義一個對象過程當中的配置,那么把這樣的東西叫做模板(有點類型Python當中的元類,嘿嘿嘿,好久沒有更新Python的知識點了,差點忘記自己是一個Python開發。)。
而通過模板,提供配置,生成具體對象的過程,我們稱為實例化的過程,個人理解就是通過vector的一個規則,生成一個具體實實在在存在的容器的過程。
性能
好吧,往深處聊聊,我們看一下vector的性能,這些小白基本的小伙伴一定要以理解為主:
vector作為一種容器有點類似數組,但它的大小可以動態改變,所以可以稱它位動態數組。
和數組一樣,vector的元素在內存中連續排列,那么就可以通過指針的偏移來獲取vector中的元素,讀取效率會很高。
但是完事兒由利必有弊,連續再查詢上是由優勢的,但是如果要插入元素的話,尤其是中間插入,整個vector的size變大,在內存中就需要重新分配空間,常規的做法是直接申請一個新的array,并將所有元素拷貝過去;但這么做的話,無疑太浪費時間,因此vector采用的做法是:vector會分配額外的空間,以適應size的動態增長。因此,包含同樣數量元素的vector和數組相比,占用的空間會更大。
轉折一下,在vector最后增加或者刪除一個元素,消耗的時間是一個常數值,與vector的size無關。
與其他容器相比,vector在獲取元素和對最后一個元素的操作效率上更高;
但對于中間元素的操作,性能則相對較差。
原文鏈接:https://juejin.cn/post/7175513413140316216
相關推薦
- 2022-05-22 Python學習之os包使用教程詳解_python
- 2022-07-10 詳解HashSet并發修改異常
- 2022-10-04 python?Dataframe?合并與去重詳情_python
- 2022-07-25 C#中Linq的入門教程_C#教程
- 2022-10-08 C#中LINQ的Select與SelectMany函數使用_C#教程
- 2022-08-27 前端變量函數命名規則總結_基礎知識
- 2022-07-04 圖神經網絡GNN算法基本原理詳解_python
- 2022-07-16 結構體通過成員變量獲取主結構體地址(struct)
- 最近更新
-
- 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同步修改后的遠程分支