Точно, как работает диапазон? - PullRequest
0 голосов
/ 11 октября 2018

Я читал об операторах "range for", когда запутался, как именно это работает.

Ниже приведена программа для преобразования строки в верхний регистр.

string s("Hello World!!!");

//convert s to uppercase

for( auto &c :s )  // for every char in s
   c= topper(c);   //  c is a reference,so the assignment changes the 
                   //  char in s
cout<< s << endl;

Какссылка на строку (то есть c) меняет элементы на верхний регистр?

Я искал, как здесь может работать итерация, но я не смог найти ответ.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

«c» - это не обычная переменная, она действует как прокси (или ссылка) для каждого элемента (символа) в строке.

Изменяя «c», вы фактически изменяете значение, которое«с» ссылается на.

0 голосов
/ 11 октября 2018

Этот фрагмент кода

for (auto& c : s)
{
    c = toupper(c); 
}

примерно переводится в этот

for (auto it = std::begin(s); it != std::end(s); ++it)
{
    auto& c = *it;
    c = toupper(c);
}

, который представляет собой базовый цикл итератора, описанный в любой книге C ++ для начинающих.


cppreference имеет более подробное и точное объяснение .

...