how can i clear a stack in c++ efficiently?
我有一个名为页面的C++堆栈。因为我没有clear()函数来清除堆栈,所以我编写了以下代码:
1 2 3 4 5 | stack<string> pages; //here is some operation //now clearing the stack while(!pages.empty()) pages.pop(); |
现在我的问题是:有没有一种更有效的方法来清除堆栈?事先谢谢。
通常,您不能清除O(1)中的复制容器,因为您需要销毁这些副本。可以想象,模板化的复制容器可以有一个部分专用化,在O(1)时间内清除,这是由一个特征触发的,该特征指示所包含对象的类型具有一个普通的析构函数。
如果你想避免循环。
1 | pages=stack<std::string>(); |
或
1 | stack<std::string>().swap(pages); |
我认为没有更有效的方法。堆栈是一种定义良好的数据类型,专门设计用于在后进先出的上下文中操作,不打算立即清空。为此,您可以使用
如果您没有选择,并且必须使用Stack,那么您的方法没有任何问题。不管是哪种方式,如果构建了元素,那么它们都必须被销毁,不管您是分配一个新的空堆栈,还是弹出所有元素,或者其他什么方式。
我建议用
- 大小(或调整大小)
- 空的
- 推挽
- 后背
- 后面
- 清楚的
它只是更方便,所以您可以使用
如何对std::stack进行子类化,并实现一个这样简单的clear()方法,访问底层容器C?
1 2 | public: void clear() { c.clear(); } |