如何声明没有特定大小的数组?

时间:2013-06-23 08:52:48

标签: c++ arrays constructor

如何将没有特定大小的数组声明为类成员?我想在类构造函数中立即设置此数组的大小。是否可以在不使用堆或不调整数组大小的情况下执行此类操作?

4 个答案:

答案 0 :(得分:7)

C ++标准不允许使用可变长度数组。你有的选择是:

  • 使用std::vector
  • 使用指向动态内存的指针

请注意,大多数编译器都支持可变长度数组作为扩展,因此,如果您不担心可移植性并且编译器支持它,则可以使用它。当然,它有自己的一些问题,但考虑到你所引用的限制,这是一个选择。

答案 1 :(得分:5)

C ++要求在编译时知道自动存储阵列的大小,否则必须动态分配数组。所以你需要在某种程度上进行动态分配,但你不必担心直接这样做:只需使用std::vector

#include <vector>

class Foo
{
 public:
  Foo() : v_(5) {}
 private:
  std::vector<int> v_;
};

此处,v_是一个持有ints的向量,其构造大小为5。向量负责动态分配。

在C ++ 14中,您可以选择使用std::dynarray,这与std::vector非常相似,只是它的大小在构造时是固定的。这与纯动态分配的数组功能更加匹配。

答案 2 :(得分:0)

您可以使用包含头文件#include<vector>的向量 它可以根据需要增大和缩小尺寸,矢量内置的方法/功能可以使您的工作变得轻松。

答案 3 :(得分:0)

必须使用精确的编译时大小声明类成员数组。没有办法解决它。

将数组声明为类的直接成员并且能够在运行时确定其大小的唯一方法是从C继承的流行"struct hack"技术。

除此之外,您必须将您的数组声明为该类的间接成员:要么声明指针类型的成员并稍后分配内存,要么使用运行时大小的数组的库实现(如{{1} })