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

C++之vector容器的的聲明初始化和增刪改查

 更新時(shí)間:2021年07月28日 12:49:37   作者:ZhiboZhao  
這篇文章主要給大家介紹了關(guān)于C++vector容器的的聲明初始化和增刪改查的相關(guān)資料,向量(Vector)是一個(gè)封裝了動(dòng)態(tài)大小數(shù)組的順序容器(Sequence Container),跟任意其它類型容器一樣,它能夠存放各種類型的對(duì)象,需要的朋友可以參考下

C++vector容器

 C++中有兩種類型的容器:順序容器和關(guān)聯(lián)容器。

順序容器主要有vector、list、deque等。其中vector表示一段連續(xù)的內(nèi)存,基于數(shù)組實(shí)現(xiàn),list表示非連續(xù)的內(nèi)存,基于鏈表實(shí)現(xiàn),deque與vector類似,但是對(duì)首元素提供插入和刪除的雙向支持。

關(guān)聯(lián)容器主要有map和set。map是key-value形式,set是單值。map和set只能存放唯一的key,multimap和multiset可以存放多個(gè)相同的key。

容器類自動(dòng)申請(qǐng)和釋放內(nèi)存,因此無需new和delete操作。

一、STL的基本概念

STL(Standard Template Library)標(biāo)準(zhǔn)模板庫大體上分為六大組件,分別為容器,算法,迭代器,仿函數(shù),適配器和空間配置器,其中最重要的是容器,算法和迭代器,容器和算法之間通過迭代器無縫連接。

容器:各種數(shù)據(jù)結(jié)構(gòu),比如vector,list,deque,set,map等,用來存放數(shù)據(jù);

算法:各種常用的算法,比如sort,find,copy,for_each等;

迭代器:提供一種方法,能夠依序?qū)ぴL某個(gè)容器所含的各個(gè)元素,每個(gè)容器都有自己專屬的迭代器。迭代器的使用非常類似于指針,可以將迭代器作為指針來理解。

二、vector容器的聲明和初始化

vector<T> v; // T代表模板,可以是任意的數(shù)據(jù)類型比如int,char,string等
vector<T> Name(v.begin(), v.end()); // 將[v.begin(), v.end)之間的元素賦值創(chuàng)建的Name容器
vector<T> Name(n, elem); // 將Name初始化為包含10個(gè)elem值的容器
vector<T> Name(v); // 拷貝構(gòu)造函數(shù),將容器v賦值給容器Name

三、vector容器的增刪改查

/***********************增加元素****************************/
push_back(elem); // vector尾部插入元素elem
insert(const_iterator, elem); // 在迭代器指向的位置插入元素elem

/***********************刪除元素****************************/
pop_vack();   // 刪除vector最后一個(gè)元素
erase(const_iterator); // 刪除迭代器指向位置的元素
erase(const_iterator start, const_iterator_end); // 刪除迭代器start和end之間所有的元素
clear(); // 刪除vector之間的所有元素

/***********************訪問元素****************************/
for(vector<int>::iterator it=v.begin(); it!=v.end(); it++) //it是vector<int>的迭代器,可以理解為指向容器內(nèi)元素的指針
for(auto it=v.begin(); it!=v.end(); it++) // 通過auto自動(dòng)推理出it的類型
for(auto sub_v : v) // 增強(qiáng)型for循環(huán),直接通過底層的迭代器訪問容器內(nèi)元素
for(int i=0; i<v.size(); i++) // 普通for循環(huán),i表示元素的下標(biāo),可以與數(shù)組一樣通過"v[i]"來訪問,或者"v.at(int i)"

四、vector容器的特點(diǎn)

vector數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但是與普通數(shù)組不同的是:vector容器可以動(dòng)態(tài)擴(kuò)展,但是vector并不是在原空間之后續(xù)接新的空間,而是尋找更大的內(nèi)存空間然后將元數(shù)據(jù)拷貝到新的空間,之后再釋放原空間。

但是每次vector擴(kuò)展空間之后都會(huì)多預(yù)留一部分空間,當(dāng)新增的元素個(gè)數(shù)不超過預(yù)留的空間時(shí),便可以直接續(xù)接在原vector后面。

vector中使用size()函數(shù)來計(jì)算容器內(nèi)元素的個(gè)數(shù),而capacity()函數(shù)則返回容器的容量。元素個(gè)數(shù)相當(dāng)于vector內(nèi)實(shí)際存儲(chǔ)的數(shù)據(jù)個(gè)數(shù),而容器的容量則代表容器開辟的內(nèi)存空間個(gè)數(shù),因此容量>=元素個(gè)數(shù)。

下面我們來通過一段代碼來理解一下上述的內(nèi)容:

vector<int>test;
int* p = nullptr;
int count=0;
for(int i=0; i<10; i++){
    test.push_back(i); // 通過push_back的方式存入數(shù)據(jù),理論上每push_back一次,vector便復(fù)制一次
    if(p != &test[0]){ // 如果容器進(jìn)行了復(fù)制,那么首地址必然會(huì)變,記錄下首地址的變化次數(shù),便得到復(fù)制次數(shù)
        p = &test[0];
        count++;
    }
}
cout << "vector 復(fù)制的次數(shù):" << count << endl; // 輸出復(fù)制次數(shù)
cout << "vector 的容量:" << test.capacity() << endl; // 輸出vector的容量
cout << "vector 的元素個(gè)數(shù):" << test.size() << endl;   // 輸出vector的元素個(gè)數(shù)
/************************輸出結(jié)果***********************/
vector 復(fù)制的次數(shù):7 // 可以看出vector只復(fù)制了7次,可以判斷每次vector在復(fù)制時(shí)預(yù)留了空間
vector 的容量:13  //  此時(shí),vector中有13個(gè)位置,比元素個(gè)數(shù)多3個(gè),即為預(yù)留的空間
vector 的元素個(gè)數(shù):10 // 正兒八經(jīng)的元素個(gè)數(shù)

總結(jié)

到此這篇關(guān)于C++之vector容器的的聲明初始化和增刪改查的文章就介紹到這了,更多相關(guān)C++vector容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言通訊錄管理系統(tǒng)課程設(shè)計(jì)

    C語言通訊錄管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言通訊錄管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++實(shí)現(xiàn)四叉樹效果(附源碼下載)

    C++實(shí)現(xiàn)四叉樹效果(附源碼下載)

    這篇文章主要介紹了C++實(shí)現(xiàn)四叉樹效果(附源碼下載),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • C++實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的順序表詳解

    C++實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的順序表詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言中預(yù)處理命令的使用

    C語言中預(yù)處理命令的使用

    C語言預(yù)處理是編程中非常重要的一個(gè)環(huán)節(jié),通過預(yù)處理指令和預(yù)處理器的一些特性,本文主要介紹了C語言中預(yù)處理命令的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C語言中.c和.h文件區(qū)別講解

    C語言中.c和.h文件區(qū)別講解

    這篇文章主要介紹了C語言中.c和.h文件區(qū)別講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++類常量和類枚舉

    C++類常量和類枚舉

    這篇文章主要介紹了C++類常量和類枚舉,給類當(dāng)中定義一些常量,可以給所有類的對(duì)象使用,比如說我們?cè)陬惍?dāng)中定義一個(gè)數(shù)組,希望可以定義一個(gè)常量,用來初始化數(shù)組的長(zhǎng)度,那么下面我i嗎就來看看過程當(dāng)如何吧
    2022-01-01
  • C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法

    C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法

    這篇文章主要介紹了C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法,涉及C++字符串的遍歷與簡(jiǎn)單判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • C語言如何建立動(dòng)態(tài)鏈表問題

    C語言如何建立動(dòng)態(tài)鏈表問題

    這篇文章主要介紹了C語言如何建立動(dòng)態(tài)鏈表問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    C語言中指針 int *p=0;和int *p;*p=0;和”&“的關(guān)系和區(qū)別詳解

    這篇文章主要介紹了C語言中指針 int *p=0;和int *p;*p=0;和”&“有什么關(guān)系和區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • opencv車道線檢測(cè)的實(shí)現(xiàn)方法

    opencv車道線檢測(cè)的實(shí)現(xiàn)方法

    這篇文章主要介紹了opencv車道線檢測(cè)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論