dnl*_*dnl 8 c++ algorithm stl std-ranges
cppreference状态:
范围库是算法和迭代器库的扩展和泛化,通过使它们可组合且不易出错,使它们变得更加强大。
该库创建并操作范围视图,即间接表示可迭代序列(范围)的轻量级对象。
它提到使用范围视图,如 cppreference所述:
范围概念定义了类型的要求,该类型允许通过提供表示范围元素的迭代器和标记来迭代其元素。
但从外部角度来看,它似乎只是带有concept. 所以主要问题是:
小智 7
第二个允许您通过管道传输仅存在于范围标头中的其他操作,这对于可组合性来说要好得多:
#include <ranges>
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
const auto v = std::vector{ 1, 2, 3, 4, 5 };
const auto is_odd = [](const auto n){ return n % 2 == 1; };
const auto square = [](const auto n){ return n * n; };
const auto print = [](const auto n){ std::cout << n << " ";};
std::ranges::for_each(
v | std::ranges::views::filter(is_odd) | std::ranges::views::transform(square),
print); // prints: 1 9 25
}
Run Code Online (Sandbox Code Playgroud)