我意识到这是非常基本的,但有人会介意解释这两个数组声明之间的区别:
#include <array>
array<int, 5> myints;
...和
int myints[5];
...以及为什么myints.size()
适用于第一个声明但不适用于第二个声明。
答案 0 :(得分:7)
int myints[5];
这是一个包含五个整数的数组。
它是C和C ++中的基本语言结构
内置类型没有成员函数。
std::array<int, 5> myints;
这是标准库类的实例 std::array<int, 5>
(本身是标准库类模板的实例 std::array<T, N>
)
它是基本数组的包装器,为方便起见提供了实用程序成员函数(例如size()
)。
答案 1 :(得分:1)
array
是一个类(标准stl容器),它具有方法并包含许多要应用于更标准静态数组的函数。
另请查看std::vector
。另见http://www.cplusplus.com/reference/vector/vector/
有关如何使用数组和向量的信息。
特别是向量更适合于动态内存分配,而int myints[5]
声明称为静态分配,并且在可以分配的内存方面存在一些很大的限制。
答案 2 :(得分:1)
int myints[5];
为您提供“5 int
s的数组”。这种“数组”类型是一种语言特征。它给你的对象基本上是5 int
s在内存中彼此相邻。此数组类型不是类类型,因此它没有成员函数。
std::array<int, N> myints;
会为您提供std::array
个对象。 std::array
是标准库中的类类型,因此可能具有成员函数,例如成员函数size
。该类封装了一个固定大小的数组,并提供了一个很好的接口。
答案 3 :(得分:0)
在第一次声明中
array myints
;
这里myins是数组类的对象,它是c数组的一个瘦包装器。并且此类具有size()函数,该函数将返回大小。
第二个声明是一个c风格的数组。这不是一个阶级或结构。