一.auto
可以根据后面赋值类型自动推导类型
auto + 变量名 = 初值;
我们在定义指针时,可以直接使用 auto 来定义
list<int> l;
auto it = l.begin();
二.匿名函数
[外部访问限制] (参数){函数主体};
外部访问限制一般有三种
1.不填: 禁止访问同一作用域的其他参数
2.= : 将同意作用域内的参数以值传递的方式使用
3.& : 将同一作用域内的参数以引用的方式使用
可以用来定义简单的函数 ,可以与for_each 放在一起使用
list<int> l;
for_each(l.begin(),l.end(),[](int n){cout << n << endl;});
三.遍历数组
有一种新的方式遍历数组
for(数组元素类型 + 名 :数组名)
int a[] = {1,2,3,4,5};
for(int n:a)
{
cout << n << endl;
}
四 .智能指针
在头文件<memory>
智能指针有三种
1.shared_ptr
在内部有一个引用计数,每多一个shared_ptr使用相同的空间,计数加一,每次析构,计数减一,当计数减为零时,自动删除指向堆区的空间
使用方法
shared_ptr<int> p1; //不传入任何实参
shared_ptr<int> p2(nullptr); //传入空指针 nullptr
shared_ptr<int> p3(new int(10)); //指向一块存有 10 这个 int 类型数据的堆内存空间
shared_ptr<int> p4 = make_shared<int>(10); //与p3一样
使用的函数主要有
reset() 没有参数时,让当前指针指向空
get() 获得智能指针指向的主体地址
use_count() 返回指向这个对象相同空间的指针数量
2.unique_ptr
与shared_ptr 类似 但是只能存在一个指向同一空间的智能指针
3.weak_ptr
weak_ptr<T> 模板类没有重载 * 和 -> 运算符 ,不能修改shared_ptr_ptr所指向的堆空间
reset() 没有参数时,让当前指针指向空
lock() 若没过期 返回指向相同的的shared_ptr,过期则返回空
expired() 检查是否过期 ,即是否为空 或者指向的空间被释放