我知道迭代整个集合的时间复杂度需要O(n)
时间,其中n
是集合的大小。
问题是,在两个迭代器itBegin
和itEnd
之间迭代的复杂性是什么?也许它就像O(itEnd - itBegin + log n)
,但我无法证明。
答案 0 :(得分:0)
复杂性将是o(n)(n的小o)而不是O(n),这意味着在最坏的情况下,你将迭代整个集合。
答案 1 :(得分:0)
迭代整个std::set
的算法复杂度是O(n)。但是时间消耗大于迭代std::vector
,因为向量使用单个内存块。
如果要在2个迭代器itBegin
和itEnd
之间进行迭代,它也将是O(n1),但n1
将类似于std::distance(itEnd, itBegin)
,这样会更少在第一种情况下比n
。当你已经拥有迭代器时就是这种情况。
如果你想在迭代之前按值找到那些位置(你在开始时没有迭代器) - 这变成O(log n) + O(n2)
,实际上是O(log n)
。比如说,如果你想从值123
迭代到结尾 - 这将O(log n)
找到迭代到123
和O(n2)
迭代。