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

时间:2016-02-10 06:50:32

标签: 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;
}

2 个答案:

答案 0 :(得分:5)

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

换句话说,这个:

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

相当于:

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

答案 1 :(得分:3)

第一个循环一次遍历一个字符串的字符串向量。每个字符串的内部循环遍历字符串的每个字符。因此c是对str中的字符的引用。