填充动态数组c ++

时间:2013-06-26 07:30:23

标签: c++ arrays

我有一个带浮点指针的结构,我想把它变成一个不确定大小的数组。在我的程序开始时,我想声明一些这些结构并将它们转换为不同大小的数组,如下所示:

struct _arr {
   float * a;
}

...

_arr x;
x.a = (float *)malloc(sizeof(float)*31);
x.a = { 6,
        1, 1, 1, 0     , 0     ,
        1, 0, 1, 0     , 0.0625,
        1, 1, 0, 0.0625, 0     ,
        1, 0, 1, 0     , 0.0625,
        1, 0, 0, 0.0625, 0.0625,
        1, 1, 0, 0.0625, 0
      };

不幸的是,这不起作用,除了单独添加每个值(例如[0] = 6;)之外,是否有人有任何建议将值放入数组中?

3 个答案:

答案 0 :(得分:3)

这可以通过存储std::vector<float>

来简化
#include <vector>

struct arr_ {
   std::vector<float> a;
};

在C ++ 11中,初始化很简单:

arr_ x{ {1.0f, 2.0f, 3.0f, 4.0f, 5.0f} };

不幸的是,在C ++ 03中执行这样的初始化没有简单的方法。一种选择是从临时固定大小的数组初始化:

float farray_[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
arr_ x{ std::vector<float>(farray_, farray_+5)};

答案 1 :(得分:1)

您可以在array上初始化stack,然后将/ memcpy复制到动态内存中。但建议使用vector是更好的选择。

答案 2 :(得分:0)

x.a是一个指针,当你改变x.a = xx时你改变了地址

试试这段代码:

x.a = new float(6,         1,1,1,0,0,         1,0,1,0,0.0625,         1,1,0,0.0625,0,         1,0,1,0,0.0625,         1,0,0,0.0625,0.0625,         1,1,0,0.0625,0       );