由于std::vector::push_back()
存在,为什么std::vector::push_front()
也不存在?
我知道还有其他一些存储对象,它们的工作方式几乎相同,并且同时实现了push_back()
和push_front()
函数,但是我很好奇std::vector
不能这样做的原因
答案 0 :(得分:9)
您永远不想在矢量上使用push_front。将元素添加到最前面意味着将向量中的每个其他元素向后移动一个元素:O(n)复制。糟糕的表现。
答案 1 :(得分:1)
有一个重要原因:std :: vector <>是一个连续的单端数组容器。它分配内存并在分配的区域的开头开始写入元素。它通常分配的内存超出了存储所有当前元素所需的内存,因此,当您调用push_back()时,它将在末尾写入新元素并增加其元素计数。快速高效。
另一方面,Push_front()要求以某种方式在所有当前元素之前,在位置[0]处写入新元素-但是,这并不是不重要的,因为数组位置[0]已被占用。 Push_front()会导致整个数组被重新复制,因此可以修改其前部。没有为其设计std :: vector <>类的操作效率低下。
您当然仍然可以通过致电
std::vector::insert(begin(), 1, val)
但这会导致整个数组被复制,只是添加一个元素。