3.3 標準庫vector型別
vector是同一種型別的物件的集合,每個物件都有乙個對應的資料索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的記憶體。我們把vector稱作容器,是因為它可以包含其他物件。乙個容器中的所有物件都必須是同一種型別的。
vector是乙個類模板(class template,也就是c#中的泛型)。使用模板可以編寫乙個類定義或函式定義,而用於多個不同的資料型別。
vector不是一種資料型別,而只是乙個類模板,可用來定義任意多種資料型別。vector型別的每一種都指定了其儲存元素的型別。因此,vector和vector都是資料型別。
3.3.1 vector物件的定義和初始化
1. 建立確定個數的元素
vector物件的重要屬性就在於可以在執行時高效地新增元素。因為vector增長的效率高,當元素已知時,最好是通過動態地向它新增元素來讓它增長。
雖然可以對給定元素個數的vector物件預先分配記憶體,但更有效的方法是先初始化乙個空的vector物件,然後動態地增加元素。
2. 值初始化
vectorvec(10, "null");
如果沒有指定元素的初始化式,那麼標準庫將自行提供乙個元素初始值進行值初始化。
第12章將介紹一些有自定義建構函式但沒有預設建構函式的類,在初始化這種型別的vector物件時,程式設計師就不能僅提供元素個數,還需要提供元素初始值。
3.3.2 vector物件的操作
1. vector物件的size
成員函式size返回對應vector類定義的size_type的值。
vectorvec(10, "null");
vector::size_type siz = 5;
cout << vec[siz] << endl;
2. 向vector新增元素
push_back()操作接受乙個元素值,並將它作為乙個新的元素新增到vector物件的後面,也就是「插入」到vector物件的「後面:。
vectorvec(10, "null");
vector::size_type siz = 10;
vec.push_back("aaa");
cout << vec[siz] <
vector中的物件是沒有命名的,可以按vector中物件的位置來訪問它們。通常使用下標操作符來獲取元素。
vector的下標操作符接受乙個值,並返回vector中該對應位置的元素。
在for迴圈中,c++程式設計師習慣優先選用!=而不是《來編寫迴圈判斷條件。
4. 下標操作不新增元素
下標只能用於已存在的元素。
必須是已存在的元素才能用下標操作符進行索引。通過下標操作進行賦值時,不會新增任何元素。
對於下標操作符的使用有一點非常重要,就是僅能提取確實已存在的元素。
不幸的是,試圖對不存在的元素進行下標操作是程式設計過程中經常會犯的嚴重錯誤。所謂的」緩衝區溢位「錯誤就是對不存在的元素進行下標操作的結果。這樣的缺陷往往導致pc機和其他應用中最常見的安全問題。
第3章 標準庫型別
1.寫出string型別的五種初始化方法 string str string str value string str str2 string str n,c string str iterator1,iterator2 2.如何對string物件進行讀寫操作,如何讀入未知數目的string物件?i...
第3章 標準庫型別 1
3.1 命名空間的using宣告 使用using宣告可以在不需要加字首namespace name 的情況下訪問命名空間中的名字。一旦使用了using宣告,我們就可以直接引用名字,而不需要再引用該名字的命名空間。include stdafx.h include using std cout usin...
第3章 標準庫型別 2
3.2.3 string物件的操作 1.string的size和empty操作 string物件的長度指的是string物件中字元的個數,可以通過size操作獲取。string str anders cout str.size endl empty 成員函式將返回bool值,如果string物件為空...