Qt 中的 Stack 和 STL 中的 Stack
Posted 张三和李四的家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 中的 Stack 和 STL 中的 Stack相关的知识,希望对你有一定的参考价值。
令人吃惊的是,QStack 是通过继承 QVector 来实现的。
The QStack class is a template class that provides a stack.
QStack inherits from QVector. All of QVector’s functionality also applies to QStack.
template<class T>
class QStack : public QVector<T>
public:
inline QStack()
inline ~QStack()
inline void swap(QStack<T> &other) QVector<T>::swap(other); // prevent QVector<->QStack swaps
inline void push(const T &t) QVector<T>::append(t);
T pop();
T &top();
const T &top() const;
;
template<class T>
inline T QStack<T>::pop()
Q_ASSERT(!this->isEmpty()); T t = this->data()[this->size() -1];
this->resize(this->size()-1); return t;
还行吧,pop
只会将容器越来越小。不会造成vector
中元素的大量移动。
而,SLT 中的 stack 是通过has-a
的方式,将 deque 作为一个成员变量,然后使用的。
//GCC2.95
template <class _Tp, class _Sequence = deque<_Tp> >//也可以使用其它容器作为 _Sequence 的参数,如果该容器可以实现 stack 中的成员函数,比如 List 或 vector
class stack
public:
typedef typename _Sequence::value_type value_type;
typedef typename _Sequence::size_type size_type;
typedef _Sequence container_type;
typedef typename _Sequence::reference reference;
typedef typename _Sequence::const_reference const_reference;
protected:
_Sequence _M_c;
public:
bool empty() const return _M_c.empty();
size_type size() const return _M_c.size();
reference top() return _M_c.back();
const_reference top() const return _M_c.back();
void push(const value_type& __x) _M_c.push_back(__x); //在尾部添加一个元素
void pop() _M_c.pop_back(); //在尾部删除一个元素
;
有什么优劣呢?
欢迎评论留言(#^.^#)
而且,Qt 中的 queue
也和 STL 中的不同。
template <class T>
class QQueue : public QList<T>
public:
inline QQueue()
inline ~QQueue()
inline void swap(QQueue<T> &other) QList<T>::swap(other); // prevent QList<->QQueue swaps
inline void enqueue(const T &t) QList<T>::append(t);
inline T dequeue() return QList<T>::takeFirst();
inline T &head() return QList<T>::first();
inline const T &head() const return QList<T>::first();
;
The QQueue class is a generic container that provides a queue.
QQueue inherits from QList. All of QList’s functionality also applies to QQueue.
template <class T, class _Sequence = deque<T> >//也可以使用其它容器作为 _Sequence 的参数,如果该容器可以实现 queue 中的成员函数。 ,比如 List
class queue
public:
typedef typename _Sequence::value_type value_type;
typedef typename _Sequence::size_type size_type;
typedef _Sequence container_type;
typedef typename _Sequence::reference reference;
typedef typename _Sequence::const_reference const_reference;
protected:
_Sequence c;
public:
bool empty() const return c.empty();
size_type size() const return c.size();
reference front() return c.front();
const_reference front() const return c.front();
reference back() return c.back();
const_reference back() const return c.back();
void push(const value_type& __x) c.push_back(__x); //在尾部添加一个数据
void pop() c.pop_front(); //在头部删除一个元素
;
是不是 Qt 中没有对 deque 的实现呢?
以上是关于Qt 中的 Stack 和 STL 中的 Stack的主要内容,如果未能解决你的问题,请参考以下文章
小白学习C++ 教程二十二C++ 中的STL容器stackqueue和map
小白学习C++ 教程二十二C++ 中的STL容器stackqueue和map