關於vector動態數組的初始化及其部分使用誤區

簡介

vector 就是一個不定長的數組,它封裝了一些常用的操作,定義時可以用vector< int >a,表示a是一個vector數組。a.size()可以訪問數組的長度,a.resize()可以改變它的大小,a.push_back()可以向其尾部增加元素,而a.pop_back()則是刪除其尾部元素。
vector是一個模板類,同時vector還可以嵌套另一個vector數組表示成一個二維數組的形式,這在一些數據範圍較大的題內很有用處。
比如普通一維數組開大於10910^{9}的長度就會報錯,二維是10510^{5},這時用動態數組就可以了。

初始化

vector<int>a(100);

這句是將a數組的長度初始化爲100,這是通過構造函數來實現的,還有其它許多構造函數,下面一一舉例。

vector<int>a(100,1);

這樣是將內部的100個元素全部初始化爲1.

vector<int>a(100,1);
    vector<int>b(a);

其中b是拷貝構造函數。

使用誤區

許多初學者(包括我)在使用時都直接將它當成了正常的數組來使用,但他們是不完全一樣的,vector是動態數組,使用前是需要給它分配空間的,跳過分配空間這一步的話,編譯器不會報錯,但會無法運行,如果用它提交程序的話會顯示runtime error。
正確的做法是利用其內部的構造函數來對它分配空間,或者選擇push_back()這一函數,分配完空間後動態數組就和正常數組無異啦。

在題目中的一些感悟

起初以爲它毫無利用價值,到現在發現其功能真的非常強大,不過因爲內存分配這個問題讓我RE了好多次才發現是這的問題,特意去搜了資料,所有問題都要追根溯源嘛,瞭解它的構造,認識到它的本質才能熟練掌握。加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章