Библиотека C/C++ разработчика | cpp, boost, qt
34K subscribers
2.13K photos
67 videos
16 files
4.47K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17

#WXSSA
Download Telegram
🧋 Комбинаторы: views::zip и views::enumerate

В прошлый раз мы генерировали диапазоны на лету с помощью iota и repeat. Теперь научимся их комбинировать — объединять несколько источников данных в один поток, не копируя ни байта.


✈️ views::zip — объединение нескольких диапазонов (C++23)

std::vector<std::string> names = {"Алиса", "Борис", "Виктор"};
std::vector<int> scores = {95, 82, 78};

// Получаем пары (имя, балл)
for (auto [name, score] : views::zip(names, scores)) {
std::cout << name << ": " << score << "\n";
}
// Алиса: 95
// Борис: 82
// Виктор: 78


zip заканчивается на самом коротком диапазоне — безопасно при разной длине. Внутри возвращается std::tuple, а structured bindings разбирают его на отдельные переменные.

❗️ views::zip возвращает ссылки на элементы исходных контейнеров. Модификация через structured binding изменит оригинальные данные.


🥨 views::enumerate — индекс + значение (C++23)

std::vector<int> data = {10, 50, 30, 90, 20};

for (auto [i, val] : data | views::enumerate) {
if (val > 40) {
std::cout << "Первое превышение на позиции " << i << "\n";
break;
}
}
// Первое превышение на позиции 1


Раньше для этого приходилось писать views::zip(views::iota(0), data) (см. предыдущий пост про генераторы). Теперь — в одну строку.

❗️ Тип индекса в enumerate — это range_difference_t, а не int или size_t. На практике разница редко бьёт, но при сравнении с size() компилятор может выдать предупреждение о знаковости.


🧊 Главное свойство

Как и все views, zip и enumerate ленивые — они не создают копий и не выделяют память. Это лёгкие обёртки поверх исходных данных, которые вычисляются только при обращении к элементу.


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

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

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1