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;
    }
  • 相关阅读:
    第24课 #pragma使用分析
    第23课 #error和#line使用分析
    第22课 条件编译使用分析
    第21课 宏定义与使用分析
    Codeforces Round #142 (Div. 2)B. T-primes
    SPOJ XMAX
    Uva 10036
    Timus 1009. K-based Numbers
    MBLAST
    ROADS
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3279609.html
Copyright © 2011-2022 走看看