定義:vector表示物件的集合,其中所有物件的型別都相同。
訪問方式:索引
標頭檔案:
本質:類模板
也允許把乙個vector物件的元素拷貝給另外一vector物件,但兩個vector物件的型別必須相同。
c++提供的幾種不同的初始化方式,大多數情況下這些初始化方式可以相互等價地使用,但有三種特殊情況:
vector v1("a","
an","
name
"); //
錯誤vector v2; //
列表初始化
vector v(10,-1); //通常情況下,可只提供vector物件容納的元素數量而不用初始值,庫會為每乙個元素提供乙個初始化值,這個值由vector中物件的型別決定。10個-1
vector s(10,"
hi"); //
10個string的hi
vector v(10); //note:10個元素,每個初始化為0
vector s(10); //
10個元素都初始化為空字元
初始化時,圓括號是用來構造vector物件的,如果是花括號則表示是列表初始化,但是如果無法執行列表初始化時將會考慮其他初始化方式。
vector v1(10); //利用成員函式push_back();v1有10個元素,每個值為0
vector v2; //
v2有1個元素,該元素的值是10
vector
v3(10,1); //
v3有10個元素,每個元素的值都是1
vector v4; //
v4有2個元素,值分別是10和1
vectorv6("hi"); //錯誤,不能使用字串字面值構件vector物件
vectorv7; //此時不能執行列表初始化,所以是直接初始化,v7有10個預設初始化的元素
使用下標訪問元素,必須要確保下標的合法性,只能對已經存在的元素執行下標操作,確保下標合法的乙個有效手段就是盡可能使用範圍for語句。
vector v;除了使用下標來訪問string物件的字元和vector物件的元素之外,還可以使用迭代器來達到同樣的效果。for (auto &i : v)
迭代器和指標類似,都提供了對物件的間接訪問,但也有區別。獲取迭代器不是取位址符,有迭代器的型別同時擁有返回迭代器的成員。
迭代器相等的判定原則:兩個迭代器指向的元素相同或者都是同乙個容器的尾迭代器,則相等。
iterator和const_iterator來表示迭代器的型別。const_iterator能讀取但不能修改它所指的元素值。如果vector物件或string物件是乙個常量,只能使用const_terator;如果vector物件或string物件不是常量,那麼既能使用iterator也能使用const_iterator。
begin和end返回的具體型別由物件是否是常量決定,如果物件是常量,begin和end返回const_iterator,如果物件不是常量,返回iterator.
vectorv;c++新標準引入了兩個新函式,分別是cbegin和cend,不論物件本身是否是常量,返回值都是const_iterator.cosnt vector
cv;auto it1=v.begin(); //
it1的型別是vector::iterator
auto it2=cv.begin(); //
it2的型別是vector::const_iterator
(*it).menit->men //
二者效果一樣
C 系統學習 陣列
與vector的異同相同 都是存放型別相同物件的容器不同 陣列的大小確定不變,不能隨意向陣列中增加元素 1 定義和初始化內建陣列 陣列中元素的個數也屬於陣列型別的一部分,編譯的時候維度應該是已知的,也就是說,維度必須是乙個常量表示式。預設情況下,陣列的元素被預設初始化。note 定義陣列的時候必須制...
系統學習C (2)
第一部分是c 的一些基本的知識,還沒有涉及成段的 而且都是一些零散的知識點,第二部分,涉及了函式的知識,涉及的知識點會多一點。練習6.4 編寫乙個與使用者互動的函式,要求使用者輸入乙個數字,計算生成該數字的階乘。在main函式中呼叫該函式。程式實現 include using namespace s...
系統學習C (4)
1 子類建立物件時 當從父類派生乙個子類並宣告乙個子類的物件時,它將先呼叫父類的建構函式,然後呼叫當前類的建構函式來建立物件 在釋放子類物件時,先呼叫的是當前類的析構函式,然後是父類的析構函式。下面簡單用程式展示這一點 father.h include using namespace std cla...