范围for循环


 

1、C++使用如下方法遍历一个容器:

#include "stdafx.h"
#include<iostream>
#include<vector>

int main()
{
    std::vector<int> arr;
    arr.push_back(1);
    arr.push_back(2);

    for (auto it = arr.begin(); it != arr.end(); it++)
    {
        std::cout << *it << std::endl;
    }

    return 0;
}

2、同时使用std::for_each可以完成同样的功能(在头文件 #include <algorithm> 中),但是for_each的代码更简洁。

for_each事实上是个function template,其实质如下[effective STL item 41]:

template<typename InputIterator, typename Function>
Function for_each(InputIterator beg, InputIterator end, Function f) {
  while(beg != end) 
    f(*beg++);
}

使用for_each循环遍历如下:

#include "stdafx.h"
#include<algorithm>
#include<iostream>
#include<vector>

void func(int n)
{
    std::cout << n << std::endl;
}

int main()
{
    std::vector<int> arr;
    arr.push_back(1);
    arr.push_back(2);

    std::for_each(arr.begin(), arr.end(), func);

    return 0;
}

3、C++11新标准引入了更简单的for语句,这种语句可以遍历容器或其它序列的所有元素。范围for语句(rang for statement)的语法形式是:

for (declaration : expression)
    statement

expression表示的必须是一个序列,比如用花括号括起来的初始值列表、数组或者vector或string等类型的对象,这些类型的共同特点是拥有能返回迭代器的begin和end成员。

declaration定义一个变量,序列中的每个元素都能转换成该变量的类型。确保类型相容最简单的办法是使用auto类型说明符,这个关键字可以令编译器帮助我们指定合适的类型。如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型。

每次迭代都会重新定义循环控制变量,并将其初始化成序列中的下一个值,之后才会执行statement。像往常一样,statement可以之一套单独的语句也可以是一个块。所有元素都处理完毕后循环终止。

范围for语句的定义来源于与之等价的传统for语句:

for (auto beg = v.begin(), end = v.end(); beg != end; ++beg ){
    auto &r = *beg;     //r必须是引用类型,这样才能对元素执行写操作
    r *= 2;    //将v中每个元素的值翻倍
}

for循环新用法:

#include "stdafx.h"
#include<iostream>
#include<vector>

int main()
{
    std::vector<int> arr;
    arr.push_back(1);
    arr.push_back(2);

    for (auto n : arr)
    {
        std::cout << n << std::endl;
    }

    return 0;
}

 

原文链接: https://www.cnblogs.com/Maurice-code/p/10605544.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    范围for循环

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/292343

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午2:18
下一篇 2023年2月15日 下午2:20

相关推荐