C++ 声明结构时的向量分配
可以在以下的数组中创建一个C++结构:C++ 声明结构时的向量分配,c++,vector,struct,C++,Vector,Struct,可以在以下的数组中创建一个C++结构: struct foo{ int bar[42]; }; 我想做的是: struct foo{ std::vector<int> bar(42); }; structfoo{ 标准:向量条(42); }; 当然,这不会编译,但您可以理解它的意图。我知道.reserve()之类的, 但是我希望在声明foo时已经分配了空间 原因是我要修改一个相当复杂的Perl脚本,该脚本在结构中使用数组生成C代码。这些数组应替换为std::ve
struct foo{
int bar[42];
};
我想做的是:
struct foo{
std::vector<int> bar(42);
};
structfoo{
标准:向量条(42);
};
当然,这不会编译,但您可以理解它的意图。我知道.reserve()之类的,
但是我希望在声明foo
时已经分配了空间
原因是我要修改一个相当复杂的Perl脚本,该脚本在结构中使用数组生成C代码。这些数组应替换为std::vector
s。脚本随后根据XML文件初始化数组,我不想在脚本中乱用push_back
,因为结构是深度嵌套的(数组的结构和结构的数组)。阵列的大小当然会有所不同
谢谢你的建议 您应该在结构的构造函数中(最好在其初始化列表中)设置向量的大小(即调用
std::vector
的构造函数)
像这样:
struct foo{
foo() : bar(42) {}
std::vector<int> bar;
};
structfoo{
foo():bar(42){}
向量条;
};
您应该在结构的构造函数中(最好在其初始化列表中)设置向量的大小(即调用std::vector
的构造函数)
像这样:
struct foo{
foo() : bar(42) {}
std::vector<int> bar;
};
structfoo{
foo():bar(42){}
向量条;
};
使用构造函数:
struct foo{
std::vector<int> bar;
foo() : bar(32) {}
};
structfoo{
向量条;
foo():bar(32){}
};
创建实例时,将自动分配向量的内存。初始化列表在构造函数主体执行之前初始化成员。使用构造函数:
struct foo{
std::vector<int> bar;
foo() : bar(32) {}
};
structfoo{
向量条;
foo():bar(32){}
};
创建实例时,将自动分配向量的内存。初始化列表在构造函数主体执行之前初始化成员。添加构造函数并使用初始化列表:
struct foo {
foo() : bar(42) {}
std::vector<int> bar;
};
structfoo{
foo():bar(42){}
向量条;
};
如果编译器支持C++11功能,请改用
structfoo{
std::数组条;
};
或者如果C++11不可用且允许使用boost。添加构造函数并使用初始值设定项列表:
struct foo {
foo() : bar(42) {}
std::vector<int> bar;
};
structfoo{
foo():bar(42){}
向量条;
};
如果编译器支持C++11功能,请改用
structfoo{
std::数组条;
};
或者如果C++11不可用并且允许使用boost。使用构造函数,如其他答案中所建议的。但我必须纠正你:
按照其他答案中的建议,使用构造函数。但我必须纠正你:
现有的答案已经解释了如何做你想做的事情,但我认为他们忽略了解释原因的重要部分。你需要掌握的是C++中的<>代码> Stult<代码>只是一个近乎同义词,用于<代码>类< /> >,唯一的不同在于,结构默认有公共成员,默认的类具有私有。您可以将代码中
类
的每个实例替换为
struct X
{
private:
...
}
用class
替换structs
时,它的工作原理完全相同,反之亦然。这意味着,正如使用构造函数对类执行所需的操作一样,在结构中使用构造函数:
struct foo
{
std::vector<int> bar;
foo() : bar(42) {}
}
structfoo
{
向量条;
foo():bar(42){}
}
这对于
std::vector
,顺便说一句,还需要几个参数,第二个参数是填充向量的值,这样你就可以用foo():bar(42,-1){}
来填充向量的值-1
,现有的答案已经解释了如何做你想做的事情,但我认为他们忽略了解释原因的重要部分。你需要掌握的是C++中的<>代码> Stult<代码>只是一个近乎同义词,用于<代码>类< /> >,唯一的不同在于,结构默认有公共成员,默认的类具有私有。您可以将代码中类
的每个实例替换为
struct X
{
private:
...
}
用class
替换structs
时,它的工作原理完全相同,反之亦然。这意味着,正如使用构造函数对类执行所需的操作一样,在结构中使用构造函数:
struct foo
{
std::vector<int> bar;
foo() : bar(42) {}
}
structfoo
{
向量条;
foo():bar(42){}
}
这对于
std::vector
,顺便说一句,还需要两个参数,第二个参数是填充向量的值,因此如果我理解你的问题,你可以使用foo():bar(42,-1){}
填充向量的值,您希望用std::vector替换数组,但仍然希望进行静态内存分配(即在编译时分配资源)。据我所知,std::vector动态分配资源,这意味着下面使用构造函数说明的答案将在运行时分配内存。如果我理解您的问题,您希望用std::vector替换数组,但仍然希望进行静态内存分配(即在编译时分配资源)。据我所知,std::vector分配资源