咨询:标准库中std::generator的函数调用封装及容器中间插入生成元素的替代方案
咨询:标准库中std::generator的函数调用封装及容器中间插入生成元素的替代方案
我想知道是否存在现成的封装,可以像以下代码这样,通过调用函数来生成std::generator?
虽然我自己写的这个版本能正常工作,但如果要适配不同签名的函数,代码会变得复杂,所以不想重复造轮子。
#include <experimental/generator> #include <ranges> #include <iostream> #include <functional> template <typename T> std::experimental::generator<float> function_generator(T op) { while (true) co_yield op(); } constexpr auto gen1 = []() { return 1.0f; /* Some generator in real code */ }; int main() { std::vector<float> v = { 0.0f, 1.0f, 2.0f }; auto gen = function_generator(gen1) | std::views::take(10 - 1); v.insert_range(std::next(v.begin()), gen); for (auto& val : v) { std::cout << val << std::endl; } }
重要提示:我需要在容器中间插入元素,所以std::generate和back_inserter这类工具都不适用。
想请教一下:有没有不依赖第三方库的工具可以实现这个需求(生成一个待插入的元素范围)?
另外,如果不需要std::generator也能完成这个任务(添加一系列生成的值),也请给我建议——当然,前提是不要先添加 dummy 对象(比如先填充0再用std::generate覆盖)。
备注:内容来源于stack exchange,提问作者Damir Tenishev
相关产品推荐
相关产品推荐

