日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。