2016-02-10 3 views
4

Я новичок в C++ и стараюсь выучить концепцию вектора. Я видел этот код в Интернете. Мой вопрос в том, какова цель внутреннего для цикла внутри 'for (auto & str: vec)'? Почему автор создал вторую ссылку (& c) на первую ссылку (&)?Какова цель внутреннего внутреннего цикла for (auto & str: vec)?

int main() { 
    vector<string> vec; 
    for (string word; cin >> word; vec.push_back(word)) { 
    } 
    for (auto &str : vec) { 
     for (auto &c : str) { 
      c = toupper(c); 
     } 
    } 
    for (int i = 0; i != vec.size(); ++i) { 
     if (i != 0 && i % 8 == 0) cout << endl; 
     cout << vec[i] << " "; 
    } 
    cout << endl; 
    return 0; 
} 

ответ

5

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

Другими словами, это:

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

эквивалентно:

for(size_t i = 0; i < str.size(); ++i) { 
    str[i] = toupper(str[i]); 
} 
+0

Большое вам спасибо! – Thor

3

Первый цикл переходит в вектор строк одна строка за один раз. Внутренний цикл для каждой строки проходит через каждый символ строки. Таким образом, c является ссылкой на символ в str.

+0

Спасибо вам большое! – Thor

Смежные вопросы