为什么vector没有pop_front()函数?

lsner2 2013-07-30 05:38:09
deque/list都有这个函数!
...全文
962 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwenjun 2013-08-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
    vector<int> A = { 1, 2, 3, 4, 5, 6, 7, 8};

    vector<int> B = { -2, -1, 0};

    A.insert(A.begin(), B.begin(), B.end());

    for (auto it = A.begin(); it != A.end(); ++it)
        cout << *it << "  ";
    return 0;
}
// 没转过弯,其实这样就好了
hongwenjun 2013-08-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
    vector<int> A = { 1, 2, 3, 4, 5, 6, 7, 8};

    vector<int> B = { -2, -1, 0};

    B.insert(B.end(), A.begin(), A.end());

    swap(A, B);
    B.clear();

    for (auto it = A.begin(); it != A.end(); ++it)
        cout << *it << "  ";
    return 0;
}
hongwenjun 2013-08-14
  • 打赏
  • 举报
回复
vector 容器 A{100个元素} // 想要在前面插入可以这样做 vector 临时容器 B{N个元素}; // 建立一个临时容器,需要前插的 N个元素 B = B+A; 把两个集合到一起;然后交换 A 和 B 容器; 删除 B 容器,这样就可以 实现 pop_front 的功能了; vector 为什么 没 pop_front ,如果你有 经常 pop_front 的需求,哪就优先选用 deque/list 了
zybjtu 2013-08-10
  • 打赏
  • 举报
回复
引用 13 楼 whdugh 的回复:
[quote=引用 2 楼 zyaiwx 的回复:] vector类似于数组,而list与deque类似于链表。 数组自然不会有pop_front(),vector作用就是随机存取,删除操作并不是它的长处,所以没有那个函数。 list与deque既然是基于链表实现的,pop_front的复杂度为O(1). 主要还是因为这几种容器的应用场景不同导致的。
为何vector支持insert操作,那样效率也很低吧。[/quote] vector的优势就在于随机存取,时间复杂度为O(1)。insert可以实现,但是时间复杂度为O(n).支持insert操作,很正常。只是具体运用的时候看场景
whdugh 2013-08-09
  • 打赏
  • 举报
回复
引用 2 楼 zyaiwx 的回复:
vector类似于数组,而list与deque类似于链表。 数组自然不会有pop_front(),vector作用就是随机存取,删除操作并不是它的长处,所以没有那个函数。 list与deque既然是基于链表实现的,pop_front的复杂度为O(1). 主要还是因为这几种容器的应用场景不同导致的。
为何vector支持insert操作,那样效率也很低吧。
赵4老师 2013-07-31
  • 打赏
  • 举报
回复
为什么书架没有弹出最上面一本书功能?
buyong 2013-07-31
  • 打赏
  • 举报
回复
if vector has pop_front and push_front, then what's the difference between vector and deque?
请叫我杨二哥 2013-07-31
  • 打赏
  • 举报
回复
这个我觉得可以从vector的实现上来看 1 实现形式:vector的内部是数组的形式,虽然pop_front不会影响其效率,但是对其处理时一个困难 2 内存管理:对于其管理内存来说还是比较困难的。就好像你申请了一个数组,你可以输出第一个成员,但是你pop第一个成员你怎么进行处理,处理了之后你怎么处理你的内存??貌似vector的内存都是动态申请的!你怎么释放内存呢? 3 实现理念:vector模拟的是栈的功能,你觉得栈能从前面出来吗?栈都是先进后出,后入先出的!实现一个那个函数可以很简单,却打破了他的初始理念。 所以你懂得!
nextseconds 2013-07-31
  • 打赏
  • 举报
回复
这就是数组与链表的区别,一个适合随机存取,一个是链表,插入删除操作效率很高,,但是对于数组的随机存储来说,频繁的插入删除操作,需要移动空间,效率远远不如链表。
mujiok2003 2013-07-31
  • 打赏
  • 举报
回复
Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to relocate all the elements after the segment erased to their new positions. This is generally an inefficient operation compared to the one performed for the same operation by other kinds of sequence containers (such as list or forward_list).
mujiok2003 2013-07-31
  • 打赏
  • 举报
回复
引用 6 楼 mujiok2003 的回复:
这就是vector不能取代list/deque的原因.stl中容器各有所长,也必有其缩短。
缩短-->所短。
mujiok2003 2013-07-31
  • 打赏
  • 举报
回复
这就是vector不能取代list/deque的原因.stl中容器各有所长,也必有其缩短。
nbabn 2013-07-31
  • 打赏
  • 举报
回复
容器这东西,总感觉有点深奥,如果不是特别明白原理和实现,不能和自己的实际需求很好的结合起来,随便拿一个就来用,还是不要用的好。
qzf362269994 2013-07-31
  • 打赏
  • 举报
回复
deque/list的push_front使用堆来操作的,用的是指针,插入方便,效率高 vector用下标访问即可,在频繁的插入和删除 效率比较低
zhctj159 2013-07-31
  • 打赏
  • 举报
回复
删除操作只需要移动一下vector的_Last指针吧或者使用erase函数
zybjtu 2013-07-30
  • 打赏
  • 举报
回复
vector类似于数组,而list与deque类似于链表。 数组自然不会有pop_front(),vector作用就是随机存取,删除操作并不是它的长处,所以没有那个函数。 list与deque既然是基于链表实现的,pop_front的复杂度为O(1). 主要还是因为这几种容器的应用场景不同导致的。
starytx 2013-07-30
  • 打赏
  • 举报
回复
应该是鉴于效率问题吧。不同的容器各有各的特点和优势,不能说这个有这个函数那个也得有。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧