为什么 std::vector::p ush_front() 不存在?
Why doesn't std::vector::push_front() exist?
既然
std::vector::push_back()
存在,为什么std::vector::push_front()
不存在?
我知道还有其他存储对象的工作方式几乎相同,并且同时实现了push_back()
和push_front()
函数,但我很好奇std::vector
没有实现的原因。
您永远都不想在向量上push_front。将一个元素添加到前面意味着将向量中的每一个其他元素向后移动一个元素:O(n(复制。糟糕的表现。
这其中有一个重要原因:std::vector<>是一个连续的单端数组容器。它分配内存,并在分配区域的开头开始写入元素。它通常分配的内存超过了存储所有当前元素所需的内存,因此当您调用push_back((时,它会在末尾写入新元素,并递增其元素计数。它既快捷又高效。
另一方面,Push_front((需要以某种方式将新元素写在所有当前元素之前的[0]位置——然而,这并不是微不足道的,因为您的数组位置[0]已经被占用了。Push_front((将导致整个数组被重新复制,以便可以修改其前面。对于std::vector<>来说,这将是一种低效的操作类不是经过设计的。
当然,你仍然可以打电话给
std::vector::insert(begin(), 1, val)
但它会导致整个数组被复制,只是为了添加一个元素。
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- g++ 说函数不存在,即使包含正确的标头
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 查找第一个数组中不存在的元素
- 查找不存在的键时,unordered_map返回什么
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- set::find 查找不存在的元素
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- inet_ntop返回不存在的地址
- CPP 使用不存在的键访问映射
- 为什么QMediaGaplessPlaybackControl不存在?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 标记未定义的颜色,并且颜色匹配系统中不存在样品
- 为什么minhook库目录不存在
- 为什么 std::vector::p ush_front() 不存在?
- 不存在从"Magick::Color"到"MagickCore::Quantum"的合适转换功能
- 为什么 MDI 子窗口在WM_NCCREATE后不存在?
- C++,QT. QShortcut的函数调用不存在