C++:清空stl的stack容器

很遗憾,没有现成函数,可以采用

stack<int> s;
while(!s.empty()) s.pop();
// stack操作的是堆内存,所以要一个一个弹出。
//
stack<int> s;
stack<int>().swap(s);
// swap相当于交换了s和一个空临时stack的内容,然后临时stack再结束生命周期,但由于操作的是堆空间,其实还是一个一个释放空间。

但是swap比pop要快,耗时差不多是1/3

测试代码:

int N = 10000000;

stack<int> s2;
for(int i=0;i<N;i++) s2.push(i);

double s2a = (double)clock();
stack<int>().swap(s2);
double s2b = (double)clock();
printf("\e[01;34m Program use Time: \e[01;31m%.4f ms\e[0m\n",s2b - s2a);

stack<int> s1;
for(int i=0;i<N;i++) s1.push(i);

double s1a = (double)clock();
while(!s1.empty()) s1.pop();
double s1b = (double)clock();
printf("\e[01;34m Program use Time: \e[01;31m%.4f ms\e[0m\n",s1b - s1a);

输出:

Program use Time: 168283.0000 ms
Program use Time: 510330.0000 ms
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值