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

7

如何在类成员中声明一个没有特定大小的数组?我想在类构造函数中立即设置此数组的大小。是否可以在不使用堆或调整数组大小的情况下实现这样的事情?


在C++中,数组的大小应该在声明数组时固定,即必须使用常量大小。对于可变大小,您必须使用new运算符或malloc,但这会在堆上创建数组。 - Bourne
在C++14中,我们将有一个选项可以使用dynarray。目前,正如其他人所说,std::vector是最好的选择。 - jrok
2
可能是重复的问题:如何在不知道大小的情况下声明一个数组的数组 - Damjan Pavlica
4个回答

8

变长数组不被 C++ 标准所允许。你可以采用以下方法:

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

请注意,大多数编译器都支持变长数组作为扩展功能。因此,如果你不担心可移植性且你的编译器支持它,你可以使用它。当然,它也有自己的问题,但在你所述的限制条件下,这是一个选择。


7

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,只不过其大小在构造时已经固定。这更接近于普通动态分配数组的功能。

0

您可以使用向量,只需包含头文件#include<vector>即可。 它可以根据需要增长和缩小大小,并且向量具有内置的方法/函数,可以使您的工作更加轻松。


0

类成员数组必须在编译时声明精确的大小,无法绕过此限制。

你唯一能够在类的直接成员中声明一个数组,同时又能够在运行时决定其大小的方法就是采用从C语言继承而来的流行的"struct hack"技术。

除此之外,你必须将数组声明为类的间接成员:要么声明一个指针类型的成员并稍后分配内存,要么使用一些实现运行时大小数组的库(如std::vector)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接