TGViewer
Библиотека C/C++ разработчика | cpp, boost, qt Библиотека C/C++ разработчика | cpp, boost, qt @cppproglib · 16.9K subscribers
Post #6645 2.23K
🔪 Разбиение диапазонов: views::split, chunk, chunk_by

Ranges-библиотека умеет не только фильтровать и трансформировать, но и разбивать диапазоны на части. Разберём три инструмента — каждый для своей задачи.


🍴 views::split — разбивка по разделителю

std::string csv = "один,два,три,четыре";

// Разбиваем по запятой
for (auto part : csv | views::split(',')) {
// part — под-диапазон символов, не строка
// В C++20 явно конструируем string:
std::cout << std::string(part.begin(), part.end()) << "\n";
}
// один
// два
// три
// четыре


В C++23 появился std::ranges::to, и конвертация стала лаконичнее:

for (auto part : csv | split(',')) {
std::cout << std::ranges::to<std::string>(part) << "\n";
}



❗️views::split возвращает под-диапазоны, а не строки — явное преобразование обязательно в обоих стандартах.


🥨 views::chunk(n) — разбивка на блоки фиксированного размера (C++23)

std::vector<int> data = {1, 2, 3, 4, 5, 6, 7};
for (auto chunk : data | views::chunk(3)) {
for (int x : chunk) std::cout << x << " ";
std::cout << "\n";
} /
/ 1 2 3
// 4 5 6
// 7


❗️ Если размер диапазона не делится на n нацело — последний блок содержит оставшиеся элементы.



🍪 views::chunk_by — разбивка по условию (C++23)

Группирует соседние элементы, пока выполняется предикат между двумя соседями.

std::vector<int> v = {1, 1, 2, 3, 3, 3, 4, 4};
// Группируем подряд идущие равные элементы
for (auto group : v | views::chunk_by(std::equal_to{})) {
for (int x : group) std::cout << x << " ";
std::cout << "| ";
} /
/ 1 1 | 2 | 3 3 3 | 4 4 |

// Вариант с std::equal_to<>{} — лаконичнее:
for (auto group : v | chunk_by(std::equal_to<>{})) { ... }


❗️ Предикат принимает два соседних элемента — новая группа начинается там, где он вернул false.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#константная_правильность
  • 👍 13
More from @cppproglib
  1. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  2. Sep 18, 2026От исходного кода до процессора: разберись, как работает программа 💻 Стартует практически…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  5. Sep 13, 2026🤩 Inline static в классах — забудь про .cpp Сколько раз ты забывал добавить определение s…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →