我有这个代码,完全在gcc(c ++ 11)上编译:
static const std::vector< std::vector<double> > vect =
{
{1,1,1},
{1,1,-1},
{-1,1,-1},
{-1,1,1},
{1,-1,1},
{1,-1,-1},
{-1,-1,-1},
{-1,-1,1}
};
但是,当我尝试在VS2012上编译时,我首先得到了一个不支持的初始化列表错误。我通过安装November CTP并使用新的编译器来修复它。 但是,现在我收到了这个错误:
error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::vector<std::vector<double,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>>'
1> with
1> [
1> _Ty=double
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
我见过有人说要使用数组并使用范围构造函数,但这通常用于单维向量。
我可能也会这样做,但这意味着我需要首先逐个初始化所有向量,然后通过推送向量初始化向量的第二维,如下所示:
std::array<double,3> v0_init = {1,1,1};
std::vector<double> v0(v0_init.begin(), v0_init.end());
std::array<double,3> v1_init = {1,1,-1};
std::vector<double> v1(v1_init.begin(), v1_init.end());
...
std::vector< std::vector<double> > vect;
vect.push_back(v0);
vect.push_back(v1);
...
但我不认为这是一种干净的方式,并且找到矢量值也不容易(其他人可能必须访问,修改甚至添加矢量,我不希望它们有复制/粘贴一些代码以向列表中添加一些新的向量。)
有更好的方法吗?
谢谢。