目前我正在初始化list
/ vector
等,如下所示:
std::vector<int> vec_rand(target_size);
std::generate(vec_rand.begin(), vec_rand.end(), std::rand);
..已经显示here。 std::rand
只是一个例子 - 它可以是任何函数。
我只是想知道是否有办法创建/调整容器大小并同时使用任意值初始化它的值。
我知道我不需要期待大的性能提升,但是拥有s.th.会更好(而且不那么冗长)。像
vector<int> my_list(10, std::rand);
或
my_list.resize(target_size, std::rand);
而不是使用默认值的第一个resize()
,而不是用所需的内容覆盖它们。
答案 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的评论可能是可接受的。