两个数组声明之间的C ++差异

时间:2013-12-18 13:43:41

标签: c++

我意识到这是非常基本的,但有人会介意解释这两个数组声明之间的区别:

#include <array>
array<int, 5> myints;

...和

int myints[5];

...以及为什么myints.size()适用于第一个声明但不适用于第二个声明。

4 个答案:

答案 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风格的数组。这不是一个阶级或结构。