当前位置:  开发笔记 > 编程语言 > 正文

为什么标准C++容器适配器不能提供清晰的功能?

如何解决《为什么标准C++容器适配器不能提供清晰的功能?》经验,为你挑选了2个好方法。

有谁知道为什么std :: queue,std :: stack和std :: priority_queue不提供clear()成员函数?我必须假装这样一个:

std::queue q;
// time passes...
q = std::queue();  // equivalent to clear()

IIRC clear()由可用作底层容器的所有东西提供.有没有充分的理由没有容器适配器提供它?



1> Luc Touraill..:

好吧,我认为这是因为clear在队列,priority_queue或堆栈上不被视为有效操作(顺便说一句,deque不是,而适配器是容器).

使用容器适配器队列而不是容器双端队列的唯一原因是要明确表示您只执行队列操作,而不执行其他操作.(来自队列上的sgi页面)

所以当使用队列时,你所能做的就是推/弹元素; 清除队列可以被视为违反FIFO概念.因此,如果您需要清除队列,可能它不是真正的队列,您应该更好地使用双端队列.

然而,这种事物的概念有点狭隘,我认为像你一样清理队列是公平的.



2> Reunanen..:

Deque有明确的().参见,例如,http://www.cplusplus.com/reference/stl/deque/clear.html.

但是,队列没有.但是,为什么你会选择队列而不是deque呢?

使用容器适配器队列而不是容器双端队列的唯一原因是要明确表示您只执行队列操作,而不执行其他操作.

(http://www.sgi.com/tech/stl/queue.html)

所以我猜clear()不是队列操作.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有