zoukankan      html  css  js  c++  java
  • 【校招面试 之 C/C++】第32题 C++ 11新特性(三)之for关键字

    1、for循环的一般写法:

    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    for (int i = 0; i < 10; i++)
    	cout << arr[i];
    

    而遍历容器类的For如下:

    std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
    for (std::vector<int>::iterator itr = vec.begin(); itr != vec.end(); itr++)
    	std::cout << *itr;
    

    2、C++11中引入了这种方法也就是基于范围的For(Range-Based-For),用基于范围的For 改写上面两个例子:

    std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
    for (auto n :vec)
    	std::cout << n;
     
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    for (auto n : arr)
    	std::cout << n;
    

    可以看到改写后的使用方法简单了很多,代码的可读性提升了一个档次,但是需要注意的在上述对容器的遍历是只读的,也就是说遍历的值是不可修改的,看下面例子:  

    std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
    cout << "修改前" << endl;
    for (auto n :vec)
    	std::cout << n++;
     
    cout << endl;
    cout << "修改后" << endl;
    for (auto j : vec)
    	std::cout << j;
    

    在上述例子中,我们首先遍历容器的内容,然后给容器内的元素每个都加1,然后再遍历一次容器的内容,示例的输出结果如下:

    修改前
    12345678910
    修改后
    12345678910
    

    如果要遍历容器内的元素的同时又要修改元素的值该怎么做呢,方法就是将遍历的变量声明为引用类型,看下面例子:

    std::vector<int> vec {1,2,3,4,5,6,7,8,9,10};
    cout << "修改前" << endl;
    for (auto& n :vec)
    	std::cout << n++;
     
    cout << endl;
    cout << "修改后" << endl;
    for (auto j : vec)
    	std::cout << j;
    

    代码的输出结果为:

    修改前
    12345678910
    修改后
    234567891011
    

      

      

  • 相关阅读:
    [源码解析] 消息队列 Kombu 之 基本架构
    拿破仑,技术大牛晋级管理之后的困境
    Dyno-queues 分布式延迟队列 之 辅助功能
    Dyno-queues 分布式延迟队列 之 生产消费
    Dyno-queues 分布式延迟队列 之 基本功能
    DOM和BOM的区别
    Navigator对象
    expr命令
    ReactRouter的实现
    History对象
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9379835.html
Copyright © 2011-2022 走看看