C++数据结构之数组(详解)
1.介绍
在C++中,数组是一种基本的数据结构,用于存储相同类型的元素的集合。数组的元素在内存中是连续存储的,可以通过索引访问。下面将详细介绍C++数组的相关内容。
2.数组的定义
数组的定义需要指定元素的类型和数组的大小。
type arrayName[arraySize];
type:数组元素的类型(如 int、char)等。
arrayName:数组的名称。
arraySize:数组的大小(必须是常量表达式)。
示例:
int arr[5]; // 定义一个包含 5 个整数的数组
3.数组的初始化
数组可以在定义时初始化,也可以后续赋值。
(1)定义时初始化
int arr[5] = {1, 2, 3, 4, 5}; // 初始化数组
(2)部分初始化
int arr[5] = {1, 2}; // 前两个元素初始化为 1 和 2,其余为 0
(3)自动推断大小
int arr[] = {1, 2, 3, 4, 5}; // 数组大小自动推断为 5
4.访问数组元素
数组通过索引访问,索引从0开始。
int arr[5] = {10, 20, 30, 40, 50};
std::cout << arr[0]; // 输出 10
std::cout << arr[2]; // 输出 30
5.数组的遍历
可以使用循环遍历数组。
for (int i = 0; i < 5; i++) {
std::cout << arr[i] << " ";
}
//范围for循环(C++11及以上)
for (int num : arr) {
std::cout << num << " ";
}
6.数组的大小
可以使用sizeof运算符计算数组的大小或元素个数。
int arr[5] = {1, 2, 3, 4, 5};
std::cout << "数组大小(字节数): " << sizeof(arr) << std::endl; // 输出 20(5 * 4)
std::cout << "数组元素个数: " << sizeof(arr) / sizeof(arr[0]) << std::endl; // 输出 5
7.多维数组
C++支持多维数组(如二维数组,三维数组等)。
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
std::cout << arr[1][2]; // 输出 7
8.数组的局限性
局限性:数组的大小必须在定义时确定,且不能动态调整。
越界访问:访问数组时如果索引超出范围,会导致未定义行为。
不支持动态扩展:数组的大小不能动态扩展或缩小。
9.数组与指针
数组名是一个指向数组首地址的指针。
int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr; // ptr 指向数组的第一个元素
std::cout << *ptr; // 输出 1
std::cout << *(ptr + 2); // 输出 3
10.数组作为函数参数
数组可以作为函数参数传递,但会退化为指针。
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printArray(arr, 5); // 输出 1 2 3 4 5
return 0;
}
11.动态数组
如果需要动态调整数组的大小,可以使用vector(动态数组)。
#include <vector>
std::vector<int> vec = {1, 2, 3};
vec.push_back(4); // 动态扩展数组
std::cout << vec[3]; // 输出 4
12.数组的替代方案
(1)array(C++11及以上)
特点:固定大小的数组,提供更好的类型安全性和接口。
示例:
#include <array>
std::array<int, 5> arr = {1, 2, 3, 4, 5};
std::cout << arr[2]; // 输出 3
(2)vector
特点:动态大小的数组,支持自动扩展和收缩。
示例:
#include <vector>
std::vector<int> vec = {1, 2, 3};
vec.push_back(4); // 动态扩展
std::cout << vec[3]; // 输出 4
13.总结
数组作为C++中最基本的数据结构之一,适合存储固定大小的元素集合。对于更灵活的需求,推荐使用vector和array。
如有错误,敬请指正!!!