建议使用任意值初始化/调整容器大小的方法

时间:2015-12-07 10:08:17

标签: c++ function initialization containers

目前我正在初始化list / vector等,如下所示:

std::vector<int> vec_rand(target_size);
std::generate(vec_rand.begin(), vec_rand.end(), std::rand);

..已经显示herestd::rand只是一个例子 - 它可以是任何函数。

我只是想知道是否有办法创建/调整容器大小并同时使用任意值初始化它的值

我知道我不需要期待大的性能提升,但是拥有s.th.会更好(而且不那么冗长)。像

vector<int> my_list(10, std::rand);

my_list.resize(target_size, std::rand);

而不是使用默认值的第一个resize(),而不是用所需的内容覆盖它们。

2 个答案:

答案 0 :(得分:6)

这在构造函数中(或在单个指令中)是不可能的。

您可以使用vector::reserve()分配内存(不进行初始化),然后std::generate_n使用back_inserter来填充数组。

my_list.reserve(target_size);
std::generate_n(std::back_inserter(my_list), target_size, std::rand);

答案 1 :(得分:1)

C ++标准向量resize函数存在于两个重载版本中(自C ++ 11以来),一个只采用新大小,另一个采用新大小和默认值。

所以不能直接使用unexpected token at export shout; ^ 函数,如果你想让代码更简洁,你可以创建一个包装函数来完成它。正如你自己所说,无论如何,这不会是最大的性能提升。

您甚至可以创建自己的类型,使用随机函数创建的值进行初始化,并将其转换为resize

编辑:Jonathan Potter的评论可能是可接受的。