Mar*_*tos 6 c++ queue big-o data-structures
关于成员函数std::queue
的复杂性,该类尚不清楚size
.它似乎基于当时使用的数据结构实现.
人们会认为这size
将是O(C)
,但它是完全可能的它是O(N)
.显然,我可以保持自己的体型,但我宁愿打电话size
.
(问题修改):既然deque
是默认容器,什么是std :: deque :: size()的O()?
至少从C++ 11开始,复杂性std::queue::size
是恒定的:O(1).
std::queue
根据§23.6.3.1/ 1 的基础容器必须符合SequenceContainer
继承要求的基础容器Container
,这反过来又按照§23.2.1要求成员函数来保证这一点.size
有一个恒定的时间复杂性.
总结一下这里的非常好的答案:
O(1)
(@Jeffrey)O(1)
但至少是O(C)
。(@juanchopanza)因此,如果需要确保 C++98 中 size() 的 O(1) 性,则必须保留自己的计数。
如果可以的话,我想站起来感谢 C++11 小组弥补了这个可怕的规范漏洞。许多语言/库(例如 Scala)都煞费苦心地定义运算符的 BIG-O。鉴于 C++ 的主要用例是性能,我发现这种规范的缺乏令人惊讶。必须检查标头代码以确定std类的性能特征是完全不可接受的。