7

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

4

4 回答 4

8

C++ 标准不允许可变长度数组。您拥有的选项是:

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

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

于 2013-06-23T08:55:10.673 回答
7

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

#include <vector>

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

这里,v_是一个持有 的向量ints,并且被构造为具有大小5。向量会为您处理动态分配。

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

于 2013-06-23T08:55:10.010 回答
0

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

于 2013-06-23T08:58:06.593 回答
0

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

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

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

于 2013-06-23T09:10:19.573 回答