正确删除容器中的元素
//vector、deque、string适用下面的删除方法
c.erase(remove(c.begin(), c.end(), 1963), c.end());
//list
c.remove(1963);
//map、set
c.erase(1963);
//可以删除满足条件的所有元素
删除元素后释放空间
shrink_to_fit
reserve函数不会改变size的大小
emplace_back和push_back的区别
一句话总结就是以参数列表形式传入时emplace_back是原地构造,其他方式传入时是一样的
emplace_back以参数列表的形式传入时,原地构造,只会调用一次构造函数
emplace_back以左值对象的形式传入时,调用一次拷贝构造函数
emplace_back以右值对象(例如move(左值对象),或者就是右值)的形式传入时
a、有移动构造函数,调用一次移动构造
b、没有移动构造函数,调用一次拷贝构造函数
emplace_back以Person(“aaa”, “shandong”, 1991)形式传入时
a、有移动构造函数,构造临时对象,然后移动构造 最后析构临时对象
b、没有移动构造函数,构造临时对象,然后拷贝构造 最后析构临时对象
push_back以参数列表的形式传入时
a、有移动构造函数,构造临时对象 移动构造 临时对象析构
b、没有移动构造函数,构造临时文件 拷贝构造 临时对象析构
push_back以左值对象的形式传入时,调用一次拷贝构造函数
push_back以右值对象(例如move(左值对象),或者就是右值)的形式传入时
a、有移动构造函数,调用一次移动构造
b、没有移动构造函数,调用拷贝构造函数
push_back以Person(“aaa”, “shandong”, 1991)形式传入时
a、有移动构造函数,构造临时对象 移动构造 临时对象析构
b、没有移动构造函数,构造临时对象 拷贝构造 临时对象析构