赞
踩
C++ 中,std::queue
容器是一种先进先出(First In First Out, FIFO)的数据结构,且有两个出口。
队列(queue)的结构如下:类似于生活中的排队买票,最先排队的人位于队伍最前端,后来的人依次从队伍末尾加入队伍。当队首的人买票成功后离开,原先位于第二位的人顶上成为新的队首,后续以此类推。
构造函数原型 | 解释 | |
---|---|---|
1 | queue<T> que | 默认构造 |
2 | queue(const queue &que) | 拷贝构造 |
函数原型:= | 解释 | |
---|---|---|
1 | queue& operator=(const queue &que) | 重载=操作符 |
函数原型:push、pop、back、front | 解释 | |
---|---|---|
1 | push(elem) | 向队尾添加元素 |
2 | emplace() | 向队尾添加元素 |
3 | pop() | 移除当前队首元素 |
4 | back() | 返回队尾元素 |
5 | front() | 返回队首元素 |
注意:
std::queue
不提供迭代器访问元素,只能通过 front()
和 back()
来访问队列的第一个和最后一个元素。std::queue
不支持随机访问,不能通过索引访问队列中的元素。std::queue
的底层容器可以在创建时指定,例如使用 std::list
作为底层容器:std::queue<int, std::list<int>> myQueue;
函数原型:empty、size、swap | 解释 | |
---|---|---|
1 | empty() | 判断队列是否为空 |
2 | size() | 返回队列的大小 |
3 | swap(queue<T> & que) | 将当前队列中元素和que中元素交换 |
注意: swap()
交换的两个队列中包含元素的类型必须相同。
示例:
#include <iostream> #include <string> #include <queue> //必须包含该头文件 using namespace std; class ObjNumber { public: string m_objName; int m_number; public: ObjNumber(string name, int num) { m_objName = name; m_number = num; } }; void test01() { queue<ObjNumber> s1; ObjNumber obj1("茶叶", 1); s1.push(obj1); //push必须填入实例化的对象 s1.emplace(obj1); //emplace既可以填入实例化的对象 s1.emplace("馒头", 2); //emplace也可以填入构造函数的参数 cout << "s1中元素数量为:" << s1.size() << endl; while (!s1.empty()) { cout << "队首元素:" << s1.front().m_objName << endl; s1.pop(); //弹出队首元素 } } int main() { test01(); system("pause"); return 0; }
//result
s1中元素数量为:3
队首元素:茶叶
队首元素:茶叶
队首元素:馒头
注意:优劣是相对的,取决于具体的使用场景和需求。
优势:
std::queue
提供了一组简单的接口函数,如 push()
、pop()
、front()
、empty()
等,使用起来非常方便。std::queue
基于底层容器实现,通常使用 std::deque
或 std::list
作为默认的容器。这些容器都提供了高效的插入和删除操作,使得 std::queue
在大多数情况下具有良好的性能。std::queue
的底层容器会自动管理内存,当元素被弹出队列后,相关的内存也会被释放,无需手动管理内存。std::queue
的特性是先进先出,插入和删除操作只能在队尾和队首进行,因此不会导致迭代器失效的问题。劣势:
std::queue
只提供了队列的基本功能,即在队尾插入元素、在队首删除元素。如果需要在任意位置插入或删除元素,就需要选择其他容器,如 std::list
或 std::vector
。std::queue
不支持直接遍历队列中的元素,也无法通过索引访问队列中的特定元素。如果需要对队列进行遍历或随机访问元素,需要使用其他容器或将队列转换为其他容器进行操作。总结:std::queue
是一个简单、高效的队列容器,适用于需要按照先进先出顺序处理元素的场景。它在插入和删除操作上具有良好的性能,且无需手动管理内存。然而,由于功能受限,如果需要在任意位置插入或删除元素,或需要遍历队列中的元素,就需要选择其他更适合的容器。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。