【发布时间】:2021-07-23 18:35:37
【问题描述】:
我想知道如何以恒定时间 (O(1)) 将右值向量附加到另一个向量。
我知道使用std::insert 和std::move 的方法,但是有什么方法可以在O(1) 时间内将std::vector<T>&& 附加到std::vector<T>&。
【问题讨论】:
-
简答:没有。
-
标准要求 std::vector 在内存中是连续的。因此 append 必须一次向目标 std::vector 添加一个元素,并根据需要扩展它的后备存储。
-
好的,那么可以使用的数据结构列表是什么,
unordered_set、unordered_map等数据结构是否可以实现? -
@Vishnu: 不。你正在寻找一个链表,它几乎是唯一具有 O(1) 插入时间的数据结构(你必须使用
splice来获得std::list这个)。 -
请记住,虽然插入是使用链表的廉价操作,但您现在所做的几乎所有其他操作都更多昂贵。贵多少以及增加的费用是否超过更便宜的插入的收益取决于使用模式。