我想使用STL
算法标头生成一个包含未知大小元素的容器。我想避免编写自己的loop
。这背后的动机是编写表达性和安全的代码,正如Kate Gregory在Pluralsight上的Beautiful C ++中所论述的那样。
到目前为止,我的方法仅限于已知size
的容器。 (我正在谈论动态容器)。
示例:
int expected_container_size = 10;
std::vector<int> dynamic_container;
dynamic_container.reserve(expected_container_size);
auto example_iota_generator = [n = 0]()mutable{return ++n; };
std::generate_n(std::back_inserter(dynamic_container), expected_container_size, example_iota_generator);
重复问题:
可以使用STL
算法生成非固定大小的动态容器吗?
例如,last/largest
元素value
小于某些const n
的斐波那契序列;
提前谢谢!
答案 0 :(得分:2)
可以使用STL算法生成非固定大小的动态容器吗?例如,斐波那契序列的最后/最大元素值小于某个常数;
无论容器是否动态调整大小,您都可以使用算法将内容生成到任何容器中。
答案 1 :(得分:1)
要扩展@ Slava的评论,使用Range V3库,您可以执行以下操作:
auto gen = [n = 0]() mutable { return ++n; };
auto filter = [](int val){ return val < 100; };
auto iotas = ranges::view::generate(gen) | ranges::action::take_while(filter);
std::vector<int> nums{ iotas.begin(), iotas.end() }; // 0, 1, 2, ... 99