Ежедневный бит (e) C++ # 152, Сглаживание представления C++ 23: std::views::join_with.
C++23 std::views::join_with, аналогично std::views::join, сглаживает диапазон диапазонов, но дополнительно вставляет предоставленный элемент между каждой парой поддиапазонов.
#include <ranges> #include <string> #include <vector> std::vector<std::vector<int>> data = {{1,2,3}, {4,5,6}, {7,8,9}}; // A flattened view of data with 0 inserted in between every subrange auto flattened = data | std::views::join_with(0) | std::views::common; std::vector<int> flat(flattened.begin(), flattened.end()); // flat == {1,2,3,0,4,5,6,0,7,8,9} std::string greeting = "Hello World!"; // Split by space and re-join using newlines auto lined = greeting | std::views::lazy_split(' ') | std::views::join_with('\n') | std::views::common; std::string new_greeting(lined.begin(), lined.end()); // new_greeting == "Hello\nWorld!";
Откройте пример в Compiler Explorer.