std::list::p ush_back() 的运行时复杂性
run time complexity of std::list::push_back()
以下代码的运行时复杂度是多少
std::list<int> a;
a.push_back(1); //initialize
a.push_back(2);
a.push_back(3);
std::list<int>::iterator i = a.begin();
std::cout<<*(++i); // displays 2
std::cout<<*(++i); // displays 3
我正在编写一个目前正在进行数据挖掘的程序,我需要注意它的时间性能。我只是有一个疑问(我以前没有,因为我不关心我早期程序中的时间复杂度,因为它们是直截了当的)。因此,在更安全的一面,我想询问将元素添加到列表 a 的实际时间复杂度。上面表现得像数组的指针"i"诱使我怀疑它是否真的是一个数组或一个重载 ++ 和 * 运算符的对象。
如果"i"是一个数组,那么 std::list::p ush_back() 的时间复杂度应该是 O(n),这在我的情况下是不需要的。但是,如果不是,您能否解释运算符 * 和 ++ 继承的算法,以便可以确定它们的时间复杂度?是否建议为我的情况使用列表?(如果 'i' 不是数组,那么可以安全地假设 std::list::p ush_back() 的时间复杂度为 O(1) )
很抱歉我以前的问题版本不是那么可读
因此,应该有一个指针数组,每个指针都指向链表中的每个节点。每次我们调用 push_back() 成员函数时,都应该清除并重新分配指针数组;你不这么认为吗?
不,我不这么认为。标准中没有任何地方提到这样的数组,在列表容器中有这样的数组会很奇怪。
作为旁注:如果这样的数组存在,增长它将是 O(n),而不是 O(n^2)。如果插入的大小在填满时乘以,例如std::vector
会怎么做,这可能会使插入摊销 O(1)。
std::list 通常是一个双向链表实现,而不是数组实现。换句话说,std::list 是双链表的更高层次的抽象。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 我在c++代码中生成了一个运行时#3异常
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 建议在运行时将带有类实例的列表从c++导入qml
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 读取文件时运行时的未知行为
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 提高插入排序的运行时复杂性
- 此代码的运行时复杂性是多少
- 使得运行时复杂性更短(c++)
- std::list::p ush_back() 的运行时复杂性