欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++學(xué)習(xí)筆記std::vector底層原理及擴(kuò)容

 更新時間:2023年10月26日 11:22:33   作者:Totn  
這篇文章主要為大家介紹了C++學(xué)習(xí)之std::vector底層原理及擴(kuò)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

std::vector

std::vector是C++標(biāo)準(zhǔn)庫中的一個容器,它提供了動態(tài)數(shù)組的功能。它的底層實現(xiàn)是通過連續(xù)的內(nèi)存塊來存儲元素,這使得它能夠在O(1)的時間復(fù)雜度下進(jìn)行隨機(jī)訪問。

當(dāng)創(chuàng)建一個std::vector對象時,它會分配一塊初始大小的內(nèi)存空間來存儲元素。這個初始大小可以通過構(gòu)造函數(shù)的參數(shù)指定,如果沒有指定,默認(rèn)為0。std::vector還會維護(hù)兩個重要的變量:sizecapacity。size表示當(dāng)前已存儲元素的數(shù)量,而capacity表示當(dāng)前分配的內(nèi)存空間的大小。

當(dāng)我們向std::vector中添加元素時,它會首先檢查是否有足夠的容量來存儲新的元素。如果當(dāng)前容量不足,std::vector就需要進(jìn)行擴(kuò)容操作。

std::vector的擴(kuò)容機(jī)制是通過重新分配內(nèi)存來實現(xiàn)的。當(dāng)容量不足時,std::vector會分配一個更大的內(nèi)存塊,并將原來的元素復(fù)制到新的內(nèi)存中。通常,新的容量會比原來的容量大一些,以便減少頻繁的擴(kuò)容操作。具體來說,std::vector通常會將容量擴(kuò)大為原來的兩倍,但這并不是絕對的,具體實現(xiàn)可能會有所不同。

在進(jìn)行內(nèi)存重新分配時,std::vector會調(diào)用元素類型的拷貝構(gòu)造函數(shù)來復(fù)制元素。如果元素類型沒有提供拷貝構(gòu)造函數(shù),則無法使用std::vector存儲該類型的對象。

一旦完成內(nèi)存的重新分配和元素的復(fù)制,std::vector會釋放原來的內(nèi)存,并更新sizecapacity的值。這樣,我們就可以繼續(xù)向std::vector中添加新的元素了。

擴(kuò)容

下面是一個簡單的例子,演示了std::vector的擴(kuò)容操作:

#include <iostream>
#include <vector>
int main() {
  std::vector<int> v;
  std::cout << "Capacity: " << v.capacity() << std::endl; // 輸出:Capacity: 0
  for (int i = 0; i < 10; i++) {
    v.push_back(i);
    std::cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << std::endl;
  }
  return 0;
}

需要注意的是,由于重新分配內(nèi)存和元素復(fù)制的開銷,std::vector的擴(kuò)容操作可能會導(dǎo)致性能損失。因此,為了避免頻繁的擴(kuò)容操作,我們可以通過預(yù)先設(shè)置std::vector的初始容量來提高性能。

總結(jié)

std::vector的底層原理是通過連續(xù)的內(nèi)存塊來存儲元素,它的擴(kuò)容機(jī)制是通過重新分配內(nèi)存和元素復(fù)制來實現(xiàn)的。

以上就是C++學(xué)習(xí)筆記std::vector底層原理及擴(kuò)容的詳細(xì)內(nèi)容,更多關(guān)于C++ std::vector擴(kuò)容的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++一個數(shù)組賦值給另一個數(shù)組方式

    C++一個數(shù)組賦值給另一個數(shù)組方式

    文章介紹了三種在C++中將一個數(shù)組賦值給另一個數(shù)組的方法:使用循環(huán)逐個元素賦值、使用標(biāo)準(zhǔn)庫函數(shù)std::copy或std::memcpy以及使用標(biāo)準(zhǔn)庫容器,每種方法都有其適用的場景和注意事項
    2025-02-02
  • vs2019 MFC實現(xiàn)office界面的畫圖小項目

    vs2019 MFC實現(xiàn)office界面的畫圖小項目

    本文主要介紹了vs2019 MFC實現(xiàn)office界面的畫圖小項目,對大家入門有一定的幫助,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 學(xué)生成績管理系統(tǒng)C語言代碼實現(xiàn)

    學(xué)生成績管理系統(tǒng)C語言代碼實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解C++ const修飾符

    詳解C++ const修飾符

    const 是 constant 的縮寫,const可以幫我們避免無意之中的錯誤操作,本文給大家介紹C++ const修飾符的相關(guān)知識,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-05-05
  • 基于C++實現(xiàn)三種不同版本的通訊錄

    基于C++實現(xiàn)三種不同版本的通訊錄

    這篇文章主要為大家詳細(xì)介紹了如何通過C++實現(xiàn)三種不同版本的通訊錄(動態(tài)版本、靜態(tài)版本、文件版本),文中的示例代碼講解詳細(xì),希望對大家有所幫助
    2022-11-11
  • 內(nèi)聯(lián)函數(shù)inline與宏定義深入解析

    內(nèi)聯(lián)函數(shù)inline與宏定義深入解析

    類的內(nèi)斂函數(shù)是一個真正的函數(shù)。使用內(nèi)聯(lián)函數(shù)inline可以完全取代表達(dá)式形式的宏定義
    2013-09-09
  • C語言推箱子游戲?qū)崿F(xiàn)代碼

    C語言推箱子游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語言推箱子游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++第三方日志庫Glog基本語法詳解

    C++第三方日志庫Glog基本語法詳解

    這篇文章主要介紹了C++第三方日志庫Glog基本語法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 字符串的模式匹配詳解--BF算法與KMP算法

    字符串的模式匹配詳解--BF算法與KMP算法

    這篇文章記錄一下串里面的模式匹配,模式匹配,顧名思義就是給定一個被匹配的字符串,然后用一個字符串模式(模型)去匹配上面說的字符串,看后者是否在前者里面出現(xiàn)。常用的有2種算法可以實現(xiàn),下面我們來具體探討下
    2014-08-08
  • C++中神奇的tuple詳解使用技巧及實例解析

    C++中神奇的tuple詳解使用技巧及實例解析

    C++11標(biāo)準(zhǔn)新引入了一種類模板,命名為 tuple(中文可直譯為元組),下面這篇文章主要給大家介紹了關(guān)于C++中神奇的tuple詳解使用技巧及實例解析的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評論