很遗憾,没有现成函数,可以采用
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