1.第一个好用的新东西就是关键字auto;
auto就是自动推导你定义那个东西的类型
2.关键字tuple
类比pair,pair只能定义两个数据,tuple可以定义多个数据类型,非常好用。
auto my=make_tuple("999","888","777");
cout<<get<0>(my);
3.统一初始化
如:int a[4] {1,2,3,3}
vector<int> {....}
即所有的类型都可以在后面加一个{}进行初始化
4.遍历
for(decl:coll)
{
statement;
}//其中decl是元素,coll是容器,具体例子看下面代码
for(int i: {2,3,5,7,9,13})
{
cout<<i<<endl;
}
vector<double>vec;
...
for(auto elem : vec)
{
cout<<elem<<endl;
}
for(auto& elem : vec)
{
elem *=3;
}
值得注意的是 上面代码段中一个是 auto elem 和auto& elem这两个的区别,前者只是把容器的值复制过来进行遍历,并不能改变其值,而后者&类似与指针,可以改变其值,简单来记的话,建议加上&。
5. variadic template
数量不定的模板参数,重量级的新特性。
一个简单的应用:假设让你设计一个函数,函数的参数可以是任意类型,参数可以任意多个,利用这个新特性就可以很好的设计出来。
void print()
{
}
template<typename T,typename... Type>
void print(const T& firstArg,const Types&... args)
{
cout<<FirstArg<<endl;
print(args...);
}
读懂上面代码,首先需要理解模板的概念,然后c++中的关键字...代表的是其他所有元素。
print(7.5,"hello",42);
运行结果就为
7.5
hello
42
6.Alias Template
化名模板
就如字面意思,给模板起一个别名
using vec=vector<T,MyAlloc<T>>;
//上面一行代码的意思就是给vector起了个别名vec
以后就可以这样用了
vec<int> coll;
7.lambda
仿函数
auto l=[]{
cout<<"hello lambda"<<endl;
};
l();//作用就是打印“hello lambda”