您的位置:首页 > 编程语言 > C语言/C++

c++0x新特性实例(比较常用的)

2013-06-17 23:46 260 查看
//array

#include <array>

void Foo()
{
array<int,10> a;
generate(a.begin(),a.end(),rand);
sort(a.begin(),a.end());

for (auto n:a)
{
cout<<n<<endl;
}
cout<<"sizeof(a)="<<sizeof(a)<<endl;
}


//auto

#include <vector>
void Foo()
{
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;
}


//regex

#include <regex>
void Foo()
{
if( regex_match("Hello World!",std::regex("Hello .....!")) )
{
cout<<"Math!"<<endl;
}

if( regex_search("321Hello World!765",std::regex("Hello .....!")) )
{
cout<<"Search!"<<endl;
}

}


//thread

void Foo()
{
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 Foo()
{
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 Foo()
{
#define MAKE_STR(s) #s
enum class Type
{
I = 0,
II,
III,
IV,
V
};

if (4==(int)Type::V)
{
cout<<MAKE_STR(Type::V);
}
}


//tuple

tuple<int,string,float> Do()
{
return make_tuple(10,"hi",20.0f);
}
void Foo()
{
int a = 0;
string s = "";
float b = .0f;
tie(a,s,b) = Do();

cout<<a<<endl;
cout<<s.c_str()<<endl;
cout<<b<<endl;
}


//lambda

#include <functional>
void Foo()
{
int a = 0;
int b = 10;
function<int(int)> pA = [&a,b](int i)->int{ return a+=b+i; };
cout<<pA(1)<<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);
}


//final

class A final
{
};
/*
class B : public A
{
};
*/
class C
{
virtual void c()final{ }
};

class D : public C
{
//virtual void c(){ }
};


//override

class A
{
virtual void a(){}
};

class B : public A
{
virtual void a()override{}
//virtual void a(int i)override{} error
//virtual void c()override{} error
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: