你将如何使用C ++ 11初始化函数结果的const向量?

时间:2013-03-05 09:29:27

标签: c++ c++11 initialization const

是否可以使用generate_n之类的内容来创建const vector个随机数字?在没有派生vector并在构造函数中进行赋值的情况下,我想不出办法。

3 个答案:

答案 0 :(得分:26)

如果您愿意,可以使用静态助手或lambda;如评论中所指出的那样移动语义/复制省略会使这相当便宜,因为所有体面的编译器都会省略助手返回的向量的完整副本。相反,他们只是创建代码来填充单个向量,然后使用那个。

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; 
  }() );

答案 1 :(得分:0)

将初始化封装到函数中并将其声明为“constexpr”,以便您可以使用它初始化const表达式。

答案 2 :(得分:0)

您也可以使用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 
}