我想知道是否有办法从结构中的变量初始化数组。假设你有一个像这样的结构 -
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];
};
因为当时我不知道我想要的数组的大小。
答案 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;
}