某一天看到班里面大佬在用vector时,在for循环处使用了for(auto i:tmp)
这样的语句。
就觉得很是神奇,为什么for循环可以被简化成这样?!
后来就上网查阅资料,发现这个就是叫做基于范围的for循环
基本格式
(现在我有一个容器,设为tmp)
那么对其遍历可以使用以下两种形式
-
for(auto i:tmp) -
for(auto &i:tmp)
大概你也看到引用了 所以说这两种的主要区别就是上面的只读的,下面的是可以修改值的
这个其实就是C++11提供给我们的一种简写的方式
注意事项
这里可以参考基于范围的For使用需要注意的细节
我简单提出几点自己可能会用到的
-
不要改变容器(这个必出锅)
-
如果冒号后面的表达式是一个函数调用时,函数仅会被调用一次。
-
要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。因为选用引用类型作为循环控制变量,除了要改变数组元素的值,更为了避免数组被自动转成指针。
举个例子
用自己python大作页业中的一段代码来演示一下吧🤞
virtual antlrcpp::Any visitOr_test(Python3Parser::Or_testContext *ctx) override {
const auto tmp= ctx->and_test();
if((signed)tmp.size()==1)
return visitAnd_test(tmp[0]);
for(auto i:tmp){
Rec T=visitAnd_test(i).as<Rec>();
if(T.transbool().getbool()) return Rec(bool(true));
}
return Rec(bool(false));
}