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