Ежедневный бит (е) C++ # 172, Составление представлений C++ 20 без добавления избыточных копий.
При работе с представлениями C++20 создание функций, инкапсулирующих сложные композиции представлений, может показаться заманчивым.
Однако это, скорее всего, приведет к ненужным копиям данных. Вместо этого рассмотрите возможность компоновки представлений как встроенных переменных constexpr.
#include <ranges> #include <cctype> constexpr inline auto trim_front = std::views::drop_while([](int c) { return std::isspace(c); }); constexpr inline auto trim_back = std::views::reverse | trim_front | std::views::reverse; constexpr inline auto trim_space = trim_back | trim_front; std::string str = " abc \t"; // Compose the view with data auto lazy_trimmed = str | trim_space; // Generate the output (before C++23 std::ranges::to) std::string out(lazy_trimmed.begin(), lazy_trimmed.end()); // out == "abc"
Откройте пример в Compiler Explorer.