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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序容器之vector

發布時間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序容器之vector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近因為需要,在看C++ primer,哇,感覺這本書真不錯,講的細而且到位,而且大量的練習題,不愧為C++學習的經典書籍。今天看了順序容器方面的內容,現在匯報一下:

一、什么是vector

vector是C++標準模板庫(STL)提供的一個容器,說容器可能有點抽象。簡單點吧,學習C++我們都知道C++引入的一個最大的編程上的變化就是加入了面向對象的編程技術,表現在代碼的編寫上也就是增加了一個類,所以C++在剛提出來的時候是叫做 C WITH CLASS的。扯遠了,回來吧。vector就是一個類,提供了一組依附于該類的操作函數。這樣一來,我們在寫代碼的時候就可以調用這些函數為我們的項目服務,這樣就省去了我們很多事情(STL,standard template library正是為此而設計的,關于STL,請參考http://en.wikipedia.org/wiki/Standard_Template_Library)

二、vector的使用

明白了vector是什么了,那么我們就想知道vector怎么用,下面就給大家介紹一下Vector的用法。

vector定義在STL中的vector頭文件中,我們要使用vector,必須要把vector頭文件括進來,即:

#include<vector>,這是第一步,然后我們就可以開始使用vector提供的各種操作了。vector提供操作如下:

?

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

構造函數:創建一個vector對象,功能相當于C語言中定義一個變量

vector<Elem> c; //創建一個空的vector對象,就相當于定義了一個int整形變量,沒給賦值

vector<Elem> c1(c2);//c2為一個vector對象,用它來創建c1,相當于int i=j;j已經定義

vector<Elem> c(n);//創建一個vector容器,容量為n,即c里面可以放n個Elem類型的元素

vector<Elem> c(n,data);//創建一個vector,容量為n,n個元素的值都為data

vector<Elem> c(c1.begin(),c1.end());//相當于c=c1,c1調用兩個函數返回的是一種新的數據類型:迭代器,有關迭代器,請參考:http://baike.baidu.com/view/1413849.htm

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

?

############################################################################################################

常見操作:

assign(first,last):用迭代器first,last所指定的元素取代向量元素

assign(num,val):用val的num份副本取代向量元素

at(n):等價于[]運算符,返回向量中位置n的元素,因其有越界檢查,故比[]索引訪問安全

front():返回向量中第一個元素的引用

back():返回向量中最后一個元素的引用

begin():返回向量中第一個元素的迭代器

end():返回向量中最后一個元素的下一個迭代器(僅作結束游標,不可解引用)

max_size():返回向量類型的最大容量(2^30-1=0x3FFFFFFF)

capacity():返回向量當前開辟的空間大小(<= max_size,與向量的動態內存分配策略相關)

size():返回向量中現有元素的個數(<=capacity)

clear():刪除向量中所有元素

empty():如果向量為空,返回真

erase(start,end):刪除迭代器start end所指定范圍內的元素

erase(i):刪除迭代器i所指向的元素

erase()返回指向刪除的最后一個元素的下一位置的迭代器

insert(i,x);把x插入到迭代器i所指定的位置之前

insert(i,n,x):把x的n份副本插入到迭代器i所指定的位置之前

insert(i,start,end):把迭代器start和end所指定的范圍內的值插入到迭代器i所指定的位置之前

push_back(x):把x推入(插入)到向量的尾部

?

pop_back():彈出(刪除)向量最后一個元素

?

rbegin():返回一個反向迭代器,該迭代器指向的元素越過了向量中的最后一個元素

?

rend():返回一個反向迭代器,該迭代器指向向量中第一個元素

?

reverse():反轉元素順序

?

resize(n,x):把向量的大小改為n,新元素的初值賦為x

?

swap(vectorref):交換2個向量的內容

?

#############################################################################################

操作符重載函數:

operator()//返回容器中指定位置的元素,有關操作符重載函數請參考:http://baike.baidu.com/view/1033032.htm

析構函數:

~vector()//用于銷毀vector對象占用的系統資源,更詳細的析構函數介紹,請參考http://baike.baidu.com/view/1277985.htm

?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

三、more about vector

1、vector是一種類似于數組的數據結構,確切的說應該是動態數組。在進行內存分配的時候必須是連續的一整塊空間

2、我們知道數組是有固定長度,而vector沒有,這也是我們稱之為動態數組的原因。那么vector是怎么實現動態數組的呢,例如申請一個vector<int> vec(10);一個

空間大小為10的vector,那么當里面存滿了10個元素了怎么辦呢。辦法是:重新分配一塊更大的空間比如20,然后把10個數據拷貝過去,釋放前面申請的10個元素的

空間

3、除此之外,在操作上他的很多特性跟數組一樣,如上面的介紹,大家可以一一試一下

4、在vector中做insert操作,效率很低,除了在末尾插入以外。因為vector是連續的,每次插入一個,插入位置后面的元素都要向后移動,這樣效率很低。所以vector不支持push_front操作。

5、刪除操作同樣效率很低

6、push_back操作很方便,有可能效率很低。

?

?

轉載于:https://www.cnblogs.com/wangyichao/p/3347643.html

總結

以上是生活随笔為你收集整理的顺序容器之vector的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。