复合数据类型
了解复合数据类型
复合数据类型是由多个基本数据类型组合而成的数据类型,它们可以帮助我们更好地组织和管理相关的数据。
数组
数组是一个在 C/C++ 中非常常用的复合数据类型,它允许我们存储多个相同类型的元素。数组是存储相同类型数据的集合,所有元素在内存中连续存储。数组的大小在编译时确定,一旦定义后就不能改变大小(如果需要可变的数组,可以使用动态内存分配或者 vector,这在以后会提到)。
创建一个数组的方法如下:
<数据类型> <变量名>[<数组大小>];int main() {
// 方式1:声明并初始化数组
int numbers[5] = {1, 2, 3, 4, 5};
// 方式2:部分初始化,未指定的元素自动初始化为0
int scores[5] = {90, 85}; // 结果:{90, 85, 0, 0, 0}
// 方式3:让编译器自动推断数组大小
int grades[] = {88, 92, 76, 95}; // 编译器推断大小为4
// 方式4:声明数组后逐个赋值
string fruits[3];
fruits[0] = "苹果";
fruits[1] = "香蕉";
fruits[2] = "橙子";
// 方式5:全部初始化为0
int zeros[5] = {0}; // 所有元素都为0
// 或者
// int zeros2[5] = {}; // C++11及以后版本
return 0;
}访问数组可以通过索引(下标)进行访问,在数组变量后用 [<索引>] 来,索引从 0 开始:
int arr[5] = {10, 20, 30, 40, 50};
// 访问数组元素
cout << "第一个元素:" << arr[0] << endl; // 10
cout << "第三个元素:" << arr[2] << endl; // 30
cout << "最后一个元素:" << arr[4] << endl; // 50其中,10 是数组的第一个元素,索引为 0;20 是第二个元素,索引为 1;依次递推。
在访问之前,请注意索引不要超过 数组的大小 - 1 ,否则会引发未定义行为。
有关数组的内容,我们会在后续章节详细提到。
结构体
有时候,我们可能会想要一个类型里面存储多个不同类型内容的项目,例如我想要定义一个存储个人信息的东西,一个人可能有年龄(整数),姓名(字符串),性别(因为只有 男 女 两个值,所以可以用布尔型)。在 C++ 中,我们想要定义这种复合类型,可以使用 struct 关键字。(当然,也可以用类,会在以后讲到)
例如,我可以这样定义和使用 Person 结构体:
#include <iostream>
using namespace std;
struct Person {
int age;
std::string name;
bool gender; // 我们规定 0 代表男性,1 代表女性
};
int main() {
Person person = { 20, "John", true };
// 也可以先创建,后赋值
// Person person2;
// person2.age = 25;
// person2.name = "Alice";
// person2.gender = false;
cout << "Name: " << person.name << endl;
cout << "Age: " << person.age << endl;
cout << "Gender: " << (person.gender ? "Female" : "Male") << endl;
return 0;
}你可以使用点运算符 . 来访问结构体的成员。
在 C 语言中,直接使用 struct 不会定义一个结构体类型,你需要使用 typedef 关键字来定义一个新的类型名。
typedef struct {
int age;
char* name;
bool gender;
} Person;而在 C++ 中,我们不需要使用 typedef 关键字来定义一个新的类型名,因为 struct 关键字会定义了一个新的类型名。当然,上述写法在 C++ 中依然有效。
枚举
枚举是一种特殊的类型,它允许你定义一组命名的常量。在 C++ 中,你可以使用 enum 关键字来定义一个枚举类型。
例如,我们可以定义一个表示颜色的枚举类型:
enum Color {
RED,
GREEN,
BLUE
};现在,我们可以使用 Color 类型来表示颜色:
Color color = RED;枚举类型可以有初始值,例如:
enum Color {
RED = 1,
GREEN = 2,
BLUE = 3
};现在,我们可以使用 Color 类型来表示颜色,并且可以使用整数来表示颜色:
Color color = RED;
int colorValue = static_cast<int>(color);还有很多其他的复杂数据类型,包括标准库的 Union、STL库的 vector 等等,这里就不一一说明。后面在用到的时候我们会进行介绍。