C++ 11

  1. lambdas:inline函数,一种类型
    auto I=[]{
    	cout<<"Hello World"<<endl;
    };
    
    I();//小括号调用
    
    [...外部的变量](...参数)#mutable throwSpec -> retType#{...}
    #号内可写可不写,如果有一个写了就必须写前面的小括号
    
    int id=0;
    auto f=[id]()mutable{
    	cout<<id<endl;
    	++id;
    };
    id=42;
    f();  
    f();
    f();
    cout<<id<<endl;
    打印结果: 0 1 2 42
    //侧面说明lambda有状态,一直是同一个类对象,与函数指针不同
    相当于不知名的函数对象(或者仿函数):
    class Functor
    {
    	private:
    	int id;
    	public:
    	void operator()(){
    	cout<<id<<endl;
    	++id;
    	}
    };
    Functor f;
    
    int id=0;
    auto f=[&id]()mutable{
    	cout<<id<endl;
    	++id;
    };
    id=42;
    f();  
    f();
    f();
    cout<<id<<endl;
    打印结果: 42 43 44 45
    
    int id=0;
    auto f=[&id](){
    	cout<<id<<endl;
    	++id;
    };
    id=42;
    f();  
    f();
    f();
    cout<<id<<endl;
    报错:【error】没有mutable不能修改id
    
    lambda没有默认构造函数和赋值函数
    所以在set用lambda的时候要写上参数
    auto cmp=[](Person a,Person b){
    	return a.height>b.height;
    };
    set<Person ,decltype(cmp)>coll(cmp);
    
    template<class Key,class Compare=less<Key>,class Alloc=alloc>
    class set{
    	private:
    
    	rep_type t;
    	public:
    	set():t(Compare()){};
    	explicit set(const Compare& comp):t(comp()){};
    }
    
  2. decltype
    2.1 返回类型
    template< typename T1,typename T2>
    decltype(x+y) add(T1 x,T2 y);   //主要为了让编译器通过,但是这样写编不过,因为编译器还没看到x,y
    
    template< typename T1,typename T2>
    auto add(T1 x,T2 y) -> decltype(x+y);  
    
  3. variadic template
    void print()
    {
    }
    template<typename T,typename... Types>
    void print(const T& firstArg,const Types& ... args)
    {
    	cout<<firstArg<<endl;
    	print(args...)} 
    
  4. initializer list
    int  i; //未定义
    int j{}; //j=0,大括号赋初值
    int* p;   // 未定义
    int* q{};  //q=nullptr
    //{}设初值不能窄化
    int a{5.0};  //error or  warning
    
    initialzer_list<>, {}大括号内个数不定,类型需要一致,后面是个array
  5. 如果一个class有move版本的构造或者赋值函数,要把它们写成不抛出异常 ,noexcept
  6. 类的后面有final(),表示不可被继承,如果虚函数后有final(),表示虚函数不可被复写
  7. 模板的模板参数
    template<typename T,template<class T> class Container>
    class XCLs
    {
    	private:
    		Container<T> c;
    		XCLs(){
    		for(long i=0;i<SIZE;++i)
    		{
    			c.insert(c.end(),T());
    		}
    		Container<T> c1(c);
    		Container<T> c2(std::move(c));
    		c1.swap(c2);
    		}
    }
    
    template<typename T>
    using Vec=vector<T,allocator<T>>;
    
    XCLs<MyString,Vec> c1;
    
  8. 临时对象是一个右值
    move(左值)会变成一个右值
  9. tuple
     tuple<int, double, string> s( 1, 3.0, "spf" );
    auto t = make_tuple(1, 2.0, "spf" );
    int main()
    {
    	cout << get<0>(s) << " " << get<1>(s) << " " << get<2>(s) << endl;
    	int i=0; double d=0; string m;
    	tie(i, d, m) = s; //将i,d,m赋值为s的对应值
    	cout << i << " " << d << " " << m;
    	system("pause");
    	return 0;
    }
    
  10. 右值在传递过程中会产生不完美传递
       int a=0;
       process(a);   //视为process(int& ):0,左值处理
       process(1);  //视为process(int&& ):1,右值处理
       process(move(a));   视为process(int&& ):0,强制将a改为右值处理
       forward(2);  //forward(int&& ):0process(int &):0,右值经过forward()传给另一个函数变成了左值;
       
       void process(int& i)
       {
       	cout<<"lvalue"<<i<<endl;
       }
       void process(int&& i)
       {
       	cout<<"rvalue"<<i<<endl;
       }
       void forward(int&& i)
       {
       	cout<<"forward(int&&)"<<i<<endl;
       	process(i);
       }
    

以上内容参考侯捷老师的C++标准 11-14 总结

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值