微信号:gh_5f9337df4e69

介绍:讨论和学习C/C++的编程知识

第七十二讲 队列(1)

2014-05-09 21:57 零灵柒


关于容器,我们说了最为重要的两个,vector和list,现在STL里面剩下的也不多了,现在只剩下一个叫做队列的东西,不过队列的东西有三个:deque,stack,queue,当然还有一个priority_queue。
今天我们主要说的是deque,其实关于deque,我们实在没啥好说的,因为如果我们要再来演示一遍,那么等于又重复了我们vector和list一遍。
deque是一种双端列队,他是一门优化过的序列,他不但拥有vector的操作,还拥有list的前端操作,但是对于其他地方的插入和删除和vector一样效率低得吓人,现在我们已经知道deque的样貌,而且他所拥有的方法我们已经都见识过,所以,现在学习他唯一的办法就是来看一个实例。

-------------------------------

template<typename T>

void show(deque<T>& ml){

deque<T>::iterator it = ml.begin();

while (it != ml.end())

cout << *it++ << " ";

cout << endl;

}

int main(){


int a[] = { 2, 3, 6, 1, 4, 3, 6, 6, 4, 3, 2, 7, 9, 2 };

deque<int> mDeque;

for (int i = 0; i < 7; i++)

mDeque.push_back(a[i]);

show(mDeque);

for (int i = 0; i < 7; i++)

mDeque.push_front(a[7 + i]);

show(mDeque);

return 0;

}

----------------------------

运行程序得到结果如下:

--------------------------

2 1 6 3 4 3 6

2 9 7 2 3 4 6 2 1 6 3 4 3 6

---------------------------

好吧,大家可能会问,为什么deque这么好用,为什么还要用vector呢?当然还是因为效率问题,deque是优化过的容器,所以在效率上面还是赶不上vector,尤其是使用前端操作的时候,效率更会大打折扣,而当他们需要插入或者是删除元素的时候,我们的选择当然会是list,对于很大的数据来说,插入或者删除中间的数据要比把这个容器复制给list,然后再来删除或者插入,当然这些东西还得视情况而定。

OK,今天就这样吧,我们下周再见。


================================

回复D直接查看目录

 
C/C++的编程教室 更多文章 写在开篇 第一讲 Hello World 第二讲 printf()(1) 第三讲 printf()(2) 第四讲 scanf()
猜您喜欢 领英经典|如何在职场上闪光 怎样让引导不再是无用小透明 - 腾讯ISUX PHP Web 安全 Android测试工具系列(三)| Android代码检查之Sonar工具介绍 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA(有彩蛋)