gpt4 book ai didi

c++ - 生成器列表与 C++ 标准库?

转载 作者:行者123 更新时间:2023-11-28 00:29:22 26 4
gpt4 key购买 nike

C++ 标准库是否包含任何机制来生成类似列表的可迭代范围,该范围使用注入(inject)的生成器函数在每个位置返回值?即可以提供类似于 C# 的 yield return 或 F# 的 yield 列表理解的行为?理想的情况是:

hypothetical_generator_list<size_t> l([](size_t index) { return index * 2; });
assert(l[4] == 8);
assert(*(l.begin() + 1000000000) == 2000000000);

动机:我想对数千亿(单调递增)值的空间进行二分查找。但是 std::lower_bound 需要迭代器,并且完全不可能将所有值放入任何类似 vector 的东西中。但是,我可以轻松地编写一个函数,在给定索引的情况下执行一些计算并返回该索引处的值。

hypothetical_generator_list<size_t> c([](size_t index) { return index * 2; });
auto itFound = std::lower_bound(l.begin(), l.begin() + 100000000000, 6000);
assert(itFound - l.begin() == 3000);

我可以编写自己的自定义迭代器,但与仅将简单的 lambda 传递给构造函数相比,这似乎需要大量工作。当然,我可以自己编写二进制搜索(但那有什么好玩的?)。这些是唯一的选择吗?

为了后代,这里有几个我在这个主题上找到的链接:

Equivalent C++ to Python generator pattern

http://www.sirver.net/blog/2011/08/19/generators-in-c++/

但似乎答案是没有比编写二分查找更简单的方法了。

最佳答案

算法在扫描整个范围时不会为您提供索引。您可以使用 boost.Iterator(或 Boost.range)来帮助您编写迭代器([boost::iterator_facade][1][boost::function_input_iterator][2] 例如)

关于c++ - 生成器列表与 C++ 标准库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496269/

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