日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++学习笔记之数组及vector

發布時間:2024/4/15 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++学习笔记之数组及vector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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());

?

總結

以上是生活随笔為你收集整理的c++学习笔记之数组及vector的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。