Error[8]: Undefined offset: 222, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

我的题外话,可以直接跳过,没事

我与范围for循环的结缘是在牛客网的刷题中,我当时看到了别人的这个方法,当时也是思考了很久,奈何当时的种种限制,我并没有很深刻的去学习它,那么,在这里我希望我写的能对你们有所帮助!

关于范围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循环的了解,希望对大家都有用,既然都看到了这里,我要一个免费的[+++]也是可以的吧,哈哈哈

最后的最后,表达式一定要是序列啊!序列!序列!

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
【C++】关于我对“范围for循环“的了解_C_内存溢出

【C++】关于我对“范围for循环“的了解

【C++】关于我对“范围for循环“的了解,第1张

我的题外话,可以直接跳过,没事

我与范围for循环的结缘是在牛客网的刷题中,我当时看到了别人的这个方法,当时也是思考了很久,奈何当时的种种限制,我并没有很深刻的去学习它,那么,在这里我希望我写的能对你们有所帮助!

关于范围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循环的了解,希望对大家都有用,既然都看到了这里,我要一个免费的也是可以的吧,哈哈哈

最后的最后,表达式一定要是序列啊!序列!序列!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1353206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存