关于容器,我们说了最为重要的两个,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++的编程教室
):第七十二讲 队列(1)
|