C++八股 —— vector底層

vector底層為動態數組

  1. 類構成

    • class vector : protected _Vector_base
    • _Vector_base:
      • _M_start:容器元素開始的位置
      • _M_finish:容器元素結束的位置
      • _M_end_of_storage:動態內存最后一個元素的下一個位置
  2. 構造函數

    • 無參構造

      根據性能優先規則,沒有申請動態內存

    • 初始化元素個數的構造

      申請了動態內存,避免多次申請影響性能

  3. 插入元素

    先檢查空間,不夠則申請內存翻倍

    • 插入到最后
    • 插入到非最后:待插入位置之后的元素往后移一位,然后插入
  4. 刪除元素

    刪除元素不會釋放已申請的內存

    • 刪除最后:_M_finish往前移動一位
    • 刪除非最后:待刪除位置之后的元素往前移一位,然后執行“刪除最后”操作
  5. 讀取元素

    返回的是具體元素的引用

    • 操作符[]
    • at():比[]多一步越界檢查操作
  6. 修改元素

    • 不支持直接修改某個位置的元素
    • 通過讀取元素,獲取引用,然后修改
    • 先刪除后插入
  7. 釋放空間

    • swap一個空容器
    • C++ 11:shrink_to_fit 將容器的空間收縮到容器大小。先clear()將容器清空(不會釋放空間),然后收縮空間大小

參考:【C++面試題】vector底層實現原理_嗶哩嗶哩_bilibili


fill和assign
  1. std::fill(算法庫函數)

    • 功能:將指定范圍內的元素逐個賦值為給定值

    • 語法

      #include <algorithm>
      std::fill(iterator begin, iterator end, value);
      
    • 行為

      • 遍歷 [begin, end) 范圍內的元素,將每個元素賦值為 value
      • 不改變容器大小,僅修改已有元素的值。
    • 適用容器:所有支持迭代器的容器(如 vector, array, deque, 原生數組等)。

    • 優點

      • 高效:直接覆蓋現有元素,無需重新分配內存。
      • 靈活性:可局部修改(例如只修改某一部分元素)。
    • 缺點:需要確保目標范圍有效(例如不越界)。

示例

std::vector<int> vec = {1, 2, 3, 4};
std::fill(vec.begin(), vec.end(), 0); // vec → {0, 0, 0, 0}
std::fill(vec.begin() + 1, vec.end() - 1, 5); // vec → {0, 5, 5, 0}
  1. assign(容器成員函數)

    • 功能替換容器的內容,可以指定新元素的數量和值,或從其他容器/迭代器復制數據。

    • 語法

      // 用 n 個 value 替換容器內容
      container.assign(n, value);// 用迭代器范圍 [begin, end) 替換容器內容
      container.assign(begin, end);
      
    • 行為

      • 銷毀原有元素,重新分配內存(可能觸發內存重新申請)。
      • 新內容可以是重復值或來自其他容器。
    • 適用容器:支持動態修改的序列容器(如 vector, deque, list, string)。

    • 優點

      • 簡潔性:一行代碼即可替換整個容器的內容。
      • 靈活性:支持從不同數據源(如另一個容器或初始化列表)賦值。
    • 缺點

      • 潛在性能開銷:若新內容大小與原有內容不同,可能觸發內存重分配。
      • 數據丟失:原有內容被完全覆蓋。

示例

std::vector<int> vec = {1, 2, 3, 4};
vec.assign(3, 10);       // vec → {10, 10, 10}(大小變為 3)
vec.assign({5, 6, 7});   // vec → {5, 6, 7}(用初始化列表替換)
  1. 關鍵區別
特性std::fillassign
作用范圍修改指定范圍內的已有元素替換整個容器的內容
內存操作不改變容器大小,無內存分配可能觸發內存重新分配
性能高效(直接覆蓋)可能低效(若大小變化)
適用場景局部修改或保持容器大小不變時需要完全替換內容或調整大小時
代碼簡潔性需要顯式指定范圍一行代碼替換全部內容
  1. 如何選擇
  • 使用 std::fill
    • 需要保留容器原有結構(如大小不變)。
    • 僅需修改部分或全部元素的值(例如重置為默認值)。
    • 避免內存重分配(對性能敏感的場景)。
  • 使用 assign
    • 需要完全替換容器內容(例如用新數據覆蓋舊數據)。
    • 需要調整容器大小(例如從 n 個元素變為 m 個元素)。
    • 從其他容器或初始化列表快速賦值。

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

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

相關文章

LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ

文章目錄 TLDR;量化分類量化時機量化粒度ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers細粒度硬件感知量化低成本逐層知識蒸餾&#xff08;Layer-by-layer Knowledge Distillation, LKD&#xff09; LLM.int8(): 8-bit Matrix…

SIGIR 2025端到端生成式推薦ETEGRec

文章目錄 1. 背景2. 方法2.1 框架圖2.2 問題定義2.3 Item Tokenizer2.4 Generative Recommender2.5 ??Sequence-Item Alignment2.6 ??Preference-Semantic Alignment2.7 交替優化 3. 總結 現階段 GRM 大多是兩階段的模型&#xff0c;第一階段進行內容理解-行為語義對齊&…

STM32CubeMX安裝及使用分享

說是教程&#xff0c;屬實是不敢當&#xff0c;只是把自己覺得較為正式的方式分享給各位&#xff0c;如有問題請提出大家一起討論。 文章目錄 軟件下載軟件安裝軟件使用開發板工程單片機工程單片機工程創建單片機工程配置界面單片機工程具體配置引腳功能配置系統時鐘配置工程配…

MySQL報錯解決過程

我在調試datagrip的時候&#xff0c;顯示拒絕連接&#xff0c;開始的時候&#xff0c;我以為只是服務沒有開啟&#xff0c;結果到后來在網上搜索各種解決辦法無果后&#xff0c;就選擇卸載&#xff0c;卸載之后安裝新的MySQL 以下就是我的解決過程。 如果只是在使用外置軟件&…

動態規劃-62.不同路徑-力扣(LeetCode)

一、題目解析 機器人只能向下或向左&#xff0c;要從Start位置到Finish位置。 二、算法原理 1.狀態表示 我們要求到Finish位置一共有多少種方法&#xff0c;記Finish為[i,j]&#xff0c;此時dp[i,j]表示&#xff1a;到[i,j]位置時&#xff0c;一共有多少種方法&#xff0c;滿…

Qt開發:項目視圖(Item Views)的介紹和使用

文章目錄 一、清單視圖&#xff08;List View&#xff09;1.1 基本概念1.2 使用示例&#xff08;文字列表&#xff09;1.3 圖標文字&#xff08;圖標模式&#xff09;1.4 常用設置1.5 完整示例 二、樹視圖&#xff08;Tree View&#xff09;2.1 基本概念2.2 常用類簡介2.3 快速…

GoWeb開發(基礎)

Go&#xff08;Golang&#xff09;是一種高效、簡潔的編程語言&#xff0c;特別適合Web開發。以下是詳細的Go Web開發指南&#xff0c;涵蓋從基礎到進階的內容。 --- 一、Go Web開發基礎 1. 標準庫 net/http Go 內置 net/http 包&#xff0c;支持快速構建 Web 服務。 - 基本示…

GSENSE2020BSI sCMOS科學級相機主要參數及應用場景

GSENSE2020BSI sCMOS科學級相機是一款面向寬光譜成像需求的高性能科學成像設備&#xff0c;結合了背照式&#xff08;Back-Side Illuminated, BSI&#xff09;CMOS技術與先進信號處理算法&#xff0c;適用于天文觀測、生物醫學成像、工業檢測等領域。以下是其核心特點及技術細節…

【日擼 Java 三百行】Day 9(While語句)

目錄 Day 9&#xff1a;While 語句的基本使用方法 一、基礎知識及案例分析 二、代碼及測試 拓展&#xff1a;流程控制語句專題補充 小結 Day 9&#xff1a;While 語句的基本使用方法 Task&#xff1a; while 語句本質上比 for 更基礎, 因此可以替代后者. 但 for 在很多時候…

React 第三十七節 Router 中 useOutlet Hook的使用介紹以及注意事項

React Router 中的 useOutlet 是 v6 版本新增的 Hook&#xff0c;用于在父路由組件中訪問當前嵌套的子路由元素。它提供了比 <Outlet> 組件更靈活的控制方式&#xff0c;適合需要根據子路由狀態進行動態處理的場景。 一、useOutlet的基本用法 import { useOutlet } fro…

TDengine 在智慧油田領域的應用

簡介 智慧油田&#xff0c;亦稱為數字油田或智能油田&#xff0c;是一種采用尖端信息技術與先進裝備的現代油田開發模式。該模式通過實時更新油氣田層析圖及動態生產數據&#xff0c;顯著提高了油氣田的開發效率與經濟價值。 信息技術在此領域發揮著至關重要的作用&#xff0…

關于AI 大數據模型的基礎知識 雜記

一、LM Studio LM Studio下載地址&#xff1a;LM Studio - Discover, download, and run local LLMshttps://lmstudio.ai/LM Studio是使用electron架構&#xff0c;引用的llama.cpp庫。 下載后的模型存儲于 /User/Admin/.lmstudio/models中。 二、llama.cpp庫下載地址 llam…

2025數維杯數學建模競賽B題完整參考論文(共38頁)(含模型、代碼、數據)

2025數維杯數學建模競賽B題完整參考論文 目錄 摘要 一、問題重述 二、問題分析 三、模型假設 四、定義與符號說明 五、 模型建立與求解 5.1問題1 5.1.1問題1思路分析 5.1.2問題1模型建立 5.1.3問題1求解結果 5.2問題2 5.2.1問題2思路分析 5.2.2問題2…

利用GPT實現油猴腳本—網頁滾動(優化版)

在瀏覽網頁的時候&#xff0c;發現有的網頁沒有直達最前這樣的功能&#xff0c;所有心血來潮利用ChatGPT寫了一個油猴腳本以實現此功能&#xff0c;在網站上出現一個可以自由拖動的滑塊。 聲明&#xff1a;引用或二創需注明出處。 如圖&#xff1a; 點擊即可直達當前網頁最前、…

MySQL基礎關鍵_013_常用 DBA 命令

目 錄 一、MySQL 用戶信息存儲位置 二、新建用戶 1.創建本地用戶 2.創建外網用戶 三、用戶授權 1.說明 2.實例 四、撤銷授權 五、修改用戶密碼 六、修改用戶名、主機名/IP地址 七、刪除用戶 八、數據備份 1.導出數據 2.導入數據 &#xff08;1&#xff09;方式…

計算機視覺與深度學習 | 圖像匹配算法綜述

圖像匹配算法綜述 圖像匹配 圖像匹配算法綜述一、算法分類二、經典算法原理與公式1. **SIFT (Scale-Invariant Feature Transform)**2. **ORB (Oriented FAST and Rotated BRIEF)**3. **模板匹配(歸一化互相關,NCC)**4. **SuperPoint(深度學習)**三、代碼示例1. **SIFT 特…

切比雪夫不等式詳解

切比雪夫不等式詳解 一、引言 切比雪夫不等式&#xff08;Chebyshev’s Inequality&#xff09;是概率論和統計學中最重要的基本定理之一&#xff0c;由俄國數學家切比雪夫&#xff08;P. L. Chebyshev&#xff0c;1821-1894&#xff09;提出。它為我們提供了一個強大工具&am…

霸王茶姬微信小程序自動化簽到系統完整實現解析

霸王茶姬微信小程序自動化簽到系統完整實現解析 技術棧&#xff1a;Node.js 微信小程序API MD5動態簽名 一、腳本全景架構 功能模塊圖 #mermaid-svg-0vx5W2xo0IZWn6mH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

氣動帶刮刀硬密封固定式對夾球閥:專為高粘度、強腐蝕性介質設計的工業解決方案-耀圣

氣動帶刮刀硬密封固定式對夾球閥&#xff1a;專為高粘度、強腐蝕性介質設計的工業解決方案 在石油化工、鋰電材料、污水處理等高難度工況中&#xff0c;帶顆粒的高粘度介質、料漿及強腐蝕性流體對閥門的性能提出了嚴苛要求。 氣動帶刮刀硬密封固定式對夾球閥憑借其獨特的結構…

Filecoin存儲管理:如何停止Lotus向特定存儲路徑寫入新扇區數據

Filecoin存儲管理&#xff1a;如何停止Lotus向特定存儲路徑寫入新扇區數據 引言背景問題場景解決方案步驟1&#xff1a;修改sectorstore.json文件步驟2&#xff1a;重新加載存儲配置步驟3&#xff1a;驗證更改 技術原理替代方案最佳實踐結論 引言 在Filecoin挖礦過程中&#x…