c++学习笔记之数组及vector
生活随笔
收集整理的這篇文章主要介紹了
c++学习笔记之数组及vector
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、初始化
int n[10] = {1} ?當初始化值比數(shù)組元素少的時候,剩下的元素被初始化為0。int n[2] = {1, 2, 3} 當初始值比數(shù)組元素多的時候,編譯時會報錯。
static int n[10] ?不必進行初始化,static數(shù)組會自動初始化元素。
2、聲明數(shù)組
只能使用常量來聲明數(shù)組,否則會產(chǎn)生編譯錯誤。如:int a = 10;
int n[a];
這樣就會產(chǎn)生編譯錯誤。 int a = 10;
const int i = a;
int n[i];
這樣雖然i是用const修飾,但是賦值給他的a依然是一個變量,所以一樣會產(chǎn)生編譯錯誤。
尤其注意函數(shù)的傳參,用傳參來聲明數(shù)組會產(chǎn)生編譯錯誤。 const int i = 10;
int n[i];
這樣就不會產(chǎn)生編譯錯誤。
3、數(shù)組越界
與Java不同,在c++中數(shù)組越界不會報錯,編譯通過也可以正常運行,會得到一個默認值。但是數(shù)組越界是很嚴重的。雙向越界都不會報錯,也就是說下標為負值也不會報錯。
4、數(shù)組賦值
數(shù)組是不能直接賦值的。如:int n[1] = {0};
int m[1] = {0};
n = m;
這樣就好編譯錯誤
由于數(shù)組名是const指針,所以一個數(shù)組不能通過賦值運算賦給另一個數(shù)組。(常量指針不能用在賦值運算左側)
5、數(shù)組/vector長度
(1)與java不同,數(shù)組不能知道自身的長度。所以把一個數(shù)組當函數(shù)傳參時,也要把數(shù)組長度當函數(shù)傳參才行。如:void init(int nums[], int length)
(2)vector.size()是一個size_t類型的,不是int類型,一定要注意。在某些編譯器上直接轉int會報錯。
6、vector初始化及賦值
(1)vector初始化可以傳入另外一個vector2,這樣會拷貝vector2的數(shù)據(jù)來初始化,稱為拷貝構造函數(shù)。如: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)兩種形式來獲取元素。其中第一種方式與數(shù)組一樣不檢查邊界,而第二種方式會檢查邊界。8、函數(shù)傳參
數(shù)組作為函數(shù)傳參時是引用參數(shù),如void init(int a[])vector作為函數(shù)傳參時默認是傳值的,所以如果想引用傳參,必須加“&”,如void init(vector &a)。
所以使用vector函數(shù)傳參時一定要注意,盡量使用引用傳參,以免不必要的內(nèi)存占用。
9、字符串數(shù)組
可以直接使用字符串初始化,如:char a[] = "abcd";
數(shù)組長度會比字符串長度大1,因為數(shù)組末尾有一個‘\0’,來表示這個數(shù)組是一個字符串,如果沒有這個結尾,那只是一個普通的數(shù)組。
比如上面的數(shù)組a應該是[‘a(chǎn)’, 'b', 'c', 'd', '\0']的一個長度為5的數(shù)組。
可以直接使用,如cout<<a<<endl可以直接打印字符串
所以一定要注意長度,如果保存超過聲明長度的字符串,數(shù)組末尾就沒有'\0'字符,而且會覆蓋內(nèi)存中數(shù)組后面的數(shù)據(jù),造成溢出。
10、多維數(shù)組初始化
int a[2][3] = {1, 2, 3, 4, 5} ? ?會按照順序(先行后列)為多維數(shù)組初始化,不夠的初始化為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}} 可以沒有行數(shù),這樣會根據(jù)初始化的值自動判斷出行數(shù),但是一定要有列數(shù)。
11、vector排序
std::sort(vector.begin(), vector.end());?
總結
以上是生活随笔為你收集整理的c++学习笔记之数组及vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++学习笔记之基础篇
- 下一篇: Animation插值器:解决Andro