定制網(wǎng)站建設(shè)公司費(fèi)用搜狗收錄查詢
目錄
- 一、一維數(shù)組
- 1、定義和初始化
- 2、訪問和修改
- 3、元素逆置和冒泡排序
- 二、二維數(shù)組(用指針進(jìn)行訪問與修改)
- 1、定義和初始化
- 2、訪問與修改
- 三、更高維度的數(shù)組
- 1、三維數(shù)組
- 2、高維數(shù)組
一、一維數(shù)組
1、定義和初始化
在 C++ 中,可以使用下面的語(yǔ)法定義一個(gè)一維數(shù)組:
type arrayName [ arraySize ];
其中,type 是數(shù)組元素的類型,arrayName 是數(shù)組的名稱,arraySize 是數(shù)組中元素的數(shù)量。
例如,下面的代碼定義了一個(gè)包含 5 個(gè)整數(shù)的一維數(shù)組:
int numbers[5];
在定義數(shù)組時(shí),可以同時(shí)初始化數(shù)組中的元素。例如:
int numbers[5] = {1, 2, 3, 4, 5};
也可以只初始化部分元素,未初始化的元素將被自動(dòng)設(shè)置為默認(rèn)值(通常為 0)。例如:
int numbers[5] = {1, 2}; // 等價(jià)于 {1, 2, 0, 0, 0}
如果在定義數(shù)組時(shí)不指定數(shù)組大小,則編譯器會(huì)根據(jù)初始化元素的數(shù)量自動(dòng)確定數(shù)組大小。例如:
int numbers[] = {1, 2, 3, 4, 5}; // 等價(jià)于 int numbers[5] = {1, 2, 3, 4, 5};
2、訪問和修改
在定義了一個(gè)一維數(shù)組之后,可以通過下標(biāo)運(yùn)算符 [] 訪問或修改數(shù)組中的元素。下標(biāo)從 0 開始,最大值為 arraySize - 1。例如:
int numbers[5] = {1, 2, 3, 4, 5};
std::cout << numbers[0] << std::endl; // 輸出第一個(gè)元素
numbers[1] = 42; // 修改第二個(gè)元素
注意,在訪問或修改數(shù)組中的元素時(shí),必須確保下標(biāo)在合法范圍內(nèi)。否則會(huì)發(fā)生未定義行為。
除了使用下標(biāo)運(yùn)算符訪問或修改數(shù)組中的元素外,還可以使用指針進(jìn)行操作。因?yàn)樵?C++ 中,數(shù)組名可以理解為指向數(shù)組第一個(gè)元素的指針,直接輸出數(shù)組名是數(shù)組的首元素地址(16進(jìn)制)。例如:
int numbers[5] = {1, 2, 3, 4, 5};
std::cout << numbers << std::endl; // 輸出數(shù)組首地址
std::cout << *numbers << std::endl; // 輸出第一個(gè)元素
*(numbers + 1) = 42; // 修改第二個(gè)元素
此外,在 C++ 中還可以使用范圍 for 循環(huán)遍歷一維數(shù)組中的所有元素。例如:
int numbers[5] = {1, 2, 3, 4, 5};
for (int n : numbers) {std::cout << n << std::endl; // 輸出每個(gè)元素
}
3、元素逆置和冒泡排序
①元素逆置
用雙指針?biāo)惴▽⑵渲械脑啬嬷谩?/p>
#include <iostream>int main() {int numbers[] = {3,2,1,4,5};int size = sizeof(numbers) / sizeof(int);//將整個(gè)數(shù)組占用內(nèi)存大小除單個(gè)數(shù)組內(nèi)存大小得到數(shù)組長(zhǎng)度// 雙指針?biāo)惴?/span>int* left = numbers;int* right = numbers + size - 1;while (left < right) {int temp = *left;//暫存值左值*left = *right;//將較大值賦給左邊元素*right = temp;//較小值賦給右邊元素left++;right--;}// 輸出結(jié)果for (int n : numbers) {std::cout << n << " ";}std::cout << std::endl;return 0;
}
②冒泡排序
#include <iostream>int main() {int numbers[] = {4, 5, 2, 3,1};int size = sizeof(numbers) / sizeof(int);// 冒泡排序for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (numbers[j] > numbers[j + 1]) {int temp = numbers[j];numbers[j] = numbers[j + 1];numbers[j + 1] = temp;}}}// 輸出結(jié)果for (int n : numbers) {std::cout << n << " ";}std::cout << std::endl;return 0;
}
二、二維數(shù)組(用指針進(jìn)行訪問與修改)
1、定義和初始化
二維數(shù)組是由多個(gè)一維數(shù)組組成的數(shù)組。在 C++ 中,可以使用下面的語(yǔ)法定義一個(gè)二維數(shù)組:
type arrayName [ xSize ][ ySize ];
其中,type 是數(shù)組元素的類型,arrayName 是數(shù)組的名稱,xSize 和 ySize 分別表示二維數(shù)組中第一維和第二維的大小。
例如,下面的代碼定義了一個(gè)包含兩行三列整數(shù)的二維數(shù)組:
int matrix[2][3];
與一維數(shù)組類似,在定義二維數(shù)組時(shí)也可以同時(shí)初始化其中的元素。例如:
int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};
也可以只初始化部分元素,未初始化的元素將被自動(dòng)設(shè)置為默認(rèn)值(通常為 0)。例如:
int matrix[2][3] = {{1},{4}
}; // 等價(jià)于 {{1, 0, 0}, {4, 0, 0}}
如果在定義二維數(shù)組時(shí)不指定第一維和第二維的大小,則編譯器會(huì)根據(jù)初始化元素的數(shù)量自動(dòng)確定它們。例如:
int matrix[][3] = {{1, 2, 3},{4, 5, 6}
}; // 等價(jià)于 int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
2、訪問與修改
在定義了一個(gè)二維數(shù)組之后,可以通過兩個(gè)下標(biāo)運(yùn)算符 [][] 訪問或修改其中的元素。第一個(gè)下標(biāo)表示行號(hào)(從上到下),第二個(gè)下標(biāo)表示列號(hào)(從左到右)。例如:
int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};
std::cout << matrix[0][1] << std::endl; // 輸出第一行第二列的元素
matrix[1][2] = 42; // 修改第二行第三列的元素
注意,在訪問或修改二維數(shù)組中的元素時(shí),必須確保下標(biāo)在合法范圍內(nèi)。否則會(huì)發(fā)生未定義行為。
除了使用下標(biāo)運(yùn)算符訪問或修改二維數(shù)組中的元素外,還可以使用指針進(jìn)行操作。因?yàn)樵?C++ 中,二維數(shù)組名實(shí)際上是一個(gè)指向一維數(shù)組的指針,進(jìn)行解引用后得到的是一個(gè)一維數(shù)組首元素的指針,再次進(jìn)行解引用得到的才是首元素的值。例如:
int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};
std::cout << **matrix << std::endl; // 輸出第一行第一列的元素
*(*(matrix + 1) + 2) = 42; // 修改第二行第三列的元素
此外,在 C++ 中還可以使用嵌套循環(huán)遍歷二維數(shù)組中的所有元素。例如:
int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};
for (auto& row : matrix) {for (int n : row) {std::cout << n << std::endl; // 輸出每個(gè)元素}
}
三、更高維度的數(shù)組
1、三維數(shù)組
三維數(shù)組是由多個(gè)二維數(shù)組組成的數(shù)組。下面的代碼定義了一個(gè)包含兩個(gè)二維數(shù)組的三維數(shù)組,每個(gè)二維數(shù)組都包含兩行三列整數(shù):
int matrix[2][2][3] = {{{1, 2, 3},{4, 5, 6}},{{7, 8, 9},{10, 11, 12}}
};
std::cout << matrix[0][1][2] << std::endl; // 輸出第一個(gè)二維數(shù)組中第二行第三列的元素
matrix[1][0][1] = 42; // 修改第二個(gè)二維數(shù)組中第一行第二列的元素//遍歷三維數(shù)組
for (auto& twoDArray : matrix) {for (auto& row : twoDArray) {for (int n : row) {std::cout << n << " ";}}
}
三維數(shù)組名實(shí)際上是一個(gè)指向二維數(shù)組的指針。對(duì)它進(jìn)行一次解引用操作時(shí),將會(huì)得到一個(gè)二維數(shù)組名,它也是一個(gè)指針,指向一維數(shù)組。再次對(duì)它進(jìn)行解引用操作時(shí),會(huì)得到一個(gè)一維數(shù)組名,它也是一個(gè)指針,指向一維數(shù)組首元素。最后對(duì)它進(jìn)行解引用操作,將會(huì)得到一維數(shù)組首元素的值,因此這里需要三個(gè)解引用運(yùn)算符。
//用指針來訪問和修改三維數(shù)組
std::cout << *(*(*(matrix + 1) + 0) + 1) << std::endl; // 輸出第二個(gè)二維數(shù)組中第一行第二列的元素
*(*(*(matrix + 1) + 0) + 1) = 42; // 修改第二個(gè)二維數(shù)組中第一行第二列的元素
在上面的代碼中,matrix 是一個(gè)指向二維數(shù)組 {{1, 2, 3}, {4, 5, 6}} 的指針。對(duì)它進(jìn)行一次解引用操作并加上偏移量 1 后,將會(huì)得到另一個(gè)二維數(shù)組名 {{7, 8, 9}, {10, 11, 12}},再次對(duì)它進(jìn)行解引用操作并加上偏移量 0 ,得到一個(gè)一維數(shù)組名 {7, 8, 9}。最后對(duì)它進(jìn)行解引用操作并加上偏移量 1 后,得到一維數(shù)組中第二個(gè)元素的值 8
2、高維數(shù)組
四維數(shù)組可以看成由多個(gè)三維數(shù)組所組成的數(shù)組,依此類推,高維數(shù)組可以看成由多個(gè)低一維數(shù)組所組成的數(shù)組。