【问题标题】:What are the time complexities for size?大小的时间复杂度是多少?
【发布时间】:2020-04-23 15:08:31
【问题描述】:

我正在研究不同 STL 容器的各种操作的复杂性。通过这个网站上的different question,我找到了这张图表。

website link

我注意到这张图表中缺少一个操作是尺寸操作。 我想如果知道 .begin 和 .end 的复杂性,也可以计算大小的复杂性。但这些也不见了。

我找到了一个类似于我在this 问题中寻找的答案,但是这个是针对 Java 的,所以它不涵盖所有 STL 容器,它只定义了一些大 O 的大小给定的数据类型。

有谁知道各种容器的 .size 操作的复杂性,或者有人可以给我一个指针,告诉我在哪里可以找到这些复杂性。任何帮助将不胜感激。

另外,如果我的问题措辞有误和/或题外话。不要犹豫,提出修改建议。

【问题讨论】:

标签: c++ data-structures time-complexity big-o


【解决方案1】:

自 C++11 起,size 成员函数的复杂性对于所有标准容器都是不变的。

std::forward_list 是单链表数据结构的实现,不提供size 成员函数。大小可以使用迭代器以线性时间计算。

除了标准的 C++ 容器之外,所有数据结构都可以通过单独存储的大小变量进行扩充,以实现这种恒定的复杂性,但代价是插入和删除操作的常量开销很小。 Array 的特殊之处在于它不需要任何额外的开销(假设存储了 end 的迭代器)。

【讨论】:

  • 虽然并非所有标准版本的复杂性都保持不变。
  • (请注意,并非所有容器都有size 成员函数;对于std::forward_list,您需要单独存储或线性计算)
最近更新 更多