当前位置:   article > 正文

C++:清空stl的stack容器_c++ stack清空

c++ stack清空

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

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

但是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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

输出:

Program use Time: 168283.0000 ms
Program use Time: 510330.0000 ms
  • 1
  • 2
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号