0Pricing
C++ Academy · Урок

Цикл for на основе диапазона с контейнерами

Удобно перебирайте контейнеры с помощью синтаксиса цикла for на основе диапазона из C++11.

«Цикл for на основе диапазона с контейнерами» — бесплатный урок C++ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Современный цикл

В C++11 появился цикл for по диапазону — он позволяет обходить любой контейнер без явных индексов и итераторов. Такой код чище, и в нём сложнее допустить ошибку.

std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
    std::cout << x << " ";
}

По значению

Приведённый выше пример копирует каждый элемент в x. Это нормально для недорогих типов, таких как int, но затратно для больших объектов.

По константной ссылке

Для нетривиальных типов используйте const auto&, чтобы избежать копирования и показать, что элементы не будут изменяться.

std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
    std::cout << name << "\n";
}

По ссылке для изменения

Используйте обычную ссылку, чтобы изменять элементы на месте.

std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
    x *= 10;
}
// v is now {10, 20, 30}

auto для вывода типа

Позвольте компилятору вывести тип элемента. Для строк, векторов структур и отображений это избавляет от большого количества ручного ввода.

Обход отображения

Каждый элемент представляет собой std::pair<const Key, Value>. Для более чистого кода используйте структурированное связывание (C++17).

std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

Обход строк

std::string — это контейнер, содержащий объекты типа char.

std::string s = "hello";
for (char c : s) {
    std::cout << c << " ";
}

Циклы по списку инициализации

Можно напрямую выполнить обход списка, заключённого в фигурные скобки.

for (int n : {1, 2, 4, 8, 16}) {
    std::cout << n << " ";
}

Цикл for по диапазону в обратном порядке

Обычный цикл for по диапазону движется вперёд. Для обратного обхода используйте std::ranges::reverse_view (C++20) или итераторы для ручного обратного обхода.

#include <ranges>
for (auto x : v | std::views::reverse) {
    std::cout << x;
}

Ограничения

Цикл for по диапазону не умеет:

  • Определять текущий индекс без отдельного счётчика
  • Пропускать элементы или изменять контейнер во время обхода
  • Параллельно обходить два контейнера (используйте обычный for или zip)

Пользовательские типы в цикле for по диапазону

Чтобы ваш класс работал с циклом for по диапазону, предоставьте методы begin() и end() или функции free_resources, возвращающие итераторы.

Быстрая проверка

Какая форма цикла for по диапазону изменяет элементы контейнера?

Итоги

Цикл for по диапазону — самый понятный способ выполнить обход. По умолчанию используйте const auto&, для изменения элементов — auto&, а для распаковки пар и кортежей — структурированные связывания.

Часто задаваемые вопросы

Урок «Цикл for на основе диапазона с контейнерами» бесплатный?

Да — полный текст урока «Цикл for на основе диапазона с контейнерами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Цикл for на основе диапазона с контейнерами»?

Удобно перебирайте контейнеры с помощью синтаксиса цикла for на основе диапазона из C++11. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Цикл for на основе диапазона с контейнерами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Ветвление: if-else, тернарный оператор, switch-case
  2. Шаблоны циклов: for, while, do-while
  3. Цикл for на основе диапазона с контейнерами
  4. Досрочный возврат, break, continue и goto
← Назад к C++ Academy