范围for循环(c++11)

1.概念

1)c++11新标准下用范围for循环来遍历序列

2)使用范围for循环时,如果要修改序列中的元素,则必须把循环变量定义成引用类型:

int main()
{
    string s = "abcdefg";
    for (char& ch : s)
        ch = toupper(ch);//转化成大写
    cout << s << endl;    //输出:ABCDEFG

    return 0;
}

3)与范围for循环等价的普通for循环如下,由此可以看出,如果ch不是引用,它只是*beg的一份拷贝,改变这份拷贝的值没有意义

for (auto beg = s.begin(), end = s.end(); beg != end; ++beg)//范围for循环的等价传统for循环
{
    char& ch = *beg;
    ch = toupper(ch);
}

4)同时,我们能够看到,范围for循环中预存了迭代器end()的值,所以不能通过范围for循环给vector添加或删除元素,因为一旦在vector添加或删除元素,预存的end就可能变得无效了(c++ primer 5th p169)

原文地址:https://www.cnblogs.com/Joezzz/p/9904237.html