跳到主要内容

简介

在编写程序时,您会经常遇到需要处理多个相同类型变量的情况。这就是数组发挥作用的地方。在本课程中,我们将探讨数组的使用以及它们如何简化您的代码。

我们首先介绍最简单的方法,使用 std::vector 容器。

动机

假设我们要存储游戏服务器上玩家的昵称。每个名字本质上都是一段文本,因此我们将其存储在 std::string 类型的变量中。

#include <iostream>
#include <string>

int main()
{
std::string player_name1;
std::string player_name2;
std::string player_name3;

std::cout << "Please enter the name of player 1: ";
std::cin >> player_name1;

std::cout << "Please enter the name of player 2: ";
std::cin >> player_name2;

std::cout << "Please enter the name of player 3: ";
std::cin >> player_name3;
}

此代码只能处理三名玩家。如果我们需要处理五名玩家,我们将不得不多次编写相同的代码行。这样做会很快变得令人厌烦,而且通常是一个坏主意。相反,我们将引入一个数组。

什么是数组?

An array containing car brand names

数组是一个容器,可以存储某种类型的一些元素。看上面的图片。在数组内部,我们放置了车辆品牌的名称。请注意,每个元素都有自己独特的索引

数组索引

数组元素从零开始向上索引。第一个元素的索引是 0,第二个是 1,第三个是 2,以此类推。

索引对于区分数组元素是必需的。使用它们,我们可以指定要访问的元素。

C++ 中的数组

在 C++ 中创建数组有几种方法

安全 ✅

不安全 ❌

  • 动态 C 风格数组(例如 int* array = new int[5]
  • 固定大小 C 风格数组(例如 int array[5]
不安全且非标准 ❌
  • 可变长度 C 风格数组(例如 int array[UserInput]

我们将重点关注第一种选项,因为它安全且易于使用。我们还将简要提及第二种选项,但您将在本课程的后面找到更详细的解释。然后我们将简要讨论不建议使用的 C 风格数组。

有人告诉你使用 C 风格数组吗?

不幸的是,C 风格数组在学校和大学仍然经常被教授。这有几个原因,我们在此不讨论。C++ 是一种不断发展的语言,C 风格数组已被上述更安全的替代方案取代。

话虽如此,我应该提到 C 风格数组通常不是一件坏事。一个完全了解使用它们时可能出现的问题并能够避免这些问题的程序员可以安全地使用它们。然而,对于初学者来说并非如此。在使用它们时,您可能会遇到很多问题,而且很容易出错。请记住,std::vectorstd::array 覆盖了 C 风格数组的 100% 用例,这意味着没有 C 风格数组会阻碍您的情况。

固定大小数组与动态数组

固定大小数组的元素数量是恒定的,必须在编译时已知。这意味着我们不能从用户那里读取所需的元素数量,然后创建 بالضبط该大小的数组。我们必须在代码中直接指定它。std::array 用于此目的。

另一方面,动态数组可以根据需要增长和收缩。在 C++ 中,我们使用 std::vector 来实现此目的。

我们上面提到的固定大小数组的限制使其比动态数组更难使用。因此,在接下来的课程中,我们将重点关注 vector

常见操作

数组可以做很多事情。我们将介绍最常见的操作,它们将满足您的大部分需求

  1. 创建数组
  2. 访问元素
  3. 添加元素
  4. 读取元素数量
  5. 删除元素
  6. 显示其内容

在本课程的后面,您将学习如何运行内置算法,例如排序、搜索、转换等等。

简介

在编写程序时,您会经常遇到需要处理多个相同类型变量的情况。这就是数组发挥作用的地方。在本课程中,我们将探讨数组的使用以及它们如何简化您的代码。

我们首先介绍最简单的方法,使用 std::vector 容器。

动机

假设我们要存储游戏服务器上玩家的昵称。每个名字本质上都是一段文本,因此我们将其存储在 std::string 类型的变量中。

#include <iostream>
#include <string>

int main()
{
std::string player_name1;
std::string player_name2;
std::string player_name3;

std::cout << "Please enter the name of player 1: ";
std::cin >> player_name1;

std::cout << "Please enter the name of player 2: ";
std::cin >> player_name2;

std::cout << "Please enter the name of player 3: ";
std::cin >> player_name3;
}

此代码只能处理三名玩家。如果我们需要处理五名玩家,我们将不得不多次编写相同的代码行。这样做会很快变得令人厌烦,而且通常是一个坏主意。相反,我们将引入一个数组。

什么是数组?

An array containing car brand names

数组是一个容器,可以存储某种类型的一些元素。看上面的图片。在数组内部,我们放置了车辆品牌的名称。请注意,每个元素都有自己独特的索引

数组索引

数组元素从零开始向上索引。第一个元素的索引是 0,第二个是 1,第三个是 2,以此类推。

索引对于区分数组元素是必需的。使用它们,我们可以指定要访问的元素。

C++ 中的数组

在 C++ 中创建数组有几种方法

安全 ✅

不安全 ❌

  • 动态 C 风格数组(例如 int* array = new int[5]
  • 固定大小 C 风格数组(例如 int array[5]
不安全且非标准 ❌
  • 可变长度 C 风格数组(例如 int array[UserInput]

我们将重点关注第一种选项,因为它安全且易于使用。我们还将简要提及第二种选项,但您将在本课程的后面找到更详细的解释。然后我们将简要讨论不建议使用的 C 风格数组。

有人告诉你使用 C 风格数组吗?

不幸的是,C 风格数组在学校和大学仍然经常被教授。这有几个原因,我们在此不讨论。C++ 是一种不断发展的语言,C 风格数组已被上述更安全的替代方案取代。

话虽如此,我应该提到 C 风格数组通常不是一件坏事。一个完全了解使用它们时可能出现的问题并能够避免这些问题的程序员可以安全地使用它们。然而,对于初学者来说并非如此。在使用它们时,您可能会遇到很多问题,而且很容易出错。请记住,std::vectorstd::array 覆盖了 C 风格数组的 100% 用例,这意味着没有 C 风格数组会阻碍您的情况。

固定大小数组与动态数组

固定大小数组的元素数量是恒定的,必须在编译时已知。这意味着我们不能从用户那里读取所需的元素数量,然后创建 بالضبط该大小的数组。我们必须在代码中直接指定它。std::array 用于此目的。

另一方面,动态数组可以根据需要增长和收缩。在 C++ 中,我们使用 std::vector 来实现此目的。

我们上面提到的固定大小数组的限制使其比动态数组更难使用。因此,在接下来的课程中,我们将重点关注 vector

常见操作

数组可以做很多事情。我们将介绍最常见的操作,它们将满足您的大部分需求

  1. 创建数组
  2. 访问元素
  3. 添加元素
  4. 读取元素数量
  5. 删除元素
  6. 显示其内容

在本课程的后面,您将学习如何运行内置算法,例如排序、搜索、转换等等。