内部for循环的目的是什么'for(auto&str:vec)'?

Tho*_*hor 4 c++ for-loop vector

我是C++的新手,正在尝试学习矢量的概念.我在网上看到了这段代码.我的问题是,'for(auto&str:vec)'内部for循环的目的是什么?为什么作者为第一个引用(&str)创建了第二个引用(&c)?

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;
}
Run Code Online (Sandbox Code Playgroud)

Hum*_*awi 5

它用于将字符串的每个字符转换str为大写.

换句话说,这个:

for(auto &c : str) {
   c = toupper(c);
}
Run Code Online (Sandbox Code Playgroud)

相当于:

for(size_t i = 0; i < str.size(); ++i) {
    str[i] = toupper(str[i]);
}
Run Code Online (Sandbox Code Playgroud)