C++之queue(队列)

本文介绍了C++中的Queue(队列)数据结构,包括基本概念、常用接口如构造函数、赋值操作、数据存取以及大小操作。通过实例展示了如何创建和操作队列,如入队、出队、查看队头和队尾元素等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

queue

基本概念

Queue(队列)是一种先进先出的数据结构,他有两个出口

push - 入队 pop - 出队

front - 队头 back - 队尾

队列容器允许从一端新增元素,另一端移除元素

队列中只有队头和队尾可以被外界使用,因此队列不允许有遍历行为

常用接口

构造函数:
queue<T> que; //queue采用模板类实现,queue对象的默认构造形式
queue(const queue &que); //拷贝构造函数

赋值操作:
queue& operator=(const queue &que); //重载等号操作符

数据存取:
push(elem); //往队尾添加元素
pop(); //从队头移除第一个元素
back(); //返回最后一个元素
front(); //返回第一个元素

大小操作:
empty(); //判断堆栈是否为空
size(); //返回栈的大小

class player {
public:
    player(string name, int age) {
        this->name = name;
        this->age = age;
    }
    string name;
    int age;
};

void test01() {
    queue<player>q;//创建队列

    player p1("刘备", 38);
    player p2("诸葛亮", 36);
    player p3("张飞", 32);
    player p4("关羽", 34);

    //入队
    q.push(p1);
    q.push(p2);
    q.push(p3);
    q.push(p4);

    cout << "队列大小 : " << q.size() << endl;
    //队列不为空则查看队头和队尾,出队
    while (!q.empty()) 
    {
        cout << "查看队头  姓名:" << q.front().name << "  年纪:" << q.front().age << endl;
        cout << "查看队尾  姓名:" << q.back().name << "  年纪:" << q.back().age << endl;
        q.pop();//出队
    }
    cout << "队列大小 : " << q.size() << endl;

}
### C++ 中 `queue` 的基本用法 在 C++ 标准模板库(STL)中,`queue` 是一种容器适配器,提供了 FIFO(先进先出)的数据结构。为了使用 `queue`,需要包含头文件 `<queue>`。 #### 创建和初始化队列 可以创建不同类型的队列,例如整数队列或字符串队列: ```cpp #include <iostream> #include <queue> int main() { // 定义一个存储整型的队列 std::queue<int> q; // 向队列添加元素 q.push(1); q.push(2); q.push(3); // 输出队首元素并移除它 while (!q.empty()) { std::cout << "Front item is: " << q.front() << '\n'; q.pop(); } return 0; } ``` 上述代码展示了如何定义一个简单的整数队列,并向其中压入三个元素,之后逐个取出这些元素直到队列为空[^1]。 #### 队列的主要操作函数 - **push(element)**:将新元素加入到队尾。 - **pop()**:删除位于队首的元素;注意此方法不返回任何值。 - **front()**:访问队首元素而不将其弹出。 - **back()**:获取当前队尾处最后一个被插入的元素。 - **empty()**:如果队列为零则返回 true,否则 false。 - **size()**:返回队列中的元素数量。 下面是一个更复杂的例子,展示了一个自定义类对象作为队列成员的情况: ```cpp #include <iostream> #include <queue> #include <string> class Person { public: std::string name; int age; Person(std::string n, int a):name(n),age(a){} void displayInfo(){ std::cout<<"Name:"<<this->name<<", Age:"<<this->age<<"\n"; } }; int main() { std::queue<Person*> peopleQueue; // 添加一些Person实例到队列里 peopleQueue.push(new Person("Alice", 30)); peopleQueue.push(new Person("Bob", 25)); // 访问队首元素的信息 (*peopleQueue.front()).displayInfo(); // 移除队首元素 peopleQueue.pop(); // 继续处理下一个元素... if(!peopleQueue.empty()){ (*peopleQueue.front()).displayInfo(); peopleQueue.pop(); } // 清理内存防止泄漏 while (!peopleQueue.empty()){ delete peopleQueue.front(); peopleQueue.pop(); } return 0; } ``` 这段程序说明了怎样利用指针来管理动态分配的对象,并通过队列对其进行管理和释放资源的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值