Vector和list

一、Vector和list的區別——從“它們是什么”到“區別在哪兒”

1. 它們是什么?

  • Vector:類似于一排排整齊的書架(數組),存放元素時,元素排成一條線,連續存儲。可以很快通過編號(索引)找到任何一項。

  • List:像一串珠子,每個珠子知道前后兩個珠子(通過指針連接),存儲位置不連續。有兩種常用鏈表:單鏈表和雙鏈表,雙鏈表每個節點都知道前后兩個節點。

2. 它們的主要差別

比較點VectorList
存儲方式連續內存(數組式)非連續(鏈式)
訪問元素支持隨機訪問(用下標直接取)需要遍歷,逐個走鏈找到
插入/刪除(尾部)快(攤銷時間O(1))快(指針操作,無移動元素)
中間插入/刪除復雜(需要移動大量元素,時間O(n))方便(只需調整鏈表指針,時間O(1))
內存使用占用連續空間,偶爾會需要重新“擴容”多占用空間(存指針)
迭代速度快(緩存友好,占用連續內存)相對慢(節點散布內存,緩存效率低)

二、實際工作中的應用場景——什么時候用Vector,什么時候用list?

場景一:你要頻繁隨機訪問元素——用Vector

  • 比如存儲一組數據,之后可能會多次訪問(查找、排序)

場景二:你需要在中間插入或刪除元素——用List

  • 比如維護一個任務隊列,任務需要頻繁插入到中間或刪除, 或是在鏈表頭尾操作

場景三:尾部頻繁插入刪除(比如維護動態數組),用Vector

場景四:需要穩定的元素存儲,不頻繁改變結構,容器大小變化不大,用Vector


三、迭代器會失效的情況——擦亮眼睛,避免“坑”!

1. 什么是迭代器?

  • 就像指針一樣的東西,用來看“容器”里的元素。比如auto it = vec.begin();,用it可以遍歷所有元素。

2. 什么時候迭代器會失效?

Vector的情況
  • push_back
    • 增加元素可能會導致容器重新分配(擴容)
    • 這時候所有原有的迭代器都“作廢”了(指向的地址變了)
  • erase(刪除元素)
    • 刪除元素后,除非用返回值重啟迭代器,否則原迭代器會失效
  • resize(調整大小)
    • 改變容器大小也可能導致迭代器失效
List的情況
  • 插入和刪除操作
    • 不會影響其他迭代器,只要你不刪除它們指向的元素,迭代器不會失效

3. 小結——什么情況下失效?

容器類型會導致迭代器失效的操作示例
Vectorpush_back()(擴容時),erase()resize()添加元素導致重分配,刪除某元素后繼續用舊迭代器
List一般情況下不會失效,只要不刪除迭代器指向的元素插入、刪除元素不會使其他迭代器失效

四、通俗點的理解——比喻和總結

比喻:搬家和串珠

  • Vector:就像把所有房子(元素)堆在一排(連續內存)里。搬家(擴容)時,可能要找個更大的車(新空間),搬出來所有房子(大量移動元素),舊的地址都不能用了(迭代器失效)

  • List:像一串串珠子,每個珠子用線串起來(指針連接)。插入或刪除珠子,只要調轉指針就行,不會影響其他珠子。

小結一句話

  • Vector:“快、連續、隨機訪問”——適合“讀多寫少、以訪問為主”的場景,但擴容時可能會“搬家”,導致迭器失效。
  • List:”鏈式、插入刪除快“——適合“頻繁插入刪除、順序存儲不變”的場景,不會輕易導致迭代器失效,只要注意不要刪除你關心的珠子。

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

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

相關文章

VCS X-PROP建模以及在方針中的應用

VCS X-PROP建模以及在方針中的應用 摘要:VCS X-Prop(X-Propagation)是 Synopsys VCS 仿真工具中的一種高級功能,用于增強 X 態(未知態)和 Z 態(高阻態)在 RTL 仿真中的建模和傳播能力…

HPE ProLiant DL360 Gen11 服務器,配置 RAID 5 教程!

今天的任務,是幫客戶的一臺HPE ProLiant DL360 Gen11 服務器,配置RAID 5。依然是按照我的個人傳統習慣,順便做一個教程,分享給有需要的粉絲們。如果你在實際操作中,遇到了什么問題,歡迎在評論區留言&#x…

PyTorch深度神經網絡(前饋、卷積神經網絡)

文章目錄 神經網絡概述神經元模型多層感知機前饋神經網絡網絡拓撲結構數學表示基本傳播公式符號說明整體函數視角 卷積神經網絡卷積神經網絡發展簡史第一代(1943-1980)第二代(1985-2006)第三代(2006-至今)快…

三軸云臺之控制算法協同技術篇

三軸云臺的控制算法協同技術是確保云臺在復雜動態環境下實現高精度、高穩定性運動控制的核心,其技術體系涵蓋多傳感器融合、多算法協同以及多目標優化三個關鍵維度。以下從技術架構與實現路徑展開分析: 一、多傳感器融合:構建環境感知基礎 三…

Adobe DC 2025安裝教程

一.軟件下載 點此下載 二.軟件安裝

[Java實戰]Spring Boot 整合 Freemarker (十一)

[Java實戰]Spring Boot 整合 Freemarker (十一) 引言 Apache FreeMarker 作為一款高性能的模板引擎,憑借其簡潔語法、卓越性能和靈活擴展性,在 Java Web 開發中占據重要地位。結合 Spring Boot 的自動化配置能力,開發者能快速構建動態頁面、…

DeepSeek:開啟能源領域智能化變革新時代

目錄 一、DeepSeek 與能源領域變革的邂逅1.1 DeepSeek 在人工智能領域的地位與特點1.2 能源行業面臨的挑戰與變革需求1.3 DeepSeek 在能源領域應用的重要性和意義 二、能源政策解讀與科普新助手2.1 能源政策解讀的深度變革2.2 能源科普的創新使者 三、能源項目可行性分析新利器…

uniapp設置 overflow:auto;右邊不顯示滾動條的問題

設置了overflow:auto;或者其它overflow的屬性不顯示滾動條是因為在uniapp中默認隱藏了滾動條 解決方法: //強制顯示滾動條 ::-webkit-scrollbar {width: 8px !important;background: #ccc !important;display: block !important;}//設置滾動條顏色.cu-…

hyper-v安裝ubuntu后時磁盤空間擴容

使用hyper-v創建虛擬機Ubuntu 22.04,直接使用的是磁盤鏡像,原磁盤空間只有12GB,明顯不夠用呀,現在想要擴展到50GB,準備開始。 1、先關閉Ubuntu,再hyper-v管理器中調整磁盤容量到50GB 2、進入虛擬機 3、準備…

Prometheus 的介紹與部署(入門)

一、什么是Prometheus; 1.介紹 Prometheus 是一個功能強大的監控工具,適用于各種環境。通過簡單的安裝和配置,可以快速實現對系統和服務的監控。無論是單機環境、容器化環境還是 Kubernetes 集群,Prometheus 都能提供靈活…

Angular 知識框架

一、Angular 基礎 1. Angular 簡介 Angular 是什么? 基于 TypeScript 的前端框架(Google 維護)。 適用于構建單頁應用(SPA)。 核心特性 組件化架構 雙向數據綁定 依賴注入(DI) 模塊化設計…

注解和 XML 兩種方式有什么區別?

注解和 XML 是兩種常見的配置方式(尤其在 Java 開發中,如 Spring 框架),它們的主要區別體現在配置方式、代碼耦合性、可讀性、維護性等方面。以下是兩者的對比: 1. 配置方式 注解(Annotation) 在…

Python爬蟲實戰:研究攔截器,實現逆向解密

1. 案例背景與研究目標 1.1 研究背景 在數字化時代,網絡數據成為重要資源。許多網站通過加密技術保護數據傳輸,如電商平臺的價格信息常以加密形式存在。爬蟲技術與逆向工程的結合,為合法獲取和分析此類數據提供了解決方案。 1.2 研究目標 開發完整的 Python 爬蟲系統,實現…

Math工具類全面指南

Math工具類全面指南 前言一、Math 類的基礎特性1.1 類的聲明與常量1.2 數據類型支持 二、基礎算術運算2.1 絕對值運算2.2 取整運算2.2.1 floor():向下取整2.2.2 ceil():向上取整2.2.3 round():四舍五入取整 2.3 最大值與最小值 三、三角函數與…

嵌入式C語言中指針的不同類型及其特點分析

在 C 語言中,指針的類型主要可以分為以下幾類: 1.1 基本類型指針 基本類型指針是指指向基礎數據類型的指針,通常用于存儲變量的地址。它們的類型與指向的變量類型相同。常見的基本類型指針包括: 整型指針:int *p,p是一個指向整型數據的指針。字符型指針:char *p,p是…

gd32e230c8t6 keil6工程模板

下載固件gd32e230c8t6固件官方下載(需登錄) 或 藍奏云 新建一個文件夾,把固件壓縮包里的里的Firmware和Template拖進去 keil新建gd32e230c8工程 必須勾選CMSIS-CORE 新建一個文件夾,雙擊任意改名 點擊manage project it…

SQL看最多的數據,但想從小到大排列看趨勢

SQL 查詢:從 test 表中獲取本月的數據,并對數量最多的前10個流程按數量升序排序 假設表結構 test 表包含請求信息。workflow_base 包含流程的基本信息。 CREATE TABLE test (requestid INT, -- 請求IDworkflowid INT, -- 流程IDcurr…

WebGL知識框架

一、WebGL 基礎概念 1. WebGL 簡介 是什么? 基于 OpenGL ES 的瀏覽器 3D 圖形 API,直接操作 GPU 渲染。 核心特點 底層、高性能、需手動控制渲染管線。 依賴 JavaScript 和 GLSL(著色器語言)。 與 Three.js 的關系 Three.js…

LabVIEW電渦流傳感器自動校準系統

在工業生產中,尤其是大型旋轉機械的運行監測環節,電渦流傳感器的精準校準極為關鍵。傳統手動校準方式存在諸多弊端,如人工參與度高、操作重復、效率低下等,難以滿足現代工業快速發展的需求。基于 LabVIEW 開發的電渦流傳感器自動校…

HCIP-BGP綜合實驗

一:拓撲圖 二:需求分析 1,AS1存在兩個環回,一個地址為192.168.1.0/24該地址不能在任何協議中宣告,AS3中存在倆個環回,一個地址為192.168.2.0/24該地址不能在任何協議中宣告,最終要求這兩個環回…