Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标准:列表c++;是连续的,那么插入和擦除操作在序列中的任何位置都需要恒定的时间 在C++引用中,我读到“列表是序列容器,允许在序列内的任意位置插入和擦除操作,并在两个方向上进行迭代。” 我的疑问是,如果它是连续的,那么删除和插入一个节点怎么可能需要固定的时间。我们必须按顺序遍历才能到达该节点。删除节点取决于它的位置_C++_Std - Fatal编程技术网

标准:列表c++;是连续的,那么插入和擦除操作在序列中的任何位置都需要恒定的时间 在C++引用中,我读到“列表是序列容器,允许在序列内的任意位置插入和擦除操作,并在两个方向上进行迭代。” 我的疑问是,如果它是连续的,那么删除和插入一个节点怎么可能需要固定的时间。我们必须按顺序遍历才能到达该节点。删除节点取决于它的位置

标准:列表c++;是连续的,那么插入和擦除操作在序列中的任何位置都需要恒定的时间 在C++引用中,我读到“列表是序列容器,允许在序列内的任意位置插入和擦除操作,并在两个方向上进行迭代。” 我的疑问是,如果它是连续的,那么删除和插入一个节点怎么可能需要固定的时间。我们必须按顺序遍历才能到达该节点。删除节点取决于它的位置,c++,std,C++,Std,O(1)参考插入/删除节点的复杂性,前提是您已经拥有该节点的句柄(以迭代器的形式)。获得列表第i个元素的迭代器(给定第一个元素的迭代器)是O(N) 在判断std::list与std::vector的相对优点时,这一点常常被忽略。但请注意,插入和擦除元素都返回迭代器,可用于进一步的插入/擦除操作。在给定节点之前插入(我们称之为pos),或作为最后一个节点,或删除给定节点是一个固定时间操作 std::list可以实现为双链接列表。序列容器不应与连续内存需求混淆。因为列表未排序。如果仔细观察,将元素放

O(1)参考插入/删除节点的复杂性,前提是您已经拥有该节点的句柄(以迭代器的形式)。获得列表第i个元素的迭代器(给定第一个元素的迭代器)是O(N)


在判断
std::list
std::vector
的相对优点时,这一点常常被忽略。但请注意,插入和擦除元素都返回迭代器,可用于进一步的插入/擦除操作。

在给定节点之前插入(我们称之为
pos
),或作为最后一个节点,或删除给定节点是一个固定时间操作


std::list
可以实现为双链接列表。序列容器不应与连续内存需求混淆。

因为列表未排序。如果仔细观察,将元素放入列表的实际函数是
list::insert(提示,元素)
()。即,对于每次插入,添加元素的位置是已知的,因此时间是恒定的


例如,
list::push_front(element)
insert(begin(),element)

[这主要是一个注释,但不适合放在页边空白处]

请注意,
std::list
不能作为单个链表来实现,以满足复杂性要求:

  • 即使您已经有了单链表节点的句柄,也不能以固定时间在其前面插入(或删除)(因为您需要访问上一个节点)

这就是为什么
std::forward_list
只提供
insert_after
erase_after

如果您有特定节点的迭代器,插入/删除需要固定的时间。但是,如果没有特定的迭代器,则必须迭代到该位置,这不是固定时间。只需使用基本的
insert()
emplace()
erase()
函数将迭代器返回到插入或删除的位置即可。但是,
pushFront()
popFront()
pushBack()
,和
popBack()
都返回void。因此,希望为给定元素启用恒定时间删除的用户不得使用
pushXXXX()
将该元素添加到列表中。