数组是一种基本的数据结构,用于存储相同类型的数据项的集合。它在内存中连续地分配空间,并通过索引来访问每个元素。
数组的基本概念
数组可以看作是一个具有固定大小的容器,其中所有元素都是同一类型的变量。这些元素在内存中的位置是连续的,并且可以通过索引来访问。
数组的声明
数组可以通过以下方式声明:
type arrayName[arraySize];
其中 type
是数组元素的数据类型,arrayName
是数组的名字,arraySize
是数组的大小,即元素的数量。
例如:
int numbers[5]; // 声明一个整型数组,包含5个整数 char letters[26]; // 声明一个字符数组,包含26个字符
数组的初始化
数组可以在声明时进行初始化:
int numbers[5] = {1, 2, 3, 4, 5}; char letters[5] = {'a', 'b', 'c', 'd', 'e'};
如果初始化列表提供的元素少于数组的大小,则剩余的元素将自动初始化为0或空字符:
int numbers[5] = {1, 2}; // 其余元素将被初始化为0
数组的索引
数组的索引从0开始,到arraySize - 1
结束。可以通过索引来访问和修改数组的元素:
numbers[0] = 10; // 修改第一个元素 int firstNumber = numbers[0]; // 获取第一个元素
多维数组
多维数组是一种特殊的数组形式,它允许你在多个维度上存储数据。
二维数组
二维数组可以看作是一个表格,其中包含行和列。声明二维数组的方法如下:
type arrayName[rowSize][columnSize];
例如:
int matrix[3][3]; // 声明一个3x3的整型矩阵
二维数组也可以在声明时初始化:
int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
访问二维数组
访问二维数组的元素需要提供两个索引:行索引和列索引:
matrix[0][0] = 10; // 修改第一行第一列的元素 int element = matrix[1][2]; // 获取第二行第三列的元素
动态数组
动态数组允许在程序运行时根据需要调整数组的大小。C++ 中的动态数组通常是通过指针和 new
操作符来实现的。
动态数组的声明
动态数组通常在堆(heap)上分配内存,使用 new
操作符:
int* numbers = new int[5]; // 分配一个包含5个整数的动态数组
动态数组的初始化
动态数组可以在分配时进行初始化:
int* numbers = new int[5]{1, 2, 3, 4, 5};
动态数组的释放
使用完动态数组后,需要通过 delete[]
来释放内存:
delete[] numbers;
动态数组的扩展
可以通过重新分配内存来扩展动态数组的大小:
int* temp = new int[newSize]; for (int i = 0; i < oldSize; ++i) { temp[i] = numbers[i]; } delete[] numbers; numbers = temp;
数组的遍历
遍历数组通常通过循环来实现。常见的遍历方法包括 for
循环和 foreach
循环(在C++11及以后版本中可用)。
使用 for 循环遍历
for (int i = 0; i < arraySize; ++i) { std::cout << array[i] << " "; }
使用 foreach 遍历
for (auto element : array) { std::cout << element << " "; }
数组的常见操作
查找元素
查找数组中的元素通常使用线性搜索,即逐个比较数组中的元素:
bool found = false; for (int i = 0; i < arraySize && !found; ++i) { if (array[i] == targetElement) { found = true; } }
排序数组
数组排序可以通过多种算法实现,如冒泡排序、选择排序、插入排序等。这里以冒泡排序为例:
for (int i = 0; i < arraySize - 1; ++i) { for (int j = 0; j < arraySize - i - 1; ++j) { if (array[j] > array[j + 1]) { std::swap(array[j], array[j + 1]); } } }
数组的应用场景
数组广泛应用于各种编程任务中,包括但不限于:
- 存储一组相关的数据。
- 实现数据结构,如栈、队列等。
- 作为其他数据结构的基础,如图和树。
小结
本章介绍了C++中数组的概念和使用方法,包括数组的声明、初始化、索引、遍历、操作以及多维数组和动态数组的处理。理解数组对于任何C++程序员来说都是非常重要的基础技能。