基于范围的for循环中的解引用迭代器

时间:2020-07-21 05:44:04

标签: c++ c++11

在此代码中:

string s = "hello";

for(auto i : s)
{
    i = 'p';
    cout<<i<<'\n';
} 
cout<<s<<endl;

输出将是:

p
p
p
p
p
hello

因此,当使用i来引用字符串s中的下一个元素时,它不是迭代器而是解引用的迭代器? 如果是auto &i,则肯定会更改字符串s的值,指出它是取消引用的迭代器。正确吗?

1 个答案:

答案 0 :(得分:-1)

所以当我用来引用字符串s中的下一个元素时,它不是迭代器而是解引用的迭代器?

种类。
i复制s中迭代器位置的值。这不是参考。在大多数使用情况下,i值预计不会更改,那么您可以使用:

for(const auto& i : s)

如果它是自动&i,则肯定会更改string s的值,指出它已被取消引用迭代器。正确吗?

是的。 for(auto& i : s),使s由于i而可修改。