[英]How Is the time complexity of size function of stack constant if stack is implemented by linked list?
在任何时候,如果我们调用 size 函数,这意味着计算我们需要遍历整个链表的大小,即 O(n)。 我想了解标准模板库 c++ 大小函数.. 获得 O(1) 的唯一方法是跟踪推送和弹出操作? 它是如何在 C++ 标准库中完成的?
您不一定需要遍历列表来了解其大小。 只要您将 size 作为类的成员变量,并在列表的size()
发生变化时正确地递增/递减它,返回size()
就是一个 O(1) 操作。 size()
成员函数可以简单地实现为size_t size() const noexcept { return m_size; }
size_t size() const noexcept { return m_size; }
或类似的。
根据容器要求(C++ 17, 26.2.1 一般容器要求),如果容器具有成员函数大小,则其复杂度是恒定的。 标准容器std::list
具有成员函数大小。
标准容器适配器std::stack
的成员函数定义如下
size_type size() const { return c.size(); }
其中c
是带下划线的容器,例如std::list
。 所以它也有恒定的复杂性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.