固定大小数组
在本课程中,我们将简要解释什么是 std::array
。在本课程的后面,您将了解更多。
动机
我们已经有了向量,它们表示动态数组,我们可以用它们来存储任意数量的元素。您可能会问
为什么我们甚至需要固定大小的数组?
简短的回答是:性能。
array
与 vector
与 C 风格数组std::array
是 std::vector
的一个性能更高的替代品,但有一些限制。它也是 C 风格数组的一个更安全的替代品。
我们,本课程的创建者,充分意识到对于初学者来说,与 vector
相比微小的性能提升不值得额外的努力。此容器将在稍后更深入地介绍,届时您将更熟悉 C++。
使用 std::array
我们要做的第一件事是包含 <array>
头文件
#include <array>
创建数组
有相当多的方法可以创建 std::array
的实例。请记住:我们正在讨论一个固定大小的数组,我们必须事先知道它的大小。创建数组后,我们无法更改其大小。一种常见的做法是估计我们将使用的最大元素数量,然后创建该大小的数组。
std::array<std::string, 10> player_names;
在上一课中,我们使用类似的表示法来创建 vector
实例。这次我们必须同时提供
- 元素的类型 (
Type
) - 数组的大小 (
N
)
我们通过用逗号分隔它们来实现
// prism-push-types:Type
std::array<Type, N>
用一些预定义的值初始化数组是很常见的。我们可以通过使用花括号语法来实现
std::array<std::string, 10> player_names = {
"HappyBanana", "AngryCrab", "SadWolf",
};
替代语法
您可以省略 player_names
和花括号之间的 =
,然后将元素列表封装在额外的 {}
中以达到相同的效果
std::array<std::string, 10> player_names {{
"HappyBanana", "AngryCrab", "SadWolf",
}};
{ }
中未设置的元素如果您不为所有元素提供初始值,其余元素将使用默认值或零值进行初始化。简单来说,根据数组内部的类型:数值将设置为 0
,布尔值将设置为 false
,字符串将为空。
这是前一个代码片段后数组的内容
索引 | 值 |
---|---|
0 | "HappyBanana" |
1 | "AngryCrab" |
2 | "SadWolf" |
3 | 空 |
... | ... |
9 | 空 |
访问元素
我们可以以与向量相同的方式访问数组的元素
#include <iostream>
#include <string>
#include <array>
int main()
{
std::array< std::string, 10 > player_names = {
"HappyBanana", "AngryCrab", "SadWolf"
};
// Setting names of the players
player_names[0] = "SadBanana";
player_names[2] = "HappyWolf";
// Printing the name of the first player:
std::cout << "Name of the first player: " << player_names[0];
}
我们更改了数组的第一个和第三个元素。程序的输出是
Name of the first player: SadBanana
这是前一个代码片段后数组的内容
索引 | 值 |
---|---|
0 | "SadBanana" |
1 | "AngryCrab" |
2 | "HappyWolf" |
3 | 空 |
... | ... |
9 | 空 |
读取数组的大小
我们可以使用 size()
方法来获取数组的大小
std::array<std::string, 10> player_names = {
"HappyBanana", "AngryCrab", "SadWolf",
};
std::cout << "Number of players: " << player_names.size();
程序的输出是
Number of players: 10
std::array
的大小正如您从上面的示例中看到的那样,无论我们手动设置了多少元素,数组的所有“插槽”都被使用。其余的都用默认值初始化,在本例中是空字符串。
显示元素
就像我们对向量所做的那样,我们可以使用 for
循环来显示数组的所有元素
for (std::string name : player_names)
{
std::cout << "Player: " << name << '\n';
}
查看完整代码
#include <iostream>
#include <string>
#include <array>
int main()
{
std::array< std::string, 10 > player_names = {
"HappyBanana", "AngryCrab", "SadWolf"
};
// Printing all player names
for (std::string name : player_names)
{
std::cout << name << '\n';
}
}
程序的输出是
Player: HappyBanana
Player: AngryCrab
Player: SadWolf
Player:
Player:
Player:
Player:
Player:
Player:
Player:
总结
总而言之,我们已经了解到 C++ 中有一个名为 std::array
的固定大小数组。在许多情况下,我们可以像使用 vector
一样使用它,但它有一些限制,并且不如 vector
灵活。我们建议您目前还是坚持使用 std::vector
。
我们暂时就讲到这里,但稍后会在课程中再回来讨论它。