从结构中进行数组初始化

时间:2012-03-31 03:17:29

标签: c++ arrays

我想知道是否有办法从结构中的变量初始化数组。假设你有一个像这样的结构 -

struct Test{  
    int Number;  
};

你想初始化int Number 成为一个数组 我已经尝试了这个,但它不起作用:

Test t1;  
t1.Number = new int[3];   
t1.Number[3] = 6;

我知道ISO C ++禁止调整数组大小,但是如果有一种方法可以将整数初始化为数组,那就不是真正调整大小(不是吗?) 而且,向量在结构内部不起作用。我得到一个“ Vector没有命名类型”错误。

P.S。 ,我也不能这样做:

struct Test{  
    int Number[5];  
};

因为当时我不知道我想要的数组的大小。

4 个答案:

答案 0 :(得分:2)

vector在结构中运行得很好:

#include <vector>

struct Test {
    std::vector<int> Numbers;
};

我不确定你真正想做什么,但我认为这很接近。

答案 1 :(得分:0)

你可以使用指针int - 即,

struct Test{  
    int *Number;  
};

然后您可以在以后任何时间指定它以指向您首选大小的数组:

t.Number = new int[5];

但正如其他海报已经说过的那样,std::vector,有一个小的&#34; v&#34;,效果很好;一定要#include <vector>,以便编译器知道你在说什么。

答案 2 :(得分:0)

这样做的一个技巧

struct Test {
  int Numbers[1];
};

初始化结构时,需要使用自己的分配函数。

struct Test *NewTest(int sizeOfNumbers) {
  return (struct Test*)malloc(sizeof(struct Test) + sizeof(int)*(sizeOfNumbers - 1));
}

然后,您将能够使用

访问这些数字
struct Test *test1 = NewTest(10);
test1->Numbers[0]...
test1->Numbers[1]...
test1->Numbers[9]...

答案 3 :(得分:0)

new int[3]的返回值是int*而不是int。要使代码工作,您可以:

struct Test {  
    int* Number;  
};

int main() {
    Test t1;  
    t1.Number = new int[4]; // Note this should be 4 so that index 3 isn't out of bounds
    t1.Number[3] = 6;
    delete t1.Number;

    return 0;
}

但是你应该使用std::vector而不是静态数组。向量在结构中工作得很好:

#include <vector>

struct Test {  
    std::vector<int> Number;  
};

int main() {
    Test t1;  
    t1.Number.resize(4);   
    t1.Number[3] = 6;

    return 0;
}