转自:http://hi.baidu.com/nicker2010/item/a53293f1810ee8cea935a2eb
本文介绍STL Queue.
Queue(也称FIFO,即先进先出)的声明如下:
template<typename _Tp, typename _Sequence = deque<_Tp> >
class queue;
第一个template代表元素类型
第二个template代表stack内部存放元素所用的实际容器,缺省用deque
实际上,Queue只是很单纯的把各项操作转换为内部容器的对应调用。下面是部分源代码:
protected:
_Sequence c; ////实际容器
public:
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front()
{
__glibcxx_requires_nonempty();
return c.front();
}
const_reference front() const
{
__glibcxx_requires_nonempty();
return c.front();
}
reference back()
{
__glibcxx_requires_nonempty();
return c.back();
}
const_reference back() const
{
__glibcxx_requires_nonempty();
return c.back();
}
void push(const value_type& __x)
{ c.push_back(__x); }
void pop()
{
__glibcxx_requires_nonempty();
c.pop_front();
}
我们可以使用任何序列式容器来支持stack,
只要他们支持front(),back(),push_back(),pop_front()等动作就行。
如以list支持queue:
std::queue<string,list<string> > stringQueue;
核心接口:
1.push()
2.front()
3.back()
4.pop()
5.size()
6.empty()
7.comparision(const queue& q1,const queue& q2) ///两个同型queue的比较,
comparision可以是:==,!=,<,>,<=,>=
(如果两个queue的size()相等并且对应元素也相等则它们相等;
比较基于字典序,参考lexicographical_compare())
简单的应用:
void testSTLQueue()
{
queue<string> stringQueue;
stringQueue.push("These ");
stringQueue.push("are ");
stringQueue.push("more ");
cout<<stringQueue.front();
stringQueue.pop();
cout<<stringQueue.front();
stringQueue.pop();
stringQueue.push("four ");
stringQueue.push("words!");
stringQueue.pop();
cout<<stringQueue.front();
stringQueue.pop();
cout<<stringQueue.front();
stringQueue.pop();
cout<<"\nNumber of elements in Queue: "<<stringQueue.size()<<endl;
}

本文深入介绍了STL中的Queue容器,包括其内部实现原理、核心接口及简单应用实例。Queue是一种先进先出的数据结构,可以通过模板指定元素类型和底层容器。

212

被折叠的 条评论
为什么被折叠?



