用stl向量计算复杂度?

时间:2013-12-12 11:20:32

标签: c++ algorithm vector stl complexity-theory

我正在尝试计算某些算法的复杂性,但我不知道如何使用向量来验证操作的复杂性。例如,push_back()的复杂性是什么?

在c ++参考中我找到了 “常数(摊销时间,重新分配可能发生)。 如果发生重新分配,重新分配本身在整个大小上都是线性的。“

这是什么意思?复杂度为O(n)的运算? (n是向量长度)。

谢谢。

1 个答案:

答案 0 :(得分:0)

矢量的复杂性是:

  • push_back:O(1)。
    摊销代表“四舍五入”,因为这种复杂性取决于可能的重新分配。

当vector的大小大于:

时,您需要重新分配
size_type capacity() const;
  

返回:向量可以容纳的元素总数   需要重新分配   注意:重新分配使所有内容无效   引用,指针和迭代器引用的元素   序列。保证在此期间不会重新分配   在调用reserve()之后发生的插入,直到发生时为止   插入会使向量的大小大于大小   在最近一次调用reserve()中指定。