C++11基于范围的for循环for range-based loop

在C++11中引入了for(auto s:sp),for(auto &s:sp)这种新的特性,sp是一个序列,s是一个用于访问sp中基本元素的变量,每次迭代都会用sp中的下一个元素来初始化s。C++基于这种方式,以一种统一、简洁的方式遍历数组和容器。

Syntax
attr(optional) for ( range_declaration : range_expression ) loop_statement      
attr(optional) for ( init-statement(optional)range_declaration : range_expression ) loop_statement      (since C++20)
//for range-based loop大致形式是这样的:
{
    auto && __range = range_expression ; 
    for (auto __begin = begin_expr, __end = end_expr; 
    __begin != __end; ++__begin) { 
    range_declaration = *__begin; 
    loop_statement 
   } 
} //(until C++17)

{
    auto && __range = range_expression ; 
    auto __begin = begin_expr ;
    auto __end = end_expr ;
    for ( ; __begin != __end; ++__begin) { 
    range_declaration = *__begin; 
    loop_statement 
    } 
} //(since C++17)

{
    init-statement
    auto && __range = range_expression ; 
    auto __begin = begin_expr ;
    auto __end = end_expr ;
    for ( ; __begin != __end; ++__begin) { 
    range_declaration = *__begin; 
    loop_statement 
    } 
} //since C++20

//auto s 和 auto& c,会被替换到range_declaration的地方.

下面来看两个例子:

//demo1
#include <iostream>
using namespace std;
int main() 
{
  int arr[] = {1,3,5,7};
  //在这里是采用只读方式遍历数组
  for(auto i : arr)   
  {
      i += 2;
  }
  for(int idx = 0; idx != 4; ++idx)
  {
      cout << arr[idx] << endl;
  }
}

// Output:
1
3
5
7
//若采用下面的方式进行遍历,arr中每个元素都会自动加2
for(auto&i : arr)   
  {
      i += 2;
  }

如果只是希望遍历,而不需要修改,可以使用const auto& 来定义i的类型,这样对于复制负担比较大的容器元素(比如:std:vector

Reference:Range-based for loop (since C++11)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Erice_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值