來源自 這裡
Preface:
您可以使用 vector 來替代陣列,並使用陣列型式(Array idiom)的方式來操作vector,要使用 vector,必須含入vector表頭檔:
陣列型式(Array idiom) vector :
要建立 vector 型態的物件(Object),您必須提供元素型態與長度資訊,例如下例中建立 int 元素的 vector,並擁有10個元素:
您可以模彷陣列中存取元素的方式來存取
vector 的元素,使用下標(Subscript)運算子並指定索引來取得指定的元素,例如:
執行結果:
與陣列型態不同的是,vector 記得自己的長度資訊,您可以使用 size() 查詢 vector 的元素長度,或是使用empty() 測試長度是否為0.
當您宣告 vector 物件時,所有的元素值會有與型態相應的初始值,例如算術相關型態會被初始為0,指標型態初始為0(表示不指向任何位址),如果您打算 將所有元素初始為指定的值,則可以如下:
上例中將宣告有10個元素的
vector,並將所有的元素值初始為5.
如果您願意,您可以使用一個陣列來作為建構vector的引數(Argument),如此建構出來的 vector 會擁有陣列所指定的元素初值,在這之前, 您要先知道,宣告一個陣列時,陣列名稱所儲存的是第一個元素在記憶體中的位址值,對該位址值加一,表示移至下一個元素,當使用陣列來建構 vector 時, 要指定的是元素的起始位址與最後一個元素的下一個位址,例如以整個陣列來建構vector的話,可以這麼撰寫:
執行結果:
如果打算只使用陣列中的某個範圍來建構 vector,例如複製索引1到3的元素,則可以如下:
vector可以使用另一個vector作為引數來建構,例如以ivector1作為引數來建構ivector2:
vector 可以使用=直接指定給另一個 vector,這會將 vector 的值複製給被指定的 vector,例如:
執行結果:
由於指定時是將值一一複製加入目標 vector,所以您改變目標 vector 的值,並不會影響原來的 vector
Supplement:
* Cplusplus - vector
Preface:
您可以使用 vector 來替代陣列,並使用陣列型式(Array idiom)的方式來操作vector,要使用 vector,必須含入vector表頭檔:
- #include
要建立 vector 型態的物件(Object),您必須提供元素型態與長度資訊,例如下例中建立 int 元素的 vector,並擁有10個元素:
- vector<int> ivector(10);
- #include
- #include
- using namespace std;
- int main() {
- vector<int> ivector(10);
- for(int i = 0; i < ivector.size(); i++) {
- ivector[i] = i;
- }
- for(int i = 0; i < ivector.size(); i++) {
- cout << ivector[i] << " ";
- }
- cout << endl;
- return 0;
- }
與陣列型態不同的是,vector 記得自己的長度資訊,您可以使用 size() 查詢 vector 的元素長度,或是使用empty() 測試長度是否為0.
當您宣告 vector 物件時,所有的元素值會有與型態相應的初始值,例如算術相關型態會被初始為0,指標型態初始為0(表示不指向任何位址),如果您打算 將所有元素初始為指定的值,則可以如下:
- vector<int> ivector(10, 5);
如果您願意,您可以使用一個陣列來作為建構vector的引數(Argument),如此建構出來的 vector 會擁有陣列所指定的元素初值,在這之前, 您要先知道,宣告一個陣列時,陣列名稱所儲存的是第一個元素在記憶體中的位址值,對該位址值加一,表示移至下一個元素,當使用陣列來建構 vector 時, 要指定的是元素的起始位址與最後一個元素的下一個位址,例如以整個陣列來建構vector的話,可以這麼撰寫:
- #include
- #include
- using namespace std;
- int main() {
- int iarr[] = {1, 2, 3, 4, 5};
- vector<int> ivector(iarr, iarr + 5);
- for(int i = 0; i < ivector.size(); i++) {
- cout << ivector[i] << " ";
- }
- cout << endl;
- return 0;
- }
如果打算只使用陣列中的某個範圍來建構 vector,例如複製索引1到3的元素,則可以如下:
- #include
- #include
- using namespace std;
- int main() {
- int iarr[] = {1, 2, 3, 4, 5};
- vector<int> ivector(iarr + 1, iarr + 4);
- for(int i = 0; i < ivector.size(); i++) {
- cout << ivector[i] << " ";
- }
- cout << endl;
- return 0;
- }
- vector<int> ivector1(5, 1);
- vector<int> ivector2(ivector1);
- #include
- #include
- using namespace std;
- int main() {
- vector<int> ivector1(5, 1);
- vector<int> ivector2; // 定義一個空的vector
- ivector2 = ivector1;
- for(int i = 0; i < ivector2.size(); i++) {
- cout << ivector2[i] << " ";
- }
- cout << endl;
- ivector2[0] = 2;
- for(int i = 0; i < ivector2.size(); i++) {
- cout << ivector2[i] << " ";
- }
- cout << endl;
- for(int i = 0; i < ivector1.size(); i++) {
- cout << ivector1[i] << " ";
- }
- cout << endl;
- return 0;
- }
由於指定時是將值一一複製加入目標 vector,所以您改變目標 vector 的值,並不會影響原來的 vector
Supplement:
* Cplusplus - vector
沒有留言:
張貼留言