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循环的一种特殊写法的主要内容,如果未能解决你的问题,请参考以下文章

for循环的另一种写法

for循环与for in循环

C++11 基于范围的for循环

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

go语言的if,swich,for的三种写法

JavaScript 中的 for 循环---------------引用