我知道可以像这样初始化一个向量:
vector<int> v{1,3,4,6};
然而,当我定义一个包含向量的类时,我无法在声明它的位置初始化它,就像这样:
class C {
public:
vector<int> v;
C();
};
因此我需要在构造函数中初始化它。以下代码可以实现,但不够规范:
C::C() {
v.resize(4);
v[0]=1;
v[1]=3;
v[2]=4;
v[3]=6;
}
我该如何像
vector<int> v{1,3,4,6};
这样整洁而直接地初始化它,而不是一个一个地赋值?编辑: 也许我没有表达清楚我的情况。{1,3,4,6}的值可能不是预定义的值,它们会依赖于一些逻辑和条件:
if(condition_a) {v[0] = 0; v[1]=3; ...} else {v[0]=4;v[0]=8;...}
。因此,我必须处理一些其他事情来知道如何初始化这个向量,所以我不能像一些答案中建议的那样使用初始化列表。请问有什么建议吗?
condition_a
由调用者确定(即创建C
实例的函数),那么你的构造函数应该接受一个初始化列表,并且调用者应该传递它。如果condition_a
是在类内部根据未提供给构造函数的信息确定的(例如通过静态变量),那么你的设计是有缺陷的。能够使用相同的构造函数参数构造两次并产生两个在逻辑上不同的对象(具有不同内容)的类是一个潜在的软件错误,可能会由最终用户发现,而对于开发人员来说可能非常难以发现。 - Peter