這幾天因為要做一個東西,在使用數組跟指標時出了些問題,於是回過頭來再看了下這方面的知識,發現每看一次都會收穫不小。
C++語言提供了兩種類似於vector和迭代器類型的低級複合類型——數組和指標。與vector類型相似,數組也可以儲存某些類型的一組對象;而它們的區別在於,數組的長度是固定的。數組只要一建立,就不允許添加新的元素。指標則可以像迭代器一樣用於遍曆和檢查數組中的元素。
我對於數組和指標不怎麼喜歡,感覺沒有vector方便,其實現代的C++程式中多數使用vector和迭代器類型,而不怎麼使用低級的數組和指標。在設計程式時,只有在強調速度時才在類實現的內部使用數組和指標。
不管喜不喜歡用它們,都要學好它們,因為有些時候它是解決一些問題的關鍵,正如我現在做的東西,呵呵還是老老實實地把它的用法學好才是硬道理。
顯式初始化數組元素
在定義數組時,可為其元素提供一組用逗號分隔的初值,這些初值用花括弧{}括起來,稱為初始化列表:
const unsigned array_size = 3;int ia[array_size] = {0,1,2};
如果沒有顯式提供元素初值,則數組元素會像普通變數一樣初始化:
- 在函數體外定義的內建數組,其元素均初始化為 0;
- 在函數體內定義的內建數組,其元素無初始化;
- 不管數組在哪裡定義,如果其元素為類類型,則自動調用該類的預設建構函式進行初始化;如果該類沒有預設建構函式,則必須為該數組的元素提供顯式初始化。
數組操作
與vector元素一樣,數組元素可用下標操作符來訪問,數組元素也是從0開始計數。對於一個包含10個元素的數組,正確的下標值是從0到9,而不是從1到10。
在用下標訪問元素時,vector使用vector::size_type作為下標的類型,而數組下標的正確類型則是size_t。
我下面寫的例子是用for迴圈遍曆數組的10個元素,並以其下標值作為各個元素的初始值:
//數組複習練習#include<iostream>using namespace std;//把數組的下標賦值給數組對應下標的值int main(){const size_t array_size = 10; //size_t數組下標類型int ia[array_size]; //10 ints,elements are uninitializedcout<<"ai的元素:"; //loop through array,assigning value of its index to each elementfor ( size_t ix = 0; ix != array_size; ++ix ){ia[ix] = ix;cout<<ia[ix]<<",";}cout<<endl;return 0;}
同樣使用以上迴圈還可以實習把一個數組複製給另一數組:
//數組複習練習#include<iostream>using namespace std;int main(){const size_t array_size = 7;int ia1[] = {0,1,2,3,4,5,6};int ia2[array_size]; //local array,elements unintializedcout<<"ai2的元素:";//copy elements from ia1 into ia2for(size_t ix = 0; ix != array_size; ++ix){ia2[ix] = ia1[ix];cout<<ia2[ix]<<",";}cout<<endl;return 0;}