是否有可能使用generate_n
之类的东西来创建const vector
,例如随机数?如果不派生vector
并在构造函数中进行赋值,我想不出一种方法来做到这一点。
如果您愿意,可以使用静态帮助器或lambda;正如在注释中指出的那样,移动语义/复制省略将使这非常便宜,因为所有体面的编译器都会省略helper返回的vector的完整副本。相反,他们只会创建代码来填充单个向量,然后使用该向量。
std::vector< int > Helper()
{
const size_t n = 10;
std::vector< int > x( n );
std::generate_n( x.begin(), n, someGenerator );
return x;
}
const std::vector< int > my_const_vec( Helper() );
下面是lambda版本:
const std::vector< int > my_const_vec( [] ()
{
const size_t n = 10;
std::vector< int > x( n );
std::generate_n( x.begin(), n, someGenerator );
return x;
}() );
将您的初始化封装到一个函数中,并声明它为"constexpr",以便您可以使用它来初始化const表达式。
您也可以使用std::transform
vector<int> vec(10,1);
transform(vec.begin(), vec.end(), vec.begin(), func);
其中func为:
int func(int i)
{
//return a random generated number
}