c++學習筆記之數組及vector

c++學習筆記系列:http://blog.csdn.net/column/details/17301.html


1、初始化

int n[10] = {1}  當初始化值比數組元素少的時候,剩下的元素被初始化爲0。
int n[2] = {1, 2, 3} 當初始值比數組元素多的時候,編譯時會報錯。
static int n[10]  不必進行初始化,static數組會自動初始化元素。

2、聲明數組

只能使用常量來聲明數組,否則會產生編譯錯誤。如:
int a = 10;
int n[a];
這樣就會產生編譯錯誤。

int a = 10;
const int i = a;
int n[i];
這樣雖然i是用const修飾,但是賦值給他的a依然是一個變量,所以一樣會產生編譯錯誤。
尤其注意函數的傳參,用傳參來聲明數組會產生編譯錯誤。

const int i = 10;
int n[i];
這樣就不會產生編譯錯誤。

3、數組越界

與Java不同,在c++中數組越界不會報錯,編譯通過也可以正常運行,會得到一個默認值。但是數組越界是很嚴重的。
雙向越界都不會報錯,也就是說下標爲負值也不會報錯。

4、數組賦值

數組是不能直接賦值的。如:
int n[1] = {0};
int m[1] = {0};
n = m;
這樣就好編譯錯誤
由於數組名是const指針,所以一個數組不能通過賦值運算賦給另一個數組。(常量指針不能用在賦值運算左側)

5、數組/vector長度

(1)與java不同,數組不能知道自身的長度。所以把一個數組當函數傳參時,也要把數組長度當函數傳參才行。如:
void init(int nums[], int length)
(2)vector.size()是一個size_t類型的,不是int類型,一定要注意。在某些編譯器上直接轉int會報錯。

6、vector初始化及賦值

(1)vector初始化可以傳入另外一個vector2,這樣會拷貝vector2的數據來初始化,稱爲拷貝構造函數。如:
vector<int> a;
vector<int> b(a);
(2)將一個vector賦值給另外一個vector時,也是拷貝。
a = b;     //a是b的拷貝,依然是兩個不同的vector。
注意當兩個vector不同時進行賦值,左側的vector無論之前什麼長度,都會變成跟右側vector長度相等,元素相等。

7、vector獲取元素

可以用vector[i]或vector.at(i)兩種形式來獲取元素。其中第一種方式與數組一樣不檢查邊界,而第二種方式會檢查邊界。

8、函數傳參

數組作爲函數傳參時是引用參數,如void init(int a[])
vector作爲函數傳參時默認是傳值的,所以如果想引用傳參,必須加“&”,如void init(vector &a)。
所以使用vector函數傳參時一定要注意,儘量使用引用傳參,以免不必要的內存佔用。

9、字符串數組

可以直接使用字符串初始化,如:
char a[] = "abcd";
數組長度會比字符串長度大1,因爲數組末尾有一個‘\0’,來表示這個數組是一個字符串,如果沒有這個結尾,那只是一個普通的數組。
比如上面的數組a應該是[‘a’, 'b', 'c', 'd', '\0']的一個長度爲5的數組。
可以直接使用,如cout<<a<<endl可以直接打印字符串
所以一定要注意長度,如果保存超過聲明長度的字符串,數組末尾就沒有'\0'字符,而且會覆蓋內存中數組後面的數據,造成溢出

10、多維數組初始化

int a[2][3] = {1, 2, 3, 4, 5}    
會按照順序(先行後列)爲多維數組初始化,不夠的初始化爲0。既a[0][0]=1, a[0][1]=2 ... a[1][2]=0
int a[2][3] = {{1}, {2, 3}}    
會按每行進行初始化,不夠的初始化爲0。既a[0][0]=1, a[0][1]=0, a[0][2]=0, a[,1][0]=2, a[1][1]=3, a[1][2]=0
int a[2][1] = {{1}, {2, 3}}
這樣會編譯報錯,因爲每行只有一列,而{2, 3}超出了。同樣int a[1][2] = {{1, 2}, {1}}也是
int a[][2] = {{1}, {2, 3}}
可以沒有行數,這樣會根據初始化的值自動判斷出行數,但是一定要有列數

11、vector排序

std::sort(vector.begin(), vector.end());

發佈了106 篇原創文章 · 獲贊 30 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章