可能重复:
Intitialzing an array in a C++ class and modifiable lvalue problem
如this问题所示,可以给一个结构提供一个ctor,使其成员获得默认值。您将如何继续为结构内的数组的每个元素提供默认值。
struct foo
{
int array[ 10 ];
int simpleInt;
foo() : simpleInt(0) {}; // only initialize the int...
}
是否有某种方法可以在一行中创建类似于初始化int的方法?
答案 0 :(得分:6)
新的C ++标准有一种方法可以做到这一点:
struct foo
{
int array[ 10 ];
int simpleInt;
foo() : array{1,2,3,4,5,6,7,8,9,10}, simpleInt(0) {};
};
如果你的编译器还不支持这种语法,你总是可以分配给数组的每个元素:
struct foo
{
int array[ 10 ];
int simpleInt;
foo() : simpleInt(0)
{
for(int i=0; i<10; ++i)
array[i] = i;
}
};
编辑:2011年之前的单行解决方案C ++需要不同的容器类型,例如C ++ vector(无论如何是首选)或boost数组,可以是boost.assign'ed
#include <boost/assign/list_of.hpp>
#include <boost/array.hpp>
struct foo
{
boost::array<int, 10> array;
int simpleInt;
foo() : array(boost::assign::list_of(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)),
simpleInt(0) {};
};
答案 1 :(得分:4)
将数组更改为std :: vector将允许您进行简单的初始化,并且您将获得使用向量的其他好处。
#include <vector>
struct foo
{
std::vector<int> array;
int simpleInt;
foo() : array(10, 0), simpleInt(0) {}; // initialize both
};
答案 2 :(得分:2)
如果您只想默认初始化数组(将内置类型设置为0),您可以这样做:
struct foo
{
int array[ 10 ];
int simpleInt;
foo() : array(), simpleInt(0) { }
};
答案 3 :(得分:1)
#include <algorithm>
struct foo
{
int array[ 10 ];
int simpleInt;
foo() : simpleInt(0) { std::fill(array, array+10, 42); }
};
或使用std::generate(begin, end, generator);
生成器取决于您。