initialize/resize 具有任意值的容器的建议方法

suggested way to initialize/resize a container with arbitrary values

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

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

.. 如前所述 herestd::rand 只是一个示例 - 它可以是任何函数。

我只是想知道是否有办法 create/resize 一个容器并用任意值初始化它的值 同时 .

我知道我不必期望性能有很大的提升,但如果有 s.th 会更好(并且不那么冗长)。喜欢

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

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

而不是首先 resize() 使用默认值然后用所需的内容覆盖它们。

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

所以仅使用 resize 函数是不可能的,如果你想让代码不那么冗长,你可以创建一个包装函数来完成它。正如您自己所说,这无论如何都不会是最大的性能提升。

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

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

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

您可以使用vector::reserve()分配内存(无需初始化),然后std::generate_nback_inserter填充数组。

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