C++中队列遵循FIFO原则,标准库std::queue基于deque实现,提供push、pop、front等接口;也可用循环数组或链表自定义实现,前者适合固定大小高性能场景,后者支持动态扩容,推荐学习时理解原理,实际开发优先使用std::queue。

在C++中,队列(queue)是一种先进先出(FIFO)的数据结构。标准库提供了std::queue容器适配器,也可以手动实现一个队列。下面分别介绍C++中队列的使用方法和自定义实现方式。
std::queue 的使用方法
std::queue 是定义在 头文件中的容器适配器,默认基于 std::deque 实现,也可指定其他底层容器如 std::list。
常用操作接口:
push(element):在队尾插入元素pop():删除队头元素(不返回值)front():获取队头元素的引用back():获取队尾元素的引用empty():判断队列是否为空size():返回队列中元素个数
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include #includeint main() {std::queue q;
q.push(10);q.push(20);q.push(30);while (!q.empty()) { std::cout << "Front: " << q.front() << "n"; q.pop();}return 0;
}
自定义队列的实现(数组方式)
可以用循环数组实现一个简单的固定大小队列,适合理解队列原理。
基本思路:
使用数组存储数据维护 front 和 rear 指针通过取模实现循环利用空间
代码实现:
#include #define MAX_SIZE 100class Queue {private:int data[MAX_SIZE];int front, rear;int count;
public:Queue() : front(0), rear(0), count(0) {}
bool empty() const { return count == 0;}bool full() const { return count == MAX_SIZE;}void push(int value) { if (full()) { std::cerr << "Queue is full!n"; return; } data[rear] = value; rear = (rear + 1) % MAX_SIZE; count++;}void pop() { if (empty()) { std::cerr << "Queue is empty!n"; return; } front = (front + 1) % MAX_SIZE; count--;}int& frontElement() { if (empty()) { throw std::runtime_error("Queue is empty!"); } return data[front];}int size() const { return count;}
};
链表实现动态队列
使用链表可以实现无限扩容的队列(受限于内存),更灵活。
实现要点:
定义节点结构体维护头尾指针入队在尾部,出队在头部
代码示例:
#include #includestruct Node {int data;Node* next;Node(int val) : data(val), next(nullptr) {}};
class LinkedQueue {private:Node front;Node rear;
public:LinkedQueue() : front(nullptr), rear(nullptr) {}
~LinkedQueue() { while (front) { Node* temp = front; front = front->next; delete temp; }}void push(int value) { Node* newNode = new Node(value); if (!rear) { front = rear = newNode; } else { rear->next = newNode; rear = newNode; }}void pop() { if (!front) { std::cerr <next; if (!front) rear = nullptr; delete temp;}int& frontElement() { if (!front) { throw std::runtime_error("Queue is empty!"); } return front->data;}bool empty() const { return front == nullptr;}
};
选择与建议
实际开发中优先使用 std::queue,它经过优化且不易出错。学习或特殊场景下可尝试手动实现。数组实现适合固定大小、高性能要求的场合;链表实现更灵活,支持动态增长。
基本上就这些,掌握标准用法和基本原理就够用了。
以上就是c++++怎么实现一个队列queue_c++队列容器使用与实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481156.html
微信扫一扫
支付宝扫一扫