zoukankan      html  css  js  c++  java
  • C++ 0X 新特性实例(比较常用的) (转)

    转自:http://www.cnblogs.com/mrblue/p/3141456.html

    //array
    #include <array>
    void Foo1()
    {
        array<int, 10> a;
        generate(a.begin(), a.end(), rand);
        sort(a.begin(), a.end());
    
        for (auto n:a)
        {
            cout<<n<<" ";
        }
        cout<<"sizeof(a) = "<<sizeof(a)<<endl;
    }
    //regex
    #include <regex>
    void Foo2()
    {
        if( regex_match("Hello World!", regex("Hello World!")) )
        {
            cout<<"Math!"<<endl;
        }
    
        if (regex_search("321Hello World!765", std::regex("Hello")) )
        {
            cout<<"Search!"<<endl;
        }
    }
    //thread
    #include <thread>
    void Foo3()
    {
        thread t1([]
        {
            for (int i = 0; i < 10; i++)
            {
                cout<<"t1:"<<i<<endl;
            }
        }
        );
    
        thread t2([]
        {
            for (int i = 0; i < 10; i++)
            {
                cout<<"t2:"<<i<<endl;
            }
        }
        );
    
        t1.join();
        t2.join();
    }
    //future  (暂时没理解)
    #include <future>
    int Test(int a, int b)
    {
        cout<<"Test("<<a<<","<<b<<")"<<endl;
        return a+b;
    }
    void Foo4()
    {
        future<int> f1 = async(Test,1,1);
        cout<<"f1"<<endl;
    
        future<int> f2 = async(Test,2,2);
        cout<<"f2"<<endl;
    
        future<int> f3 = async(Test,3,3);
        cout<<"f3"<<endl;
    
        cout<<f1.get()<<endl<<f2.get()<<endl<<f3.get()<<endl;
    }
    //enum class
    void Foo5()
    {
    #define MAKE_STR(s) #s    
        enum class Type
        {
            I = 0,
            II,
            III,
            IV,
            V
        };
    
        if( 4==(int)Type::V )
            cout<<MAKE_STR(Type::V)<<endl;
    }
    //auto
    #include <vector>
    void Foo6()
    {
        auto a = 10;
        cout<<a<<endl;
    
        auto b = 20.0f;
        cout<<b<<endl;
    
        auto& c = a;
        c++;
        cout<<a<<endl;
    
        vector<int> vec;
        
        for(int i = 0; i<10; i++)
        {
            vec.push_back(i);
        }
    
        for(auto i = vec.cbegin(); i!=vec.cend(); i++)
        {
            cout<<*i<<endl;
        }
    
        auto pF = [&c](int i)->int{ return c+=i; };
        cout<<pF(1)<<endl;
        cout<<a<<endl;
    }
    //lambda
    #include <functional>
    void Foo7()
    {
        int a = 0;
        int b = 10;
        function<int(int)> pA = [&a,b](int i)->int{ return a+=b+i; };
        cout<<pA(a)<<endl;
        cout<<a<<endl;
    
        //function<int(int)> pB = [&a,b](int i)->int{ return b+=a+i; }; 
        //compile error : 'b': a by-value capture cannot be modified in a non-mutable lambda
        cout<<b<<endl;
    
        auto pC = [&](int i)->int{ return pA(i); };
        cout<<pC(1)<<endl;
    }
  • 相关阅读:
    [PHP] ::class的具体作用
    [linux] 查看所有的系统用户
    [PHP] composer install和composer update的区别
    [PHP] 解决composer install报错: it could not be found in any version, there may be a typo in the package name
    [git] git中origin的含义
    [git] 打标签命令
    [git] git clone指定分支代码
    [git]git中分支的概念
    [PHP] 对象和引用
    [正则]正则表达式里面的?: ?! ?= ?<=
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3279609.html
Copyright © 2011-2022 走看看