(C ++)在结构中存储数组

时间:2014-06-12 00:16:09

标签: c++ struct

如何在其中创建一个包含值数组的结构?

我有类似的东西:

struct stuff {

  int * list;

  stuff {
    list(int[5]) = {0, 1, 2, 3, 4};
  }

}

这似乎可以用于存储,但在另一个文件中,我正在访问此数组:

stuff test;
std::cout << test.list[1];

这是给我一个分段错误。

1 个答案:

答案 0 :(得分:3)

我想我明白你想要什么。以下是如何在C ++中实现的:

struct stuff {
    std::vector<int> list;
    stuff() : list({0, 1, 2, 3, 4}) {}
};

然后:

stuff test;
std::cout << test.list[1];

Live demo

其中std::vector是一个类似于数组的容器,可以(通过一些权衡)来存储可变的元素数组。如果您的元素具有固定大小(在您的情况下为5),则可以使用std::array代替std::array<int, 5>

您可以从代码中获得的最接近的工作代码是:

struct stuff {
    int* list;
    stuff() : list(new int[5] {0, 1, 2, 3, 4}) {}
};

然而,这是一个可怕的主意。它引入了内存泄漏和残障语义(stuff a = stuff()将导致共享内存,并可能导致UB稍后)。另一方面,std::vectorstd::array尽可能安全(至少在内存安全级别上)。