复合数据类型
1. 数组:存储相同类型数据的集合
-
数组的概念: 数组是一种可以存储相同数据类型 的多个元素的线性数据结构。
-
数组的声明: 声明数组需要指定数组的类型、名称和元素的个数(大小)。
c++int numbers[5]; // 声明一个可以存储 5 个整数的数组 double prices[10]; // 声明一个可以存储 10 个双精度浮点数的数组
-
数组的初始化: 可以在声明数组的同时进行初始化。
c++int numbers[5] = {1, 2, 3, 4, 5}; // 初始化数组的 5 个元素 double prices[3] = {19.99, 29.95, 99.99};
部分初始化: 如果初始化时提供的元素少于数组的大小,剩余的元素将自动初始化为 0(对于数值类型)。
c++int scores[5] = {80, 90}; // scores[0] = 80, scores[1] = 90, scores[2] = 0, scores[3] = 0, scores[4] = 0
省略大小的初始化: 如果初始化时提供了所有元素的初始值,可以省略数组的大小。
c++int data[] = {10, 20, 30}; // 编译器会自动推断数组大小为 3
-
数组下标: 数组中的每个元素都有一个唯一的索引,称为下标 。C++ 中数组的下标从 0 开始 ,因此,一个大小为
n
的数组,其元素的下标范围是从0
到n-1
。 -
访问数组元素: 使用数组名和下标来访问数组中的特定元素。
c++cout << numbers[0] << endl; // 输出数组 numbers 的第一个元素 numbers[2] = 100; // 将数组 numbers 的第三个元素赋值为 100
注意: 访问超出数组边界的下标会导致未定义的行为,可能会导致程序崩溃或产生不可预测的结果。这是 C++ 中需要特别注意的地方。
-
示例:编写程序,计算数组元素的平均值
c++#include <iostream> using namespace std; int main() { int numbers[5] = {10, 20, 30, 40, 50}; int sum = 0; // 使用 for 循环遍历数组 for (int i = 0; i < 5; i++) { sum += numbers[i]; } // 将 sum 强制转换为 double 类型,以获得浮点数结果 double average = static_cast<double>(sum) / 5; cout << "数组元素的平均值为: " << average << endl; return 0; }
-
练习: 创建一个包含 10 个整数的数组,并找出数组中的最大值和最小值。
2. 字符串:处理文本数据
-
C 风格字符串的概念: 在 C++ 中,C 风格字符串本质上是字符数组 ,用于存储一串字符。它的一个重要特点是以空字符
\0
作为结束标志。这个空字符标志着字符串的结尾。 -
C 风格字符串的声明和初始化:
c++char str1[] = "hello"; // 编译器会自动在末尾添加 '\0' char str2[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 必须手动添加 '\0' char str3[10] = "world"; // 剩余的位置会被初始化为 '\0'
注意: 声明字符数组来存储字符串时,必须确保数组的大小足够容纳字符串的所有字符以及结尾的空字符
\0
。 -
使用下标访问 C 风格字符串中的字符: 可以像访问普通数组元素一样,使用下标来访问 C 风格字符串中的单个字符。
c++cout << str1[0] << endl; // 输出 'h' str2[1] = 'E'; // 将 str2 的第二个字符修改为 'E'
-
string
类:C++ 标准库提供的字符串处理方式C++ 标准库
<string>
头文件提供了一个功能强大的string
类,它比 C 风格字符串更方便、更安全。string
对象可以自动管理内存,无需手动处理字符串的长度和结尾的空字符。 -
string
对象的定义、输入输出以及常用操作:c++#include <iostream> #include <string> // 引入 string 头文件 using namespace std; int main() { // 定义并初始化 string 对象 string str1 = "hello"; string str2; // 输入字符串 cout << "请输入一个字符串: "; cin >> str2; // 输出字符串 cout << "str1: " << str1 << endl; cout << "str2: " << str2 << endl; // 一些常用的 string 操作 cout << "str1 的长度: " << str1.length() << endl; // 获取字符串长度 cout << "str1 和 str2 的拼接: " << str1 + " " + str2 << endl; // 字符串拼接