最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)兩個重要的變量:sizecapacitysize表示當(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 語言基礎(chǔ)教程(我的C之旅開始了)[九]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[九]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[九]...
    2007-02-02
  • C++11的future和promise、parkged_task使用

    C++11的future和promise、parkged_task使用

    這篇文章主要介紹了C++11的future和promise、parkged_task使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇

    C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++ primer超詳細(xì)講解泛型算法

    C++ primer超詳細(xì)講解泛型算法

    泛型編程,故如其名,是一個泛化的編程方式。其實現(xiàn)原理為程序員編寫一個函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實現(xiàn)
    2022-07-07
  • 一篇文章教你3分鐘如何發(fā)布Qt程序

    一篇文章教你3分鐘如何發(fā)布Qt程序

    這篇文章主要給大家介紹了關(guān)于教你3分鐘如何發(fā)布Qt程序的相關(guān)資料,文中通過實例代碼結(jié)束的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++實現(xiàn)LeetCode(76.最小窗口子串)

    C++實現(xiàn)LeetCode(76.最小窗口子串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(76.最小窗口子串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 關(guān)于C語言指針賦值的問題詳解

    關(guān)于C語言指針賦值的問題詳解

    本篇文章是對C語言指針賦值的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • ACE反應(yīng)器(Reactor)模式的深入分析

    ACE反應(yīng)器(Reactor)模式的深入分析

    本篇文章是對ACE反應(yīng)器(Reactor)模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中4種強(qiáng)制類型轉(zhuǎn)換的區(qū)別詳析

    C++中4種強(qiáng)制類型轉(zhuǎn)換的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于C++中4種強(qiáng)制類型轉(zhuǎn)換區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 基于c++強(qiáng)制類型轉(zhuǎn)換的(總結(jié))詳解

    基于c++強(qiáng)制類型轉(zhuǎn)換的(總結(jié))詳解

    本篇文章對C++中的強(qiáng)制類型轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05

最新評論

江门市| 平定县| 凤冈县| 微山县| 龙门县| 张北县| 肥城市| 余江县| 自贡市| 惠来县| 大冶市| 龙门县| 广饶县| 长沙县| 施秉县| 竹山县| 翁牛特旗| 红河县| 西平县| 辰溪县| 永靖县| 石景山区| 克山县| 南通市| 绥中县| 新津县| 泗洪县| 宁城县| 班戈县| 璧山县| 瓮安县| 厦门市| 行唐县| 平度市| 民乐县| 定安县| 贵溪市| 香格里拉县| 广灵县| 博兴县| 讷河市|