Ежедневный бит (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.