【问题标题】:when one std::vector object is in stack and the other one is in heap, is the time complexity of the swap function of vector is O(1) or O(n)?当一个 std::vector 对象在堆栈中而另一个在堆中时,vector 的交换函数的时间复杂度是 O(1) 还是 O(n)?
【发布时间】:2016-10-21 02:52:45
【问题描述】:
【问题讨论】:
标签:
c++
vector
time-complexity
swap
【解决方案2】:
该参考还说:
另一个相同类型的向量容器(即,用
相同的模板参数,T 和 Alloc),其内容被交换
这个容器的。
如您所见,两个向量的分配器必须相同,这意味着实际数据分配在同一个地方,默认情况下在堆上。
如果您查看 cpprefence documentation(通常更准确),它会说:
如果
std::allocator_traits::propagate_on_container_swap::value
为真,则使用不合格的调用交换分配器
到非会员互换。否则,它们不会被交换(如果
get_allocator() != other.get_allocator(),行为未定义)。
所以你甚至可以用不同的分配器交换向量,如果它们是可交换的。无论如何,交换将是持续操作,因为数据不存储在向量对象本身中,而是存储在分配器创建和管理的内存中。