问题描述
在下面的代码中,如何声明vv
为const:vector<vector<float>> const vv;
?例如。是否有任何c ++ 0x版本可以让我在: ...
之前的{}
“初始化列表”部分中循环?
#include <vector>
using std::vector;
struct ST {
vector<int> const x; // simple constructor,initializ. via ": x(x)"
vector<vector<float>> vv; // requieres loop,can be done in ": ..."?
ST(vector<int> x,std::initializer_list<vector<float>> lv) : x(x) {
for (auto v : lv) {
vv.push_back(v);
}
}
};
解决方法
std::vector
的构造函数带有一个初始化列表,您不需要循环:
struct ST {
vector<int> const x;
vector<vector<float>> const vv;
ST(vector<int> x,std::initializer_list<vector<float>> lv) :
x(x),vv{lv}
{}
};
如果您的示例过于简单,并且确实需要循环,则可以使用static
方法初始化初始化列表中的const
成员:
struct ST {
vector<int> const x;
vector<vector<float>> const vv;
ST(vector<int> x,vv{create_vector(lv)}
{}
static vector<vector<float>> create_vector(std::initializer_list<float> lv);
};