Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/302: Рейтинг темы: голосов - 302, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 10.08.2018
Сообщений: 6

Что значит команда for (auto c:string)?

10.08.2018, 14:29. Показов 65583. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нигде не могу найти ответ, гугл выдаёт не то. Объясните что она делает, для чего она нужна и её более понятную запись.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2018, 14:29
Ответы с готовыми решениями:

Margin:0 auto что значит?
Доброго времени суток! Не могу найти, что означает margin:0 auto. 0 это понятно, -нет полей, а 0 auto?

Что значит эта команда
на Raspberry Pi cp /tmp/install/lib/* /lib/ -R Разъясните новичку пожалуйста.

Что значит команда time
пример использования команды time: Код Bash $ cd /usr/include $ time -р grep _POSIX_SOURCE */*.h > /dev/null В книжке дан...

5
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.08.2018, 14:59
mr_smith3122, это range-based for - цикл for, основанный на диапазоне.
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
10.08.2018, 14:59
Лучший ответ Сообщение было отмечено mr_smith3122 как решение

Решение

Она эквивалентна записи
C++
1
for(auto c = string.begin(); c != string.end(); ++c)
Короткая запись, которую вы привели появилась в 11 стандарте
Она основана на итераторах, подробнее - гуглите.

Цикл проходит по всему массиву и выдает сам объект этого массива
т.е.
C++
1
2
3
4
    string s = "sdfgg";
 
    for(auto c : s)
        cout << c;
Выведет тебе все элементы из списка s. Он поочередно возьмет каждый элемент (символ) и выведет его

Лучше использовать слова const и ссылочный тип для оптимизации. Такая запись будет быстрее (в теории) работать:

C++
1
2
3
4
    string s = "sdfgg";
 
    for(const auto &c : s)
        cout << c;
Лично я его применяю в основном для обхода всего контейнера (вектор/лист/прочее) и взаимодействия с ним

[upd] gru74ik, удалите мою первую запись тут
2
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.08.2018, 15:16
Цитата Сообщение от mvngr Посмотреть сообщение
Она эквивалентна записи
C++
1
for(auto c = string.begin(); c != string.end(); ++c)
Не-а ) Скорее так :
C++
1
2
3
4
5
6
7
8
9
10
11
{
    auto begin = string.begin() ;
    auto end   = string.end  () ;
    
    for ( ; begin != end ; ++begin )
    {
        _declarator = *begin ;
        
        statements...
    }
}
Где _declarator — переменная, которая стоит перед :.

Добавлено через 3 минуты
mvngr, Это я не прикопался. Важно понимать, что .begin() и .end() вызовутся лишь однажды — перед началом цикла. Исходя из этого, можно сделать вывод, что как-нибудь изменять размеры контейнеров не следует.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
10.08.2018, 18:46
mr_smith3122, по мне так более понятная запись это запись основанная на индексах, так как концепция индексов проще чем концепция итераторов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <cstddef>
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> vector {1, 2, 3};
 
    for (auto i : vector)
        std::cout << i << ' ';
 
    std::cout << std::endl;
 
    for (std::size_t i = 0; i < vector.size(); ++i)
        std::cout << vector[i] << ' ';
 
    std::cout << std::endl;
 
    for (std::vector<int>::iterator it = vector.begin();
         it != vector.end(); ++it)
            std::cout << *it << ' ';
 
    std::cout << std::endl;
 
    return 0;
}
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
10.08.2018, 22:27
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

C++
1
for(auto c = string.begin(), end = string.end(); c != end; ++c)
Добавлено через 1 минуту
Цитата Сообщение от _stanislav Посмотреть сообщение
mr_smith3122, по мне так более понятная запись это запись основанная на индексах, так как концепция индексов проще чем концепция итераторов.
Запись на индексах в шаблон не засунешь)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2018, 22:27
Помогаю со студенческими работами здесь

Что значит public string T и все что дальше в приведенном коде?
class String { private string A; public String() { } public string T { ...

Что значит string s;
string s; это определение строки? какая для неё нужна библиотека? для чего нужны эти библиотеки: #include&lt;stdlib.h&gt; ...

String^ что этот оператор значит?
Скажите пожалуйста, что значит эта птичка? Вот например String^ IntList::Show() { String^ s=&quot;&quot;; LI current =...

Что значит строка string[] str_arr?
Что значит строка string str_arr?

String.count(a[i]) Не могу понять что значит
Просматривая решения с олимпиад наткнулся на такой код. Вот такое задание: Поликарп — большой любитель проводить время в соцсетях....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru