• c++11——基于范围的for循环


     c++11中有基于范围的for循环,基于范围的for循环可以不再关心迭代器的概念,只需要关系容器中的元素类型即可,同时也不必显式的给出容器的开头和结尾。

    int arr[] = {1, 2, 3, 4};
    for(int a : arr){
    ...
    }
    
    vector<string> str_arr{"hello", "world", "fuck"};
    for(auto v : str_arr){
    ...
    }
    
    如果希望修改容器中的元素,则可以使用引用类型:
    for(auto& v: arr){
    ....
    }
    

        在使用基于范围的for循环的时候,还需要注意容器本身的一些约束。比如

    由于set和map中的元素存放为有很强的大小顺序,因此不能随便修改他们的值
    std::set<int> s = {1, 2, 3};
    for(auto& val: s){
        std::cout << val ++ << endl;    //出错,由于std::set中的内部元素是只读的,因此for循环的auto会被自动推导为 const int&
    }
    

        注意基于范围的for循环的for机制,基于范围的for循环一般在循环开始之前就确定好迭代的范围,而不是在每次迭代之前去调用一次arr.end().

    std::vector<int> arr = {1, 2, 3, 4, 5};
    for(int a : arr){
        ...
    }
    相当于
    auto && __range = (arr);
    for(auto __begin = __range.begin(), __end = __range.end(); __begin != __end; ++__begin){
        ...
    }
    

        尽量不要在迭代的过程中修改迭代的容器,但是在不得不这样做的时候,通过理解基于范围的for循环的特点,就可以方便的分析每次迭代的结果,提前避免算法的错误。

    +
  • 相关阅读:
    加法图灵机
    Experiment 1
    进制转换
    快速排序
    辗转相除、线段交点、多角形面积公式
    JS如何优雅监听容器高度变化
    解决react和其他框架之间的交互问题
    MacBook Pro触控板手势
    代理 请求登录失效(显示未登录)问题
    Web端 长按事件
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/4803060.html
Copyright © 2020-2023  润新知