標準庫vector模板

2021-08-27 19:24:54 字數 3322 閱讀 4209

vector是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。vector成為容器,因為它能包含其他物件,所有物件必須是同一種型別。

#include

using std::vector;

注意:vector是一種類模板,不是一種資料型別,它可以來定義任意多種資料型別。如vector和vector都是資料型別。

1.vector物件的定義和初始化

(1)vectorv1;      vector儲存型別為t的物件。預設建構函式v1為空。

(2)vectorv2(v1);  v2是v1的乙個副本

(3)vectorv3(n,i);  v3包含n個值為i的元素。

(4)vectorv4(n);    v4含有值初始化的元素的n個副本。

重點:vector物件動態增長

vector物件(以及其他標準容器物件)的重要屬性就在於可以在執行時高效地新增元素。因為vector增長的效率高,在元素已知的情況下,最好是動態地新增元素。

2.值初始化

如果沒有指定元素的初始化式,那麼標準庫將自行提供乙個元素初始值進行值初始化。

如:vectorfvec(10);//10個元素都初始化為0

vectorsvec(10); //10個元素都是空字串

3.vector物件的操作

(1)size

empty和size操作類似於string物件的相關操作。成員函式size返回相應vector類定義的size_type的值。

注意:使用size_type型別時,必須指出該型別是**定義的。vector型別總是包括vector的元素型別

vector::size_type//正確

vector::size_type        //錯誤

(2)向vector新增元素

push_back()操作接受乙個元素值,並將它作為乙個新的元素新增到vector物件的後面,也就是「插入(push)」到vector物件的「後面(back)」:

string word;

vectortext;

while(cin>>word)

text.push_back(word);

(3)vector下標的操作

vector元素的位置從0開始。 

string word;

vectortext;

while(cin>>word)

text.push_back(word);

for(vector::size_type ix=0; ix!=text.size(); ++ix)

text[ix] = "0";

for(vector::size_type ix=0;ix!=text.size();++ix)

cout《注意:上例,即使text為空,for迴圈也會正確執行。text為空則呼叫size返回0。

c++程式設計師習慣於習慣優先選用!=而不是《來編寫迴圈判斷條件。

4.下標操作不新增元素

注意:必須是已存在的元素才能用下標操作符進行索引。通過下標操作符進行賦值時,不會新增任何元素。

僅能夠對己存在的元素進行下標操作。

5.vector的迭代器

(1)標準庫為每一種標準容器定義了一種迭代器型別,如:vector::iterator iter;

需要注意的是iter是迭代器,

vector是迭代器型別。

(2)begin和end操作

每個容器都定義了一對命名為begin和end的函式,用於返回迭代器。

vector::iterator iter = ***.begin();假設***不為空,初始化後iter指向該元素的***[0]。

由end操作返回的迭代器指向vector的「末端元素的下乙個」。通常稱為超出末端迭代器,表明它指向了乙個不存在的元素。如果vector為空,begin返回的迭代器與end返回的迭代器相同。

由end操作返回的迭代器並不指向vector中任何實際的元素,相反,它只是起乙個哨兵的作用,表示我們已處理完vector中所有的元素

6.vector的迭代器的自增和解引用運算子(*操作符)

vector::iterator iter = ***.begin();

*iter = 0;// *iter和***[0]就是指向同乙個元素。

++iter指向第二個元素。

注意:由於end操作返回的迭代器不指向任何元素,因此不能對它進行解引用或自增操作。

vectorfvec(10,20);

//重置值,方法一

for(vector::size_type ix=0; ix!=fvec.size(); ++ix)

fvec[ix] = 10;

for(vector::size_type ix=0;ix!=fvec.size();++ix)

cout<::iterator iter=fvec.begin();iter!=fvec.end();++iter )

*iter = 15;

for(vector::size_type ix=0;ix!=fvec.size();++ix)

cout<7.const_iterator

每種容器型別定義了乙個名為const_iterator的型別,該型別只能用於讀取容器內元素,但不能改變其值。

vectorfvec(10,20);

for(vector::iterator iter=fvec.begin();iter!=fvec.end();++iter )

*iter = 15;

//方法1

for(vector::size_type ix=0;ix!=fvec.size();++ix)

cout<::const_iterator iter=fvec.begin();iter!=fvec.end();++iter)

cout<<*iter《注意:使用const_iterator型別時,我們可以得到乙個迭代器,它自身的值可以改變,但不能用來改變其所指向的元素的值。可以對迭代器進行自增以及使用解引用操作符來讀取值,但不能對改元素賦值。

const_iterator物件與const的iterator物件混肴起來,宣告乙個const迭代器時,必須初始化容器。一旦被初始化後,就不能改變它的值。

vectorfvec(10,20);

const vector::iterator cit = fvec.begin();

*cit = 1;//正確

++cit; //錯誤

const的iterator幾乎沒什麼作用。

8.迭代器的算術操作

注意:任何改變vector長度的操作都會使已存在的迭代失效,例如,在呼叫push_back之後,就不能再信賴指向vector的迭代器的值了。

標準模板庫 (向量 vector)

編寫程式練習了vector 的主要函式。從中學習到了一些知識點 1.vector的內部其實還是陣列。2.at用於按照索引訪問任意位置的元素,front用於訪問頭元素,back用於訪問尾元素。3.arr.at i 和arr i 是等價的,在vector的內部過載了操作符。4.push back用於在尾...

STL標準模板庫 vector

原 2019年02月09日 12 24 18 bbbbbinary 閱讀數 162 更多分類專欄 stl 筆記總結 vector可以看作陣列的增強版,可以用類似陣列的直接取得方式訪問,也可以使用函式操作,好處是可以不用提前規定長度,可以實現不定長度的儲存。需要的標頭檔案 include vector...

C 標準模板庫 vector

include vectorarryname vector int myarray vector myarray2 node 是結構體 vector double myarray3 vectorint array 兩維均可變長的變長二維陣列 之間一定要有空格 否則c11之前認為是向右可能報錯 vec...