C++:范围for

产生原因:范围遍历需要优化

        在C语言中,编译可以通过连续空间的下标访问,非连续空间的指针访问的for循环结构,这解决了范围遍历的问题——从头至尾的访问存储空间,但是他们都有着存储的功能,然而却没有提供数据管理的方法,这就使得使得我们需要自己去设计方法,这不符合交给对象的思想, 因此要在其上进行再封装,以实现范围遍历的自动的方法处理,由此基础上的产生————(两者合并的)对应下标的for循环基于一定范围范围for。

形式:

遍历访问一般格式

for(迭代变量定义:迭代范围起始处)// 等效于 for(迭代变量的定义及初始化;迭代变量的范围判断;迭代变量的迭代)
{};                            //        {};
  

        由此可看出范围for本质上是对for循环的写入了方法

eg。已连续的空间为例

int num [] = {2l,3,4,34,323,324,456,23};
for (int e : num)
{
   //.....
}

int :是由与数据类型决定的;

int e:定义一个与源数据类型相同的临时变量。

num:是数据的起始地址(数组名)。

int e : num 的4重功能:定义的拷贝变量由num赋值;将拷贝变量的值解引用给e;由拷贝变量进行判断是否到边界;拷贝变量进行迭代

对迭代变量的类型进行优化,

与auto结合,增加兼容性

#include<iostream>    
    
using std::endl;    
using std::cout;    
    
int main ()    
{    
  char string [] = "stl resource!";                            
  for ( auto e : string )    
  {    
    cout<<e;    
  }    
  cout << endl;    
}  

范围for与auto类型的结合,使得e可接受更多类型变量而不用改变类型

与应用结合,实现修改

using std::endl;    
using std::cout;    
using std::cin;    
                      
int main ()                                                    
{      
               
  char temp [11 ];    
  for ( char& e : temp )    
  {                    
    cin>>e;    //cin不读换行符的
  }    
       
  for (auto e:temp)    
  {    
    cout <<e;    
  }    
  cout << endl;    
}

        因为引用是对变量起别名,也就是通过拷贝份改原份,故可起到修改的作用,等校友配合指针的for循环

注意:

        因为auto类型的变量定义时需要正确的,而非其地址,所以此时是不能使用auto的

使用条件:有明确的范围

        因为范围for的方法是固定的,判断它范围的依据要求是被迭代的数据自身所带有的。如下

数组的首元素与尾元素。

      指针的范围

        因为仅指针而言,它是没有边界一说的(它没有自带的边界),所以在范围for中的e是不会直接使用指针类型的,当然并不是说不是说不用,而是不直接用,而是在指针的基础上套上一层壳以做边界,各类数据结构的begin与end

暂时将其视作数组的下标访问的循环结构的优化,其他用法体现在容器中。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值