目录
- queue实现
- vector实现
我们可以用queue或vector实现定长队列,但是如果我们有遍历定长队列的需求的话,使用queue不是一个好的选择,因为queue本身不支持。
C++中的queue标准库提供了一个简单易用的队列容器,可以用来实现定长队列。下面是一段示例代码:
#include
#include using namespace std;int main()
{queue q;int maxlen = 5; // 队列最大长度for(int i = 1; i <= 10; i++){if(q.size() == maxlen){q.pop();}q.push(i);cout << "队列元素:";while(!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;}return 0;
}
上述代码中,我们定义了一个queue容器,然后通过循环向队列中添加元素。当队列长度达到最大长度时,就要删除队首元素以保持队列长度不变。最后,我们遍历队列输出所有元素。
这里也是用模板泛化一下
#include
#include using namespace std;template
class FixedQueue {
private:vector q;size_t size;
public:FixedQueue(size_t s) : size(s) {q.reserve(size);}void push(const T& t) {if (q.size() >= size) {q.erase(q.begin());}q.push_back(t);}T pop() {T t = q.front();q.erase(q.begin());return t;}T& front() {return q.front();}T& back() {return q.back();}bool empty() const {return q.empty();}size_t getSize() const {return q.size();}void clear() {q.clear();}
};int main() {FixedQueue fq(5);fq.push(1);fq.push(2);fq.push(3);fq.push(4);fq.push(5);fq.push(6);fq.push(7);cout << fq.front() << endl;cout << fq.back() << endl;fq.pop();cout << fq.front() << endl;cout << fq.back() << endl;cout << fq.empty() << endl;cout << fq.getSize() << endl;fq.clear();cout << fq.empty() << endl;cout << fq.getSize() << endl;return 0;
}