【C++ STL】vector 中为什么没有push_front?

查资料说vector容器中不适合放push_front和pop_back,为什么呢?因为这样速度太慢?错了,是pop_front。那为什么太慢呢?... 查资料说vector容器中不适合放push_front和pop_back,为什么呢?因为这样速度太慢?
错了,是pop_front。那为什么太慢呢?
展开
 我来答
hujkyd
2009-09-20 · TA获得超过103个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:162万
展开全部
首先,你得要先明白,vector是开辟一块空间来作为数组来存放元素(随机迭代器),如果有了pop_front,pop_back这个功能则很容易造成内存碎片,pop_front会造成头部内存产生碎片,pop_back朝臣尾部内存产生碎片,所以不能像deque(双向迭代器)那样有pop_front, pop_back这样的完全相同的实现.其次才是性能上的问题,vector实现pop_front的功能可以这样:
vector<int> vi;
vi.push_back(1);
vi.push_back(2);
vi.push_back(3);
vi.erase(vi.begin());//等同于push_front
但是,这样实现的实质是,重新开辟内存放置元素后释放原先的内存,这样做的原因是放置内存碎片,在程序中,如果产生内存碎片则意味着这是内存泄露,是十分危险的一件事情,所以不能在stl中出现
iJeeker
2009-09-20 · TA获得超过588个赞
知道小有建树答主
回答量:505
采纳率:0%
帮助的人:516万
展开全部
是的,速度慢,C++不允许

还有链表和栈等容器,这些有的就可以push_front和pop_back,需要这些操作时就用这些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vbtraz
2009-09-20 · TA获得超过5532个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4440万
展开全部
是的。 stl容器的一个原则就是只自带最有效的方法。 如果你需要从头插入, 那么应该考虑换个别的容器。 如果非要用这个容器那你就自己写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BlueWanderer
2009-09-20 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:2006万
展开全部
因为从头插入或者删除的话需要移动后面所有的数据,所以会慢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式