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

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
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐