我是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;
}
答案 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
中的字符的引用。