vector clear和 swap的区别

clear 源码:

clear 只是清空了存储空间存放的元素。至于申请出的空间并没有释放。size 是0 但是他的容量capacity 没有变

 void clear() { erase(begin(), end()); }
 void erase(iterator first, iterator last) {
        iterator i = copy(last, finish, first);
	destroy(i, finish);
	finish = finish - (last - first); 
    }
template <class T>
	inline void destroy(T* pointer) {
    pointer->~T();
}

swap 源码:

swap 直接就把申请的空间都释放了,capacity 是 0 size 是0
std::vector<std::shared_ptr>().swap(vec);

void swap(vector<T, Alloc>& x) {
	::swap(start, x.start);
	::swap(finish, x.finish);
	::swap(end_of_storage, x.end_of_storage);
    }
template <class T>
	inline void swap(T& a, T& b) {
    T tmp = a;
    a = b;
    b = tmp;
}

具体调试结果:

没调用 celar() 和 swap() 的效果:
在这里插入图片描述
调用swap()的效果:
在这里插入图片描述
调用celar()的效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值