vector容器是包含 t 型別元素的序列容器,和 array容器相似,不同的是 vector容器的大小可以自動增長,從而可以包含任意數量的元素;因此型別引數 t 不再需要模板引數 n。只要元素個數超出 vector 當前容量,就會自動分配更多的空間。只能在容器尾部高效地刪除或新增元素。
vector容器可以方便、靈活地代替陣列。在大多數時候,都可以用 vector代替陣列存放元素。只要能夠意識到,vector在擴充套件容量,以 及在序列內部刪除或新增元素時會產生一些開銷;但大多數情況下,**不會明顯變慢。 為了使用 vector容器模板,需要在**中包含標頭檔案 vector。
下面是乙個生成存放 double 型元素的 vector容器示例:
std::vectorvalues;
因為容器中沒有元素,所以沒有分配空間,當新增第乙個資料項時,會自動分配記憶體。可以像下面這樣通過呼叫 reserve() 來增加容器的容量:
values.reserve(20);
這樣就設定了容器的記憶體分配,至少可以容納 20 個元素。如果當前的容量已經大於或等於 20 個元素,那麼這條語句什麼也不做。注意,呼叫 reserve() 並不會生成任何元素。values 容器這時仍然沒有任何元素,直到新增了 20 個元素後,才會分配更多的記憶體。呼叫 reserve() 並不會影響現有的元素。
當然,如果通過呼叫 reserve() 來增加記憶體,任何現有的迭代器,例如開始迭代器和結束迭代器,都會失效,所以需要重新生成它們。這是因為,為了增加容器的容量,vector容器的元素可能已經被複製或移到了新的記憶體位址。
建立 vector 容器的另一種方式是使用初始化列表來指定初始值以及元素個數:
std::vectorprimes ;
以初始化列表中的値作為元素初始值,生成有 8 個素數的 vector 容器。
分配記憶體是比較花費時間的,所以最好只在必要時分配。vector 使用演算法來增加容量,這個演算法依賴乙個經常使用的常對數來實現,這在早些時候會導致分配一些非常小的記憶體,但是隨著 vector 容量的增大,記憶體增長數也會變大。可以如下所示,使用初始元素個數來生成 vector 容器:
std::vectorvalues(20);
這個容器開始時有 20 個元素,它們的預設初始值都為 0。生成容器時,同時指定元素個數,就能夠減少空間額外分配的次數,這是乙個很好的習慣。
注意,圓括號中的 20 表示元素的個數,是上述語句的核心。這裡不能使用 {}。如果如下所示定義 vector 容器,會產生不同的結果:
std::vectorvalues ;
vector 並沒有 20 個元素。它只有乙個元素,並以 20 作為初始值。新增元素會導致分配額外的記憶體。
如果不想用 0 作為預設值,可以指定乙個其他值:
std::vectornumbers(20, 99l);
第二個引數指定了所有元素的初始值,因此這 20 個元素的值都是 99l。第乙個元素指定了 vector 中的元素個數,它不需要是乙個常量表示式。它可以是乙個表示式執行後的結果,也可以是從鍵盤輸入的數。
可以用元素類印相同的容器來初始化 vector容器。用一對迭代器來指定初始值的範圍。下面是乙個示例:
std::arraywords ;
std::vectorwords_copy ;
words_copy 被 words 陣列容器中的元素初始化。如果使用移動迭代器指定 words_copy 的初始化範圍,words 中的元素將會從 words 移到 words_copy。這裡有乙個示例:
std::vector::string〉words_copy ;
words_copy 會像前面那樣被初始化。但元素是移動過來的而不是複製過來的,所以 words 陣列中的字串物件現在都是空字串。
c 之vector(建立容器)
表示物件的集合,所有物件的型別都相同 集合中每個物件都有乙個對應的索引,用於訪問物件 標頭檔案 include using std vector提供資訊的方式為 在模板名字後面跟著的一對尖括號裡放上資訊 vectorv1不同型別的元素只能放入與之型別相對應的容器中,不能亂搭 初始化vector物件的...
vector向量容器
vector容器是陣列的乙個泛化推廣,不僅可以像陣列那樣進行元素的隨機訪問,還可以在容器的尾端插入新元素,實現了random access container和back insertion sequence概念。vector具有自動的記憶體管理功能,對於元素的插入和刪除,能夠動態調整占用的記憶體空間...
實現vector容器
在c stl中 每一種容器都有其自己對應的迭代器實現。迭代器也成為了演算法和容器之間的橋梁。今天先模擬一下vector 容器,以及對應的迭代器。一 vector實質是可變長的陣列 空間連續 所謂的可變長其實是偽可變長。為了實現可變長,vector的工作實質 1 初始分配空間大小時,分配按實際需求分配...