C 系統學習之三 向量

2022-08-19 12:06:13 字數 2406 閱讀 1248

定義:vector表示物件的集合,其中所有物件的型別都相同。

訪問方式:索引

標頭檔案:

本質:類模板

也允許把乙個vector物件的元素拷貝給另外一vector物件,但兩個vector物件的型別必須相同。

c++提供的幾種不同的初始化方式,大多數情況下這些初始化方式可以相互等價地使用,但有三種特殊情況:

vector v1("

a","

an","

name

"); //

錯誤vector v2; //

列表初始化

vector v(10,-1);    //

10個-1

vector s(10,"

hi"); //

10個string的hi

通常情況下,可只提供vector物件容納的元素數量而不用初始值,庫會為每乙個元素提供乙個初始化值,這個值由vector中物件的型別決定。

vector v(10);    //

10個元素,每個初始化為0

vector s(10); //

10個元素都初始化為空字元

note:

初始化時,圓括號是用來構造vector物件的,如果是花括號則表示是列表初始化,但是如果無法執行列表初始化時將會考慮其他初始化方式。

vector v1(10);    //

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個預設初始化的元素

利用成員函式push_back();

使用下標訪問元素,必須要確保下標的合法性,只能對已經存在的元素執行下標操作,確保下標合法的乙個有效手段就是盡可能使用範圍for語句。

vector v;

for (auto &i : v)

除了使用下標來訪問string物件的字元和vector物件的元素之外,還可以使用迭代器來達到同樣的效果。

迭代器和指標類似,都提供了對物件的間接訪問,但也有區別。獲取迭代器不是取位址符,有迭代器的型別同時擁有返回迭代器的成員。

迭代器相等的判定原則:兩個迭代器指向的元素相同或者都是同乙個容器的尾迭代器,則相等。

iterator和const_iterator來表示迭代器的型別。const_iterator能讀取但不能修改它所指的元素值。如果vector物件或string物件是乙個常量,只能使用const_terator;如果vector物件或string物件不是常量,那麼既能使用iterator也能使用const_iterator。

begin和end返回的具體型別由物件是否是常量決定,如果物件是常量,begin和end返回const_iterator,如果物件不是常量,返回iterator.

vectorv;

cosnt vector

cv;auto it1=v.begin(); //

it1的型別是vector::iterator

auto it2=cv.begin(); //

it2的型別是vector::const_iterator

c++新標準引入了兩個新函式,分別是cbegin和cend,不論物件本身是否是常量,返回值都是const_iterator.

(*it).men

it->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...