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;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-08-24 18:04  解放1949  阅读(277)  评论(0)    收藏  举报