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);
.. 如前所述 here。 std::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_n
用back_inserter
填充数组。
my_list.reserve(target_size);
std::generate_n(std::back_inserter(my_list), target_size, std::rand);
目前我正在初始化 list
/vector
等,如下所示:
std::vector<int> vec_rand(target_size);
std::generate(vec_rand.begin(), vec_rand.end(), std::rand);
.. 如前所述 here。 std::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_n
用back_inserter
填充数组。
my_list.reserve(target_size);
std::generate_n(std::back_inserter(my_list), target_size, std::rand);