STL vecto初始化(二)

2021-09-22 22:39:48 字數 2302 閱讀 3707

向量(vector)是乙個封裝了動態大小陣列的順序容器(sequence container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。容器特性:

1.順序序列

順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元素。

2.動態陣列

支援對序列中的任意元素進行快速直接訪問,甚至可以通過指標算述進行該操作。操供了在序列末尾相對快速地新增/刪除元素的操作。

3.能夠感知記憶體分配器的(allocator-aware)

容器使用乙個記憶體分配器物件來動態地處理它的儲存需求。  

預設初始化

vectora;

cout << "capacity: " << a.capacity() << endl;

cout << "size: " << a.size() << endl;

capacity: 0

size: 0

vector為空, size為0,表明容器中沒有元素,而且 capacity 也返回 0,意味著還沒有分配記憶體空間。這種初始化方式適用於元素個數未知,需要在程式中動態新增的情況。

= 或者()初始化

vectorb(a);

vectorb = a;

vector中存在=操作,該操作是賦值操作,用乙個vector覆蓋另乙個,且是深複製。

結論:vector內資料使用結構體的話是深拷貝,vector內的資料會拷貝乙份儲存,vector內資料不會丟失。如果vector內資料是指標的話是進行淺拷貝,資料超出作用域後會自動析構,vector內所指向的資料會被更改和丟失,所以vector如果作為全域性變數,不應該使用指標。 

列表初始化

vectora = ;

vectorb;

初始化為列表中元素的拷貝,列表中元素必須與a的元素型別相容,本例中必須是與整數型別相容的型別,整形會直接拷貝,其他型別會進行型別轉換。 

迭代器 初始化

vectorc(a.begin() + 2, a.end() - 1);
c初始化為兩個迭代器指定範圍中元素的拷貝,範圍中的元素型別必須與c的元素型別相容,在本例中c被初始化為。注意:由於只要求範圍中的元素型別與待初始化的容器的元素型別相容,因此迭代器來自不同的容器是可能的,例如,用乙個double的list的範圍來初始化ilist3是可行的。另外由於建構函式只是讀取範圍中的元素進行拷貝,因此使用普通迭代器還是const迭代器來指出範圍並沒有區別。這種初始化方法特別適合於獲取乙個序列的子串行。 

預設值初始化

vectord(10);
預設值初始化,d中將包含10個元素,每個元素進行預設的值初始化,對於int,也就是被賦值為0,因此d被初始化為包含10個0。當程式執行初期元素大致數量可預知,而元素的值需要動態獲取的時候,可採用這種初始化方式。 

指定值初始化

vectore(10,3);
指定值初始化,e被初始化為包含10個值為3

陣列來初始化

int n =  ;

vectora(n, n+5) ; //將陣列n的前5個元素作為向量a的初值

vectora(&n[1], &n[4]) ; //將n[1] - n[4]範圍內的元素作為向量a的初值

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

初始化 MyBatis初始化之載入初始化

在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...