使用STL算法生成动态大小的动态容器

时间:2018-04-17 13:23:49

标签: c++ algorithm c++11

我想使用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的斐波那契序列;

提前谢谢!

2 个答案:

答案 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