C++中的STL

正确删除容器中的元素

//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、没有移动构造函数,构造临时对象 拷贝构造 临时对象析构

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值