Daily bit(e) C++. std::views::join_with
Добавлено 23 октября 2026 в 02:47
Daily bit(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}};
// Выравнивающее представление data, в котором между
// поддиапазонами вставлен 0
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!";
// Разделить по пробелам и снова объединить,
// используя символы новой строки
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!";
