C++:向量 push_back() 的时间复杂度 - 试图理解 C++ 入门第 5 版 - Stanley Lipmann
C++: Time complexity for vector push_back() - trying to understand the C++ Primer 5th Ed - Stanley Lipmann
我正在阅读 C++ Primer on vector push_back() 并试图理解以下语句。
Every implementation is required to follow a strategy that ensures that it is efficient
to use push_back to add elements to a vector. Technically speaking, the execution
time of creating an n-element vector by calling push_back n times on an initially
empty vector must never be more than a constant multiple of n
我已经阅读了很多这方面的数据结构,但就是不理解粗斜体的那个。不确定作者想说什么,尤其是“MULTIPLE”这个词。
举个例子,想知道如果 n=5 作者的意思是 5 的倍数(例如 5、10 或 15 等)吗?
感谢任何帮助。
作者说必须存在一个常量值 c
,这样向向量中插入 n
个元素的时间永远不会超过 c*n
。
例如,对于给定的元素类型,c
可能是每个项目一微秒。在这种情况下,将 100
项插入向量不会超过 100
微秒。
从技术上讲,这并不是您所拥有的保证。通常没有明显的方法可以在实际系统上精确定义这样的时间范围。而如果元素类型的构造函数中所需要的时间不是常量,也可能会影响这种时间保证。
相反,该标准仅保证对元素执行操作的次数。因此,例如,如果向量的元素类型是 class 类型,则每个元素 c
可能是 3
,这意味着插入 100
元素最多会调用构造函数元素类型300次。
这是一个渐近边界,而不是确定 n
的小值的实际执行时间。
此要求也称为 摊销常量 个人 push_back
的时间复杂度。
我正在阅读 C++ Primer on vector push_back() 并试图理解以下语句。
Every implementation is required to follow a strategy that ensures that it is efficient to use push_back to add elements to a vector. Technically speaking, the execution time of creating an n-element vector by calling push_back n times on an initially empty vector must never be more than a constant multiple of n
我已经阅读了很多这方面的数据结构,但就是不理解粗斜体的那个。不确定作者想说什么,尤其是“MULTIPLE”这个词。
举个例子,想知道如果 n=5 作者的意思是 5 的倍数(例如 5、10 或 15 等)吗?
感谢任何帮助。
作者说必须存在一个常量值 c
,这样向向量中插入 n
个元素的时间永远不会超过 c*n
。
例如,对于给定的元素类型,c
可能是每个项目一微秒。在这种情况下,将 100
项插入向量不会超过 100
微秒。
从技术上讲,这并不是您所拥有的保证。通常没有明显的方法可以在实际系统上精确定义这样的时间范围。而如果元素类型的构造函数中所需要的时间不是常量,也可能会影响这种时间保证。
相反,该标准仅保证对元素执行操作的次数。因此,例如,如果向量的元素类型是 class 类型,则每个元素 c
可能是 3
,这意味着插入 100
元素最多会调用构造函数元素类型300次。
这是一个渐近边界,而不是确定 n
的小值的实际执行时间。
此要求也称为 摊销常量 个人 push_back
的时间复杂度。