gpt4 book ai didi

C++:构造函数中的 std::generate

转载 作者:行者123 更新时间:2023-12-02 00:43:10 26 4
gpt4 key购买 nike

我喜欢使用 std::generate 创建 std::vectors。我认为这是一个相当干净的方法:

std::vector<Foo> v(5);
std::generate(v.begin(), v.end(), generator );

但是,从性能的角度来看,这似乎不太好,因为我们分配并初始化了所有 vector 元素,然后返回并替换它们。理想情况下,应该有一个带有大小和生成器函数的构造函数,但似乎没有(类似于 v(5, Generator))。我是否遗漏了一些明显的东西?

对于真正关心性能(并且构建成本昂贵)的情况,可以这样做:

std::vector<Foo> v;
v.reserve(5);
for (size_t i = 0 ; i < 5 ; ++i)
v.emplace_back(..);

另一种选择是使用后插入器或类似的东西,但这会动态调整 vector 的大小,这似乎也远非理想。

需要明确的是,大小不是编译时参数,因此我不能使用 std::array。此外,我强烈希望远离原始数组或指针(其中可能可以通过初始化内存来分配内存)。

C++11 解决方案是首选,但 C++14 解决方案也许也是可行的。

最佳答案

这看起来像是 std::generate_n 的用例算法。它接受一个输出迭代器(例如 back_insert_iterator)和一个大小。如果我们提前预留大小,我们可以使用生成器生成元素,而无需重新分配。

std::vector<Foo> v;
v.reserve(5);
std::generate_n(std::back_inserter(v), 5, generator);

关于C++:构造函数中的 std::generate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59209327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com