C++_vector操作使用

文章目錄

    • 🚀1.1 vector介紹
    • 🚀1.2 vector的初始化
    • 🚀1.3 vector的常用內置函數
    • 🚀1.4 vector的遍歷

🚀1.1 vector介紹

  1. vector是表示可變大小數組的序列容器
  2. 就像數組一樣,vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問,和數組一樣高效。但是又不像數組,它的大小是可以動態改變的,而且它的大小會被容器自動處理。
  3. 本質講,vector使用動態分配數組來存儲它的元素。當新元素插入時候,這個數組需要被重新分配大小為了增加存儲空間。其做法是,分配一個新的數組,然后將全部元素移到這個數組。就時間而言,這是一個相對代價高的任務,所以每當一個新的元素加入到容器的時候,vector并不會每次都重新分配大小
  4. vector分配空間策略:vector會分配一些額外的空間以適應可能的增長,因為存儲空間比實際需要的存儲空間更大。不同的庫采用不同的策略權衡空間的使用和重新分配。但是無論如何,重新分配都應該是對數增長的間隔大小,以至于在末尾插入一個元素的時候是在常數時間的復雜度完成的。
  5. 因此,vector占用了更多的存儲空間,為了獲得管理存儲空間的能力,并且以一種有效的方式動態增長。
  6. 與其它動態序列容器相比(deque, list and forward_list), vector在訪問元素的時候更加高效在末尾添加和刪除元素相對高效。對于其它不在末尾的刪除和插入操作,效率更低。比起list和forward_list統一的迭代器和引用更好

🚀1.2 vector的初始化

vector的庫中包含多種初始化方式:
注意: < >內為vector所儲存的數據類型

??方式1:

//建立一個空vector,儲存int類型
vector<int>ans;

??方式2:

//建立一個儲存10個int類型,每個元素初始化為0的vector
vector<int>ans(10);

??方式3:

vector<int>ans(101);
//拷貝一個vector來初始化
vector<int>ans1(ans);

??方式4:

//通過迭代器,截取一段數組的一部分來初始化
vector<int> ans = {1,2,3,4,5,6,7,8};
string s("HHello Worldd");//ans1 = {2,3,4,5,6,7}  ans2={“Hello World”}
vector<char>ans1(ans.begin()+1, ans.end()-1);
vector<char>ans2(s.begin() + 1, s.end() - 1);

??方式5:

vector<int>ans(101);
//拷貝一個vector
vector<int>ans1(ans);  或者   vector<int>ans1 = ans;

??方式6:

//從一個數組初始化
int a[] = {1,2,3,4,5};
vector<int>ans(a, a + 5); 或者 vector<int>ans ={1,2,3,4,5};

??方式7:初始化二維數組

//初始化10行10列的二維數組,每個元素初始化為0,類型為int
vector<vector<int>>ans(10, vector<int>(10)); 

🚀1.3 vector的常用內置函數

??push_back:尾插

vector<int>ans= {123};
ans.push_back(1);//尾插數據1

??pop_back:尾刪

vector<int>ans= {123};
ans.pop_back();//刪除最后一個數據3

??begin:指向第一個數據的迭代器

vector<int>ans= {123};
cout<< *(ans.begin()); // 輸出1

??end:指向最后一個數據的下一位的迭代器

vector<int>ans= {123};
cout<< *(ans.end()-1); // 輸出3

在這里插入圖片描述

??insert:插入一個數據,第一個參數是位置(類型為迭代器),第二個位置為數據 時間復雜度O(n)

ans.insert(ans.begin() +  pos, val);//在下標pos位置插入val

在這里插入圖片描述

??erase():有兩種用法:第一種刪除單個下標的數據,第二種刪除范圍下標的數據。 時間復雜度O(n)

若只傳入第一個參數(類型為迭代器),只會刪除那個下標的元素,若再傳入第二個參數(類型為迭代器),刪除從第一個迭代器開始,到第二個迭代器前一個的所有元素

vector<int>ans= {123,4,5,6};
ans.erase(ans.begin() + pos);//刪除pos下標的元素ans.erase(ans.begin() + pos1,ans.begin() + pos2);
//刪除pos1下標 到 pos2下標(不包括pos2)的所有元素ans.erase(ans.begin(), ans.end());
//刪除所有元素

??clear :清除所有元素

vector<int>ans= {123,4,5,6};
ans.clear();

??size :返回元素個數

vector<int>ans= {123,4,5,6};
cout<<ans.size(); // 輸出6

??swap :數組交換

vector<int>ans1= {123,4,5,6};
vector<int>ans2;
ans1.swap(ans2);

🚀1.4 vector的遍歷

??方式1:數組遍歷

vector<int>ans1= {123,4,5,6};
for (int i = 0; i < ans.size(); i++)
{cout << ans[i];
}

??方式2:迭代器遍歷

vector<int>ans1= {123,4,5,6};
for (auto it = ans.begin(); it != ans.end();it++)
{cout << *it;
}

??方式3:范圍for遍歷

vector<int>ans1= {123,4,5,6};
for (auto it: ans1)
{cout << *it;
}

本文就到這里,感謝你看到這里!
我知道一些人看文章喜歡靜靜看,不評論,但是他會點贊,這樣的人,帥氣低調有內涵,美麗大方很優雅,明人不說暗話,要你手上的一個點贊!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14314.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL主從復制(docker搭建)

文章目錄 1.MySQL主從復制配置1.主服務器配置1.拉取mysql5.7的鏡像2.啟動一個主mysql&#xff0c;進行端口映射和目錄掛載3.進入/mysql5.7/mysql-master/conf中創建my.cnf并寫入主mysql配置1.進入目錄2.執行命令寫入配置 4.重啟mysql容器&#xff0c;使配置生效5.進入主mysql&a…

python篇-pywinauto使用-持續更新

1- pywinauto 中的uia是什么意思&#xff1f; 在pywinauto庫中&#xff0c;uia指的是UI Automation&#xff0c;這是Windows操作系統提供的一種技術框架&#xff0c;用于實現用戶界面(UI)的自動化測試和輔助功能訪問。UI Automation是微軟從Windows Vista開始引入的核心技術&am…

2024年電工杯高校數學建模競賽(B題) 建模解析| 大學生平衡膳食食譜的優化設計 |小鹿學長帶隊指引全代碼文章與思路

我是鹿鹿學長&#xff0c;就讀于上海交通大學&#xff0c;截至目前已經幫200人完成了建模與思路的構建的處理了&#xff5e; 本篇文章是鹿鹿學長經過深度思考&#xff0c;獨辟蹊徑&#xff0c;實現綜合建模。獨創復雜系統視角&#xff0c;幫助你解決電工杯的難關呀。 本題&…

面試八股之MySQL篇5——主從同步原理篇

&#x1f308;hello&#xff0c;你好鴨&#xff0c;我是Ethan&#xff0c;一名不斷學習的碼農&#xff0c;很高興你能來閱讀。 ??目前博客主要更新Java系列、項目案例、計算機必學四件套等。 &#x1f3c3;人生之義&#xff0c;在于追求&#xff0c;不在成敗&#xff0c;勤通…

IP地址的風險畫像及其應用

在現代互聯網環境中&#xff0c;IP地址不僅是設備在網絡中的唯一標識符&#xff0c;還是分析網絡安全和風險管理的重要工具。IP地址的風險畫像通過分析IP地址的行為和相關數據&#xff0c;揭示潛在的安全威脅&#xff0c;為企業和組織提供有效的風險管理方案。本文將探討IP地址…

齊業成工程行業數字化預算費控方案:編制、執行、數據分析全過程閉環管理

工程建設企業具備項目周期長、業務復雜的特點&#xff0c;預算費控涉及內部管理、項目、客戶、收支等&#xff0c;賬目多、且難控。 在工程企業日常預算費控過程中存在著諸多挑戰&#xff1a; ? 數據核對難&#xff1a;涉及數據多&#xff0c;需多部門協同填寫&#xff0c;需…

人工智能的陰暗面:犯罪分子如何利用 AI 進行欺詐

在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成為推動各行各業生產力和創新的關鍵力量&#xff0c;而一些不法分子也開始探索如何將這些先進的工具用于他們自己的非法目的。從網絡釣魚到深度偽造&#xff0c;再到人肉搜索、越獄服務和身份驗證系統的…

【動態維護樹的直徑】【HBCPC2023】I. Colorful Tree

題目 https://codeforces.com/gym/105139/problem/I 思路 其實相當于是分別求黑色點和白色點所構成的樹的直徑。 當兩個連通塊連在了一起&#xff0c;假設它們的直徑是 ( u 1 , v 1 ) &#xff0c; ( u 2 , v 2 ) (u_1,v_1)&#xff0c;(u_2,v_2) (u1?,v1?)&#xff0c;(u…

【程序填空】三維點坐標平移(增量運算符重載)

題目描述 定義一個三維點Point類&#xff0c;利用友元函數重載""和"--"運算符&#xff0c;并區分這兩種運算符的前置和后置運算。 表示x\y\z坐標都1&#xff0c;--表示x\y\z坐標都-1 請完成以下程序填空 輸入 只有一行輸入&#xff0c;輸入三個整數&a…

Linux運維工程師基礎面試題整理(二)

Linux運維工程師基礎面試題整理(二) 1. 如何配置Linux網絡?請說出3種以上方法?2. 如何查詢某個目錄下的每個文件大小?3. 如何診斷ping不通服務器?4.在Linux中,如何讓一個命令在后臺運行?5. 如何查看Linux系統日志?6. 如何查看磁盤空間情況?7. 如何在Linux中查看和管理…

一個開源的工具類輪子是怎么造出來的

心路歷程 為什么要做 在22年9月的某一天&#xff0c;在公司開需求評審時&#xff0c;接到了一個給PDF、圖片添加水印的需求。做為一個剛工作的CURD程序員&#xff0c;在遇到這些問題時&#xff0c;第一反應是去github上找找有沒有類似的開源框架。但是&#xff0c;出乎我意料…

2024年 電工杯 (B題)大學生數學建模挑戰賽 | 大學生平衡膳食食譜的優化設計 | 數學建模完整代碼解析

DeepVisionary 每日深度學習前沿科技推送&頂會論文&數學建模與科技信息前沿資訊分享&#xff0c;與你一起了解前沿科技知識&#xff01; 本次DeepVisionary帶來的是電工杯的詳細解讀&#xff1a; 完整內容可以在文章末尾全文免費領取&閱讀&#xff01; 問題1&…

快手二面準備【面試準備】

快手二面準備【面試準備】 前言版權快手二面準備秋招一面中的問題實習一面中的問題計算機網絡和操作系統論壇項目登錄注冊ThreadLocal代替session存儲用戶秒殺項目登錄注冊->阿里驗證碼->rpcsession為什么改為token實現&#xff0c;redis存儲用戶信息由binlog的用法->…

Python魔法學院:PySpider篇——網絡世界的探險與征服

Hi&#xff0c;我是阿佑&#xff0c;迎來到Python魔法學院&#xff0c;今天阿佑要帶大家學習的是PySpider篇——一門讓你在網絡世界中探險與征服的魔法課程。從環境搭建到高級功能應用&#xff0c;再到性能優化&#xff0c;每一個章節都是成為數據大師的必經之路&#xff01; 文…

為什么拼命賺錢:窮怕了

我內心深處比較自卑。 從小在農村長大&#xff0c;爸不管媽不愛。 這么說大家沒感覺&#xff0c;從小什么都干&#xff0c;六歲開始做飯&#xff0c;每次開學都會全員大掃除&#xff0c;站在那里腳踩泥土地、眼神呆滯、雙手無處安放、眼神都不敢直視的小伙子就是我&#xff0…

VS Code中使用 Anaconda 環境

在 Visual Studio Code (VS Code) 中使用 Anaconda 環境進行 Python 開發&#xff0c;可以充分利用 Anaconda 提供的包管理和虛擬環境功能&#xff0c;同時享受 VS Code 提供的強大開發工具和調試功能。以下是詳細步驟&#xff1a; 1. 安裝 Visual Studio Code 和 Anaconda 首…

JavaScript Window對象

一、BOM&#xff08;瀏覽器對象模型&#xff09; window對象是一個全局對象&#xff0c;也可以說是JavaScript中的頂級對象。 像document、alert()、console.log()這些都是window的屬性&#xff0c;基本BOM的屬性和方法都是window的。 所有通過var定義在全局作用域中的變量、…

GitLab的原理及應用詳解(四)

本系列文章簡介&#xff1a; 隨著軟件開發的不斷進步和發展&#xff0c;版本控制系統成為了現代軟件開發過程中不可或缺的一部分。而GitLab作為其中一種流行的版本控制工具&#xff0c;在軟件開發領域享有廣泛的應用。GitLab不僅提供了強大的版本控制功能&#xff0c;還集成了項…

四川古力科技抖音小店,創新科技點亮購物新體驗

在這個數字化浪潮洶涌的時代&#xff0c;四川古力科技以其前瞻性的戰略眼光和創新能力&#xff0c;閃耀于抖音小店這片電商新藍海&#xff0c;開啟了未來購物的新紀元。作為一家集技術研發、產品創新、市場營銷于一體的科技型企業&#xff0c;古力科技不僅為消費者帶來了前所未…

idea中顯示git的Local Changes

1. 第一打開idea中的Settings文件 2. 找到Version Contro中的commint 3. 取消勾選應用即可 4. 本地提交就會顯示出來