首页 > 代码库 > C++11新特性实验
C++11新特性实验
#include <iostream>#include <vector>#include <map>#include <string>#include <algorithm>#include <utility>#include <tuple>#include <functional>#include <memory>using namespace std;void F(int a){ cout<<"int:"<<a<<endl;}void F(int *pa){ cout<<"int *:"<< pa <<endl;}void PrintVector(const vector<int> & vi){ cout<< "["; for(auto it = vi.begin(); it != vi.end(); ++it){ cout<< *it <<","; } cout<< "]" <<endl;}struct Sum{ Sum(){sum=0;} void operator()(int n){ sum += n; } int sum;};template<typename T>void Print(T t){ cout<< t <<endl; } template<typename Head, typename... Tail> void Print(Head head, Tail... tail) { cout<< head <<", "; Print(tail...); } class Foo{public: Foo(){ cout<< "Foo construct."<< this <<endl;} ~Foo(){ cout<< "Foo destruct."<< this <<endl; } int val; void bar(){ cout<< "Foo.bar() called."<< val <<endl; }};int main(){ /****************************************/ auto i = 12345678; auto s = "Hello中国"; auto f = 3.14; vector<int> vi {1,2,3,4}; decltype(f) d = 6.28; PrintVector(vi); cout<< i << endl; cout<< s << endl; cout<< f << endl; // old style: vector<int>::iterator it = vi.begin() cout<< endl; cout << "decltype(x):" << d <<endl; /****************************************/ // NULL vs. nullptr int a = 0; int *pa = nullptr; int *pb = NULL; F(a); F(pa); F(pb); bool bEqual = (pa == pb); cout<< bEqual <<endl; /****************************************/ // for_each map<string,int> m1 { {"Hello中国",110}, {"美国",345}, {"Japan",000} }; for(auto item: m1){ cout<<"Key:"<<item.first<<",Value:"<<item.second<<endl; } for_each(vi.begin(),vi.end(),[](int & x){ x*=2; } ); PrintVector(vi); // Calls Sum::operator() for each number Sum sum1 = for_each(vi.begin(),vi.end(),Sum()); cout<<"Sum:"<<sum1.sum<<endl; int arg1=1,arg2=2; for_each(vi.begin(),vi.end(),[=](int & x){ x *=(arg1+arg2); } ); PrintVector(vi); for_each(vi.begin(),vi.end(),[=](int & x) -> int { return x *(arg1+arg2); } ); PrintVector(vi); /****************************************/ // 变长参数模板 auto pair1 = make_pair(110,"Hello中国"); cout<< "pair.first:"<<pair1.first<<",pair.second:"<<pair1.second<<endl; auto tuple1 = make_tuple("Hello",1,3.14); cout<< std::get<0>(tuple1) <<endl; cout<< std::get<1>(tuple1) <<endl; cout<< std::get<2>(tuple1) <<endl; Print(1); Print(1,"Hello中国"); Print(1,"Hello中国",3.1415926); cout<< "******************************" <<endl; // unique_ptr具有转移语义 unique_ptr<Foo> p1(new Foo()); if(p1) p1->val = 123; if(p1) p1->bar(); { unique_ptr<Foo> p2 = std::move(p1); p2->val *=2; p2->bar(); } if(p1) p1->bar(); cout<< "******************************" <<endl; // shared_ptr shared_ptr<Foo> sp1(new Foo()); if(sp1) sp1->val = 123; if(sp1) sp1->bar(); { shared_ptr<Foo> sp2 = sp1; sp2->val *=2; sp2->bar(); } if(sp1) sp1->bar(); return 0;}
C++11新特性实验
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。