代码之家  ›  专栏  ›  技术社区  ›  souki

为什么STD::vector::PuxFrxFor()存在?[复制品]

  •  5
  • souki  · 技术社区  · 6 年前

    这个问题已经有了答案:

    自从 std::vector::push_back() 存在,为什么不 std::vector::push_front() 也存在吗?

    我知道还有其他存储对象的工作方式几乎相同,并且实现了这两种存储对象 push_back() push_front() 但是我很好奇为什么 std::vector 不。

    2 回复  |  直到 6 年前
        1
  •  9
  •   72DFBF5B A0DF5BE9    6 年前

    你永远不想在一个向量上向前推。将一个元素添加到前面意味着将向量中的每个其他元素向后移动一个元素:o(n)复制。糟糕的表现。

        2
  •  1
  •   PlinyTheElder    6 年前

    有一个重要的原因:STD::vector & lt & gt;是一个连续的单端数组容器。它分配内存,并在分配的区域开始写入元素。它通常会分配比存储所有当前元素所需的内存更多的内存,因此当您调用push_back()时,它会在末尾写入新元素并增加其元素计数。它快速高效。

    另一方面,push_front()需要以某种方式在所有当前元素之前在位置[0]写入新元素,但是这并不容易,因为您的数组位置[0]已经被占用了。push_front()将导致整个数组重新复制,以便可以修改其前面。这是一个低效的操作,STD::向量& lt & gt类未被设计。

    当然,你还是可以打电话来

    std::vector::insert(begin(), 1, val)
    

    但它会导致整个数组被复制,只是为了添加一个元素。