文章目录
- **定义数组**
- **初始化数组**
- **访问数组元素**
- **一维数组与多维数组**
- **数组与指针**
- **数组的局限性**
- **现代C++中的替代方案**
- 以下是一个C++程序实例,演示了如何定义、初始化、访问一维数组以及使用循环遍历数组:
C++ ——数组
C++ 中的“数组”是一种基本的数据结构,它代表了一段连续的内存区域,用于存储固定数量的相同类型的数据元素。下面对C++中的数组进行全面介绍:
定义数组
定义数组的基本语法如下:
数据类型 名称[大小];
其中:
- 数据类型:指明数组中每个元素的类型,可以是任何C++内置类型(如
int
、float
、char
)或用户自定义类型(如结构体、类)。 - 名称:为数组赋予一个唯一的标识符,用于在程序中引用该数组。
- 大小:是一个非负整数常量表达式,表示数组中元素的数目。注意,数组大小在编译时就必须确定,不能动态改变。
例如,定义一个包含5个整数的数组:
int numbers[5];
这表示创建了一个名为 numbers
的数组,能够存储5个 int
类型的值。
初始化数组
数组可以在定义时直接初始化,通过在大括号 {}
内列出初始值,按照从左到右的顺序依次赋给数组元素。如果初始值数量小于数组大小,剩余元素将被默认初始化(通常是整型为0,浮点型为0.0,对象类型为构造函数的默认值)。例如:
int scores[5] = {100, 95, 9Ⅰ8, 85, 80};
或者,如果初始值数量与数组大小相同,可以省略数组大小:
int scores[] = {100, 95, 98, 85, 80}; // 编译器自动推断出数组大小为5
也可以使用花括号列表的初始化形式来初始化所有元素为同一值:
int emptyArray[10] = {0}; // 所有元素都初始化为0
访问数组元素
数组元素通过索引来访问,索引是从0开始的整数。访问数组元素的语法是:
数组名[索引]
合法的索引范围是 0
到 数组大小 - 1
。例如,访问 numbers
数组的第一个和最后一个元素:
int firstElement = numbers[0]; // 获取第一个元素
int lastElement = numbers[4]; // 获取最后一个元素
访问越界元素会导致未定义行为,这是C++编程中的常见错误源。
一维数组与多维数组
C++ 支持一维数组(线性数组)、二维数组(表格状数组)乃至更高维度的数组。二维数组可以看作是数组的数组,其定义语法如下:
数据类型 名称[行数][列数];
例如,定义一个3行4列的整数矩阵:
int matrix[3][4];
访问二维数组元素时需要提供两个索引,分别对应行和列:
matrix[row][column];
数组与指针
数组名被视为指向其首元素的常量指针。因此,可以使用指针运算来遍历数组:
for (int i = 0; i < 5; ++i) {cout << numbers[i] << ' ';
}// 或者使用指针
int *p = numbers;
for (int i = 0; i < 5; ++i, ++p) {cout << *p << ' ';
}
数组的局限性
尽管数组在简单数据存储和快速随机访问上很有用,但它们有一些固有的局限性:
- 固定大小:一旦数组创建,其大小就不能改变。如果需要动态调整容量,通常需要使用
std::vector
这样的容器类。 - 内存连续性要求:对于大数据集或复杂数据结构,连续内存分配可能变得困难,且可能导致内存碎片。
- 没有内置边界检查:访问越界不会引发运行时错误,而是导致未定义行为,这在调试时可能难以察觉。
现代C++中的替代方案
在现代C++编程中,虽然数组仍然是基础数据结构,但为了克服其局限性并利用标准库提供的便利,通常推荐使用标准模板库(STL)中的容器,如 std::vector
、std::array
或 std::deque
。这些容器提供了动态大小调整、边界检查、迭代器支持、算法集成等更高级的功能,增强了代码的健壮性和可维护性。
总结来说,C++ 中的数组是一种基础而高效的存储多个同类型数据的方式,理解其定义、初始化、访问方法以及局限性对于编写和调试C++程序至关重要。在实际项目中,应根据具体需求权衡使用原生数组还是更高级的容器类。
以下是一个C++程序实例,演示了如何定义、初始化、访问一维数组以及使用循环遍历数组:
#include <iostream>int main() {// 定义并初始化一个包含5个整数的数组int grades[5] = {85, 92, 76, 9¾, 88};// 访问并输出数组中的特定元素std::cout << "First grade: " << grades[0] << std::endl;std::cout << "Last grade: " << grades[4] << std::endl;// 使用循环遍历并输出整个数组std::cout << "All grades:" << std::endl;for (size_t i = 0; i < 5; ++i) {std::cout << "Grade " << (i + 1) << ": " << grades[i] << std::endl;}return 0;
}
在这个示例中:
-
首先包含了
<iostream>
头文件,以便使用std::cout
进行输出。 -
定义了一个名为
grades
的一维数组,类型为int
,大小为5。同时使用初始化列表{85, 92, 76, 9¾, 88}
对数组进行了初始化,每个值对应数组的一个元素。 -
使用
grades[0]
和grades[4]
分别访问并输出数组的第一个(索引为0)和最后一个(索引为4)元素。 -
使用
for
循环遍历数组。循环变量i
从0开始,每次递增1,直到达到数组大小(5)。在每次循环中,通过grades[i]
访问当前索引处的元素,并将其值输出。同时输出了当前元素对应的索引位置(i + 1
),使得输出结果更易读。
编译并运行上述程序,将得到类似以下的输出:
First grade: 85
Last grade: 88
All grades:
Grade 1: 85
Grade 2: 92
Grade 3: 76
Grade 4: 9¾
Grade 5: 88
这个实例展示了C++中数组的基本操作,包括定义、初始化、访问以及遍历。在实际编程中,可以根据需要对数组进行更复杂的操作,如排序、查找、统计等。
python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)
50个开发必备的Python经典脚本(11-20)
50个开发必备的Python经典脚本(21-30)
50个开发必备的Python经典脚本(31-40)
50个开发必备的Python经典脚本(41-50)
————————————————
最后我们放松一下眼睛