日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++STL之vector的说明及使用

發(fā)布時(shí)間:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++STL之vector的说明及使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

創(chuàng)作初衷:

????在純C語(yǔ)言編程中,數(shù)組的創(chuàng)建必須是固定的大小,因?yàn)镃語(yǔ)言本身沒(méi)有提供動(dòng)態(tài)數(shù)組這種數(shù)據(jù)結(jié)構(gòu)。雖然可以通過(guò)malloc或calloc來(lái)動(dòng)態(tài)分配內(nèi)存(從堆中),但是仍需要指定內(nèi)存的大小,因此很不方便,比如:保存輸入的數(shù)組,但是并沒(méi)有說(shuō)明數(shù)組輸入的長(zhǎng)度。因此,引入C++中的vector。

(一)vector說(shuō)明:

????vector向量是一種順序行容器。相當(dāng)于數(shù)組,但是其大小可以死不預(yù)先指定給,并且自動(dòng)擴(kuò)展。他可以像數(shù)組一樣被操作,通過(guò)使用[]符號(hào)。因此可以將vector變量看做動(dòng)態(tài)數(shù)組。

在創(chuàng)建vector變量后,它會(huì)自動(dòng)在內(nèi)存中分配一塊連續(xù)的內(nèi)存空間來(lái)保存數(shù)據(jù),初始內(nèi)存空間大小可以預(yù)先指定,也可以由vector們默認(rèn)指定大小。當(dāng)存儲(chǔ)的數(shù)據(jù)超過(guò)分配的空間時(shí),vector會(huì)重新分配一塊內(nèi)存,但是這樣的分配很耗時(shí),在重新分配空間是它的步驟如下:

(1)vector 會(huì)申請(qǐng)一塊更大的內(nèi)存塊;

(2)將原來(lái)的數(shù)據(jù)拷貝到新的內(nèi)存塊中;

(3)銷(xiāo)毀掉原內(nèi)存塊中的對(duì)象(調(diào)用對(duì)象的析構(gòu)函數(shù));

(4)將原來(lái)的內(nèi)存空間釋放掉。

????當(dāng)vector保存的數(shù)據(jù)量很大時(shí),如果此時(shí)進(jìn)行插入數(shù)據(jù)導(dǎo)致需要更大的空間來(lái)保存這些數(shù)據(jù)量,那么將會(huì)大大的影響程序運(yùn)行的效率,所以我們應(yīng)該合理地使用vector。

(二)定義vector對(duì)象的方式:

(1)初始化vector對(duì)象的方式:

vector<T> v1; //未指定初始化方式,因此采用默認(rèn)方式初始化v1,即長(zhǎng)度為0的空容器;

vector<T> v2; //定義對(duì)象v2,作為v1的副本;

vector<T3> v3(n,i);//定義對(duì)象v3,它包含n個(gè)數(shù)值為i的元素;

vector<T> v4(n); //定義對(duì)象v4,v4中包含n個(gè)元素,每個(gè)元素的值均是0;

其中:T可以為int,float,char,char*(存放字符串或字符指針)。一般用于int動(dòng)態(tài)數(shù)值時(shí),定義vector<T> v1,用v1來(lái)保存數(shù)值元素。

(2)vector的常用函數(shù):只需要包含#include<vector>即可

empty():判斷vector向量是否為為空,為空時(shí)返回真,否則返回假;

begin():返回向量(數(shù)組)的首元素的地址;

end():返回向量(數(shù)組)的末尾元素的下一個(gè)元素(不存在的元素)的地址;

clear():清空向量;

front():返回向量(數(shù)組)的第一個(gè)元素的數(shù)據(jù);

back():返回向量(數(shù)組)的最后一個(gè)元素的數(shù)據(jù);

size():返回向量中元素的個(gè)數(shù)(即數(shù)組長(zhǎng)度)

push_back(數(shù)據(jù)i):將數(shù)據(jù)插入到向量的尾部;

pop_back():刪除向量尾部的數(shù)據(jù)

....

非常重要的兩個(gè)操作:

insert() 函數(shù)有以下三種用法:?
1、在指定位置loc前插入值為val的元素,返回指向這個(gè)元素的迭代器
2、在指定位置loc前插入num個(gè)值為val的元素?

3、在指定位置loc前插入?yún)^(qū)間[start, end)的所有元素?

vec.insert(vec.begin()+i,a);在第i+1個(gè)元素前面插入a;


使用方法:對(duì)象調(diào)用成員函數(shù)采用符號(hào)“.”,如v1.push_back(1);

(3)遍歷vector的方式:

vecor向量支持2中方式遍歷,因?yàn)榭梢哉J(rèn)為vector是一個(gè)動(dòng)態(tài)數(shù)組,所以可以使用數(shù)組下標(biāo)的方式;或是使用vector的迭代器(vector的迭代器的具體使用參考文檔《C++之迭代器Iterator》)

#include <iostream> #include <vector> using namespace std;int main(void) {vector<int> vec;vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << "向量的大小:" << vec.size() << endl;// 數(shù)組下標(biāo)方式遍歷vectorfor (int i = 0; i < vec.size(); i++)cout << vec[i] << " ";cout << endl;// 迭代器方式遍歷vector,注意:如果向量是常向量,如const vector<int> vec,//那么迭代器在定義是也需要定義為常量:vector<int>::const iterator itor = vec.begin();vector<int>::iterator itor = vec.begin();for (; itor != vec.end(); itor++)cout << *itor << " ";cout << endl;return 0; }

(三)vector的特點(diǎn):

(1) 指定一塊如同數(shù)組一樣的連續(xù)存儲(chǔ),但空間可以動(dòng)態(tài)擴(kuò)展。即它可以像數(shù)組一樣數(shù)組一樣被操作,通過(guò)[]符號(hào)。可以進(jìn)行動(dòng)態(tài)操作,通常體現(xiàn)在push_back() pop_back();

(2) 隨機(jī)訪問(wèn)方便,它像數(shù)組一樣被訪問(wèn),即支持[ ] 操作符和vector.at();

(3) 節(jié)省空間,因?yàn)樗沁B續(xù)存儲(chǔ),在存儲(chǔ)數(shù)據(jù)的區(qū)域都是沒(méi)有被浪費(fèi)的,但是要明確一點(diǎn)vector 大多情況下并不是滿(mǎn)存的,在未存儲(chǔ)的區(qū)域?qū)嶋H是浪費(fèi)的;

(4)?在內(nèi)部進(jìn)行插入、刪除操作效率非常低,這樣的操作基本上是被禁止的。Vector 被設(shè)計(jì)成只能在后端進(jìn)行追加和刪除操作,其原因是vector 內(nèi)部的實(shí)現(xiàn)是按照順序表的原理;

(5) 只能在vector 的最后進(jìn)行push 和pop ,不能在vector 的頭進(jìn)行push 和pop ;

(6) 當(dāng)動(dòng)態(tài)添加的數(shù)據(jù)超過(guò)vector 默認(rèn)分配的大小時(shí)要進(jìn)行內(nèi)存的重新分配、拷貝與釋放,這個(gè)操作非常消耗性能。 所以要vector 達(dá)到最優(yōu)的性能,最好在創(chuàng)建vector 時(shí)就指定其空間大小。


總結(jié)

以上是生活随笔為你收集整理的C++STL之vector的说明及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人夜晚看av | 伊人久久网站 | 日韩久久久精品 | fc2成人免费视频 | 喷水av| 尤物视频在线免费观看 | 日韩国产精品久久 | 韩国伦理在线视频 | www.欧美.com | 2019亚洲男人天堂 | 中文字母av | 亚洲国产精品久久久久久 | 国产乱人乱偷精品视频 | 国产一区在线不卡 | 天堂资源网 | 胸网站 | 最近中文字幕在线中文视频 | 青青草视频观看 | 国产女人18毛片水真多18 | 国产乱码在线观看 | 精品久久久久久亚洲综合网站 | 国产精品黄网站 | 9色在线视频 | 欧美性videos高清精品 | 日韩一区二区三区三四区视频在线观看 | 九色蝌蚪91 | 精品中文字幕在线观看 | 一区二区三区xxx | 国产一级自拍视频 | 亚洲色偷精品一区二区三区 | 青青草社区 | www.亚洲一区二区三区 | 狠狠干狠狠操视频 | 久久精品欧美一区二区三区麻豆 | 国产亚洲精品女人久久久久久 | 中文字幕av专区 | 双性人bbww欧美双性 | 亚洲精品一区二区三区在线 | 91九色国产在线 | 国产成人在线播放视频 | 91精品播放 | 免费看黄色的网址 | 饥渴的少妇和男按摩师 | 男人的天堂成人 | 国产精品无码久久久久一区二区 | 久伊人网| 极品美女扒开粉嫩小泬 | 阿v视频在线免费观看 | 奇米影视奇米色 | 国产黄a| 国产精品亚洲综合 | 中文字幕一区二区三区日韩精品 | 欧洲成人综合 | 99ri国产在线| 影音先锋成人资源网 | 欧美一区三区三区高中清蜜桃 | 黄色一级大片在线免费看国产 | 色女人影院 | 久久一线 | 久久午夜场 | 亚洲国产在 | 性www| 日韩视频网| 成人网av | 涩涩五月天 | 香蕉久久夜色精品国产使用方法 | 日韩一区二区免费在线观看 | 色香蕉网 | 亚洲av无码一区二区乱子伦 | 国产精自产拍久久久久久蜜 | 五月天综合在线 | 国产毛片基地 | 成人一级毛片 | 黄色av小说在线观看 | 国产成人无码精品久久二区三 | 亚洲av午夜精品一区二区三区 | 毛片一区二区 | 男朋友是消防员第一季 | 琪琪色在线视频 | 先锋资源一区二区 | 在线欧美色 | 青青青国产在线 | av在线手机版 | 国产精品欧美一区二区三区 | 乌克兰做爰xxxⅹ性视频 | av资源新版在线天堂 | 成人精品影院 | 久久综合国产精品 | 亚洲成人黄色影院 | 天堂在线官网 | 亚洲欧美日本国产 | 日韩视频一区在线观看 | 日韩免费av片 | 成人做爰视频www网站小优视频 | 视频一区在线观看 | 日韩和欧美的一区二区 | 国产福利小视频 | 国产人妻人伦精品1国产盗摄 | 欧美做爰啪啪xxxⅹ性 |