我与范围for循环的结缘是在牛客网的刷题中,我当时看到了别人的这个方法,当时也是思考了很久,奈何当时的种种限制,我并没有很深刻的去学习它,那么,在这里我希望我写的能对你们有所帮助!
基本上,你只要不是编程小白,那么for循环肯定都是知道的,不过你知道在c++11中引进的范围for循环吗,它是关于for循环的更加简洁的写法,不过它也不是万能的,以下:
范围for循环的表达式如下:
for (声明 : 表达式)
语句;
补充:
以上因为语句为一个,所以没有加上代码块,这是系统允许的,很多语言都是可以这样写的,所谓的代码块就是**{ }**;
比如:
for (声明 : 表达式){
语句;
语句;
}
当你写的代码的逻辑行超过2时,就需要用代码块来约束它,这里牵扯到了逻辑行与物理行的概念,可以自行去搜索
根据以上,我们来一步一步揭开它神秘的面纱:
one: for() 你在告诉编译器要干什么,创建一个for循环
two: 声明 所谓的声明就是定义 循环变量 ,要确保原序列中的元素
可以转化为定义的循环变量,说白了,就是要保持一样的
数据类型
three: 表达式 表达式必须是一个序列!序列!序列!就像数组,string
还有vector等等一样,说白了,共同点就是拥有返回
迭代器的begin()与end()成员
直接上代码:
#include
#include //因为使用了 getline来输入,需要这个头文件
using namespace std;
int main() {
string pmc;
getline(cin, pmc);//给string类型的 pmc 取值
for (int i = 0; i < pmc.length()/*或者 pmc[i]!= ';' */++ )i<<
cout [ pmc]i<< " " ;//以上为正常的 for循环
<<
cout ; endl//换行for
( char: s ) pmc<<
cout << s " " ;//以上为 范围for 循环
return
0 ;}
//输入
输入输出结果如下:
hello//第一种普通for循环的结果
h e l l o//第二种范围for循环的结果
h e l l ofor
接下来我们把它单独的拿出来看:
( char: s ) pmcfor ( )声明 : 表达式<<
cout << s " " ;; 语句:
结合上面的总结一起看
onefor ()for 你在告诉编译器要干什么,创建一个:循环
two: 声明 所谓的声明就是定义 循环变量 ,要确保原序列中的元素
可以转化为定义的循环变量,说白了,就是要保持一样的
数据类型
three! 表达式 表达式必须是一个序列!序列!序列,就像数组beginstring
还有vector等等一样,说白了,共同点就是拥有返回
迭代器的()end与()点个赞成员
以上就是非常基础的关于范围for循环的,我所能说清的知识了,希望对你
能有帮助,那不妨帮忙auto呗
当然接下来留下一些进阶点的干货
到这里,其实学过迭代器的人都应该了解了,这个所谓的范围for循环其实就是关于迭代器的知识,不了解的读者也没关系,你只要知道,它是一种通用的元素访问机制就可以了
auto:关于for的秒用:
( auto: s ) pmcfor ( )声明 : 表达式<<
cout << s " " ;; 语句1
根据之前的知识,我们知道,声明里定义了循环变量,序列中的每个元素都要能转换为循环变量的类型,既保持一样的数据类型,而确保类型相容最简单的方法就是使用auto,让系统根据序列返回的类型,来为循环变量定义类型
引用类型&:这里给2个代码,大家看看区别:
;号:
string pmcgetline
(,cin) pmc;for
( auto&: s ) pmc+=
s 1 ;for
( int= i 0 ;< i . pmcsize()/*pmc.length()*/; ++ )i<<
cout [ pmc]i<< " " ;2
;号:
string pmcgetline
(,cin) pmc;for
( auto: s ) pmc+=
s 1 ;for
( int= i 0 ;< i . pmcsize()/*pmc.length()*/; ++ )i<<
cout [ pmc]i<< " " ;123456
这里仔细看就会发现,只有一个 引用类型& 的区别
那么我输入 123456 时,大家觉得1号与2号会有啥区别呢?
如下:
2
3 4 5 6 7 //1号结果123456
1
2 3 4 5 6 //2号结果赞
这里直接说结论了,当我们需要对序列中的元素执行 写 *** 作 时,循环变量必须声明成引用类型,如果你不知道啥是写 *** 作,没事,在这里你可以理解为,因为需要改变原序列的值,所以要把循环变量声明为&类型
以上,是我对范围for循环的了解,希望对大家都有用,既然都看到了这里,我要一个免费的也是可以的吧,哈哈哈
最后的最后,表达式一定要是序列啊!序列!序列!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)