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

STL中vector的使用你了解嗎

 更新時(shí)間:2022年03月28日 16:58:17   作者:賣寂寞的小男孩  
這篇文章主要為大家詳細(xì)介紹了STL中vector的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

前言

當(dāng)我們使用C語(yǔ)言的語(yǔ)法來(lái)實(shí)現(xiàn)數(shù)組的時(shí)候,增刪查改都需要自己來(lái)定義函數(shù),STL中給出了數(shù)組模板vector,其中包含函數(shù)可以幫助我們更便捷地處理數(shù)組。

1.vector是什么

1.vector是一個(gè)表示可變大小數(shù)組的容器。

2.vector采用連續(xù)存儲(chǔ)空間來(lái)進(jìn)行元素的存儲(chǔ)。

3.vector使用動(dòng)態(tài)分配數(shù)組來(lái)存儲(chǔ)它的元素。

2.vector創(chuàng)建對(duì)象

以下為vector的四種拷貝構(gòu)造函數(shù)。

    vector<int> v1;//創(chuàng)建空對(duì)象v1
	vector<int> v2(10, 8);//創(chuàng)建有十個(gè)8的對(duì)象v2
	vector<int> v3(++v2.begin(), --v2.end());//通過(guò)迭代器進(jìn)行拷貝構(gòu)造,迭代器可以加減操作
	vector<int> v4(v3);//拷貝構(gòu)造
	string s("hello world");
	vector<char> v5(s.begin(), s.end());

vector創(chuàng)建對(duì)象的過(guò)程也就是它調(diào)用其構(gòu)造函數(shù)和拷貝構(gòu)造的過(guò)程,我們也可以將s中字符串存入容器v5中。
注意vector<char>不能取代string,這是因?yàn)槭褂胿ector<char>需要手動(dòng)打印’\0’,并且vector也不支持+=和比較大小等一系列的操作。

3.遍歷vector

為了更好地演示,我們先定義一個(gè)數(shù)組,并向其中傳入數(shù)據(jù)。

vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

(1)下標(biāo)遍歷

下標(biāo)遍歷可讀可寫。

	for (int i = 0; i < v.size(); i++)
	{
		v[i] += 1;//可以修改,因?yàn)榉祷氐闹凳且?
		cout << v[i] << endl;
	}

在這里插入圖片描述

(2)迭代器遍歷

vector&lt;int&gt;::iterator it = v.begin();while (it != v.end()){*it -= 1;cout &lt;&lt; *it &lt;&lt; " " ;++it;}

在這里插入圖片描述

(3)范圍for遍歷

	for (auto& e: v)
	{
		cout << e << " ";
	}

在這里插入圖片描述

原生指針就是天然的迭代器,數(shù)組支持范圍for會(huì)被替換成指針。

3.vector容量函數(shù)

表示vector容量的函數(shù)一共有三個(gè)。

	cout << v2.size() << endl;
	cout << v2.capacity() << endl;
	cout << v2.max_size() << endl;

在這里插入圖片描述

v2.size()表示的是目前元素個(gè)數(shù)。

v2.capacity()表示的是最大容量。

v2.max_xize()表示的是系統(tǒng)可以分配的給vector<int>的最大容量(還未分配)。

如果內(nèi)存是一個(gè)圖書館的話,vector<int>表示的是一個(gè)書架,size()就表示書架上放了多少書,capacity()表示的就是書架的最大容量,max_size表示的是圖書館中最大能放一個(gè)容量為多大的書架。

4.vector的擴(kuò)容函數(shù)

我們使用vector的時(shí)候通常也是在堆上開(kāi)辟空間的。這就需要用到兩個(gè)函數(shù),reseveresize,其使用方法和string的一樣,reserve只開(kāi)空間不初始化,resize開(kāi)空間而且還初始化,不傳初始化內(nèi)容默認(rèn)為0。

	vector<int> v2(10,45);//創(chuàng)建有十個(gè)8的對(duì)象v2
	cout << v2.size() << endl;
	cout << v2.capacity() << endl;
	v2.reserve(20);
	cout << v2.size() << endl;
	cout << v2.capacity() << endl;

在這里插入圖片描述

resize需要借助調(diào)試來(lái)觀察初始化的內(nèi)容:

在這里插入圖片描述

通過(guò)調(diào)試我們可以看到新開(kāi)辟的空間里都初始化成了0。

我們還可以通過(guò)assign函數(shù)來(lái)將之前的內(nèi)容進(jìn)行覆蓋。

	vector<int> v1;//創(chuàng)建空對(duì)象v1
	vector<int> v2(10,45);//創(chuàng)建有十個(gè)8的對(duì)象v2
	v2.assign(20, 5);

在這里插入圖片描述

5.vector的插入刪除

(1)尾插與尾刪

插入刪除主要使用四個(gè)函數(shù):

尾插:push_back

尾刪:pop_back

定點(diǎn)插入:insert

定點(diǎn)刪除:erase

刪除所有數(shù)據(jù):clear

	vector<int> v1;//創(chuàng)建空對(duì)象v1
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	for (auto& e: v1)
	{
		cout << e << " ";
	}

在這里插入圖片描述

pop_back這里就不演示了,就是一個(gè)簡(jiǎn)單的尾刪。

(2)insert與erase

insert與erase是最容易引起迭代器失效的兩個(gè)函數(shù),關(guān)于迭代器失效的原理我會(huì)在下一節(jié)vector的模擬實(shí)現(xiàn)中詳細(xì)解釋?,F(xiàn)在只需要記住string與vector迭代器失效的兩種情況即可:

1.如果空間被重新分配,則指向容器的迭代器、指針和引用都會(huì)失效。

2.如果空間沒(méi)被重新分配,指向插入位置之前的元素的迭代器、指針和引用依然有效,但指向插入位置之后元素的帶帶器、指針和引用將會(huì)失效。

注意,這里的迭代器指的是我們自己定義的迭代器。

	vector<int>::iterator ret = v1.begin();
	v1.insert(ret, 0);//在ret處插入0

我們可以通過(guò)insert來(lái)進(jìn)行插入元素。

但當(dāng)我們進(jìn)行刪除的時(shí)候,如果這樣寫程序會(huì)報(bào)錯(cuò)的。

	vector<int>::iterator ret = v1.begin();
	v1.insert(ret, 0);
	v1.erase(ret);

在這里插入圖片描述

這是因?yàn)槲覀儗?duì)v1進(jìn)行了插入數(shù)據(jù),空間被重新分配了,原有的ret失效了。如果要?jiǎng)h除首元素,需要使用v1.begin()來(lái)刪除。

在這里插入圖片描述

為了保險(xiǎn)起見(jiàn),使用插入或者刪除的操作之后,一定要記得更新迭代器。

(3)clear

clear會(huì)刪除所有數(shù)據(jù),注意一點(diǎn),刪除數(shù)據(jù)不會(huì)刪除容量。

vector的特殊應(yīng)用 

vector<vector <int>>

表示一個(gè)二維數(shù)組,vector本身就是一個(gè)模板類型,里面也可以存放一個(gè)vector<int>的類型。

相當(dāng)于vector本身是一個(gè)數(shù)組,它的每個(gè)數(shù)據(jù)又是一個(gè)int類型的數(shù)組。

在這里插入圖片描述

vector<string>

表示數(shù)組中每一個(gè)元素都是一個(gè)字符串。

6.總結(jié)

vector的基本函數(shù)都介紹完了,這些已經(jīng)足夠我們使用了,如果知識(shí)在精不在多,如果還希望了解更過(guò)vector的成員函數(shù)的話,可以登錄cplusplus.com來(lái)進(jìn)行搜索。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!     

相關(guān)文章

  • Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    這篇文章主要介紹了Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • c++ Qt信號(hào)槽原理

    c++ Qt信號(hào)槽原理

    這篇文章主要介紹了c++ Qt信號(hào)槽原理的相關(guān)資料,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • c語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷毀過(guò)程詳解

    c語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷毀過(guò)程詳解

    我們知道c語(yǔ)言中函數(shù)都是被調(diào)用的,main函數(shù)里面能調(diào)用其他函數(shù),其實(shí)main函數(shù)也是被別的函數(shù)調(diào)用的,下面通過(guò)本文給大家分享c語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷毀過(guò)程,一起看看吧
    2021-08-08
  • C++14中binary literals的使用詳解

    C++14中binary literals的使用詳解

    這篇文章主要介紹了C++14中binary literals的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù)

    C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù)

    輾轉(zhuǎn)相除法最大的用途就是用來(lái)求兩個(gè)數(shù)的最大公約數(shù)。下面通過(guò)本文給大家介紹C語(yǔ)言輾轉(zhuǎn)相除法求2個(gè)數(shù)的最小公約數(shù),非常不錯(cuò),感興趣的朋友一起看看吧
    2016-12-12
  • string,CString,char*之間的轉(zhuǎn)化

    string,CString,char*之間的轉(zhuǎn)化

    下面是MFC/C++/C中字符類型CString, int, string, char*之間的轉(zhuǎn)換的說(shuō)明與舉例,經(jīng)常用的東西,相信對(duì)于用C/C++的朋友,還是比較有用的
    2013-03-03
  • C++實(shí)現(xiàn)計(jì)算器功能

    C++實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • VC++操作SQLite簡(jiǎn)單實(shí)例

    VC++操作SQLite簡(jiǎn)單實(shí)例

    這篇文章主要介紹了VC++操作SQLite,很實(shí)用的功能,需要的朋友可以參考下
    2014-07-07
  • vector,map,list,queue的區(qū)別詳細(xì)解析

    vector,map,list,queue的區(qū)別詳細(xì)解析

    如果我們需要隨機(jī)訪問(wèn)一個(gè)容器則vector要比list好得多。如果我們已知要存儲(chǔ)元素的個(gè)數(shù)則vector 又是一個(gè)比list好的選擇。如果我們需要的不只是在容器兩端插入和刪除元素則list顯然要比vector好
    2013-09-09
  • 使用emacs編寫C語(yǔ)言教程

    使用emacs編寫C語(yǔ)言教程

    這篇文章主要介紹了使用emacs編寫C語(yǔ)言教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

郑州市| 桃源县| 安达市| 开平市| 金溪县| 南京市| 元谋县| 丹东市| 商城县| 宁晋县| 蒲江县| 沂源县| 广安市| 五原县| 清水县| 集贤县| 德清县| 临湘市| 中山市| 云龙县| 朔州市| 胶南市| 广德县| 来安县| 盱眙县| 巩义市| 延寿县| 阳泉市| 涞源县| 嘉义市| 株洲市| 淮南市| 和硕县| 泸水县| 沭阳县| 拉萨市| 柘荣县| 天水市| 古丈县| 土默特右旗| 塔城市|