17

是否可以使用诸如generate_n创建const vector随机数之类的东西?vector如果不在构造函数中派生和进行赋值,我想不出一种方法。

4

3 回答 3

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; 
  }() );
于 2013-03-05T09:33:23.793 回答
0

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

于 2013-03-06T12:26:30.710 回答
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 
}
于 2013-08-10T14:27:52.990 回答