C++11for循环的一种特殊写法
Posted 老虎中的小白Gentle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11for循环的一种特殊写法相关的知识,希望对你有一定的参考价值。
C++1.0的for循环写法是这样的:
#include <iostream>
using namespace std;
int main()
{
int n[10]{1,2,3,4,6,8,9,0}; //后面几位会用0补充
for(int i = 0; i < 10; i++)
{
cout<<n[i]<<endl;
}
}
C++2.0(C++11)新版的for循环是这样的:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
for(int i :{1,2,3,4,6,8,9})
{
cout<<i<<endl;
}
cout<<"------------"<<endl;
int n[10]{5,8};
for(int i : n)
{
cout<<i<<endl;
}
cout<<"------------"<<endl;
vector<string> vec{"hello","Gentle","give me a like"};
for(auto a : vec)
{
cout<<a<<endl;
}
cout<<"------------"<<endl;
for(auto& a: vec)
{
a += "hhh";
}
for(const auto& a : vec)
{
cout<<a<<endl;
}
}
运行结果:
新版的for循环代码简洁,让人舒服,特别在写迭代器时,我知道这种写法后就一直用了,fall In love for it。
这简单的操作背后编译器做了些什么动作了呢?
仔细看图:
左边是我们用的for循环,右边是它的底层实现。
注意当元素在for循环中初始化为decl时,不可能进行显式类型转换。
如下代码:
#include <iostream>
#include <vector>
using namespace std;
class C
{
public:
explicit C(const string &s);
};
int main()
{
vector<string> vs{"AA","BB","CC"};
for(const C& elem : vs) //ERROR 没有定义从字符串到C的转换
{
cout<<elem<<endl;
}
}
以上是关于C++11for循环的一种特殊写法的主要内容,如果未能解决你的问题,请参考以下文章