容器库(15)-std::queue

std::queue是一种容器适配器,它通过包装顺序容器来实现队列(先进先出)的数据结构。

template<
    class T,
    class Container = std::deque<T>
> class queue;

本文章的代码库:

https://gitee.com/gamestorm577/CppStd

成员函数

构造、析构和赋值

构造函数

可以构造一个空的queue,也可以用对应的容器或者另一个queue来构造一个queue。代码示例:

std::vector<int> tmp{1, 2, 3};

std::queue<int, std::vector<int>> q1;
std::queue<int, std::vector<int>> q2(tmp);
std::queue<int, std::vector<int>> q3(q2);

std::cout << "q1 size = " << q1.size() << std::endl;
std::cout << "q2 size = " << q2.size() << std::endl;
std::cout << "q3 size = " << q3.size() << std::endl;

输出结果:

q1 size = 0
q2 size = 3
q3 size = 3

析构函数

销毁queue时,会调用各元素的析构函数。代码示例:

struct MyStruct
{
    MyStruct(int i)
        : Num(i)
    {
    }

    ~MyStruct()
    {
        std::cout << "~MyStruct: " << Num << std::endl;
    }

    int Num = 0;
};

std::vector<MyStruct> tmp{1, 2, 3};
std::queue<MyStruct, std::vector<MyStruct>> q(std::move(tmp));
std::cout << "end\n";

输出结果:

~MyStruct: 3
~MyStruct: 2
~MyStruct: 1
end
~MyStruct: 1
~MyStruct: 2
~MyStruct: 3

赋值函数

可以用另一个queue给queue赋值。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q1(tmp);
std::queue<int, std::vector<int>> q2;

q2 = q1;
std::cout << "q2 size = " << q2.size() << std::endl;

输出结果:

q2 size = 3

元素访问

front

返回第一个元素的引用。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q(tmp);

std::cout << "q front is: " << q.front() << std::endl;
q.front() += 10;
std::cout << "q front is: " << q.front() << std::endl;

输出结果:

q front is: 1
q front is: 11

back

返回最后一个元素的引用。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q(tmp);

std::cout << "q back is: " << q.back() << std::endl;
q.back() += 10;
std::cout << "q back is: " << q.back() << std::endl;

输出结果:

q back is: 3
q back is: 13

容量

empty

检查queue是否为空。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q1(tmp);
std::queue<int, std::vector<int>> q2;
std::cout << std::boolalpha;
std::cout << "q1 empty: " << q1.empty() << std::endl;
std::cout << "q2 empty: " << q2.empty() << std::endl;

输出结果:

q1 empty: false
q2 empty: true

size

返回queue中元素的个数。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q1(tmp);
std::queue<int, std::vector<int>> q2;
std::cout << "q1 size: " << q1.size() << std::endl;
std::cout << "q2 size: " << q2.size() << std::endl;

输出结果:

q1 size: 3
q2 size: 0

修改器

push

向队列尾部插入元素。代码示例:

std::queue<int, std::vector<int>> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
std::cout << "q front: " << q.front() << std::endl;
std::cout << "q back: " << q.back() << std::endl;

输出结果:

q front: 1
q back: 4

emplace

向队列尾部构造一个元素。代码示例:

struct MyStruct
{
    MyStruct(int i)
    {
        std::cout << "MyStruct: " << i << std::endl;
    }
};

std::queue<MyStruct> q;
q.emplace(1);
q.emplace(2);
q.emplace(3);

输出结果:

MyStruct: 1
MyStruct: 2
MyStruct: 3

pop

移除队列的首个元素。代码示例:

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);

while (!q.empty())
{
    std::cout << "num: " << q.front() << std::endl;
    q.pop();
}

输出结果:

num: 1
num: 2
num: 3
num: 4

swap

和另一个queue交换元素内容。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q1;
std::queue<int, std::vector<int>> q2(tmp);

q1.swap(q2);
std::cout << "q1 size: " << q1.size() << std::endl;
std::cout << "q2 size: " << q2.size() << std::endl;

输出结果:

q1 size: 3
q2 size: 0

非成员函数

比较运算符

比较两个queue是否相等。代码示例:

std::vector<int> tmp1{1, 2, 3};
std::vector<int> tmp2{3, 2, 1};
std::queue<int, std::vector<int>> q1(tmp1);
std::queue<int, std::vector<int>> q2(tmp2);

std::cout << std::boolalpha;
std::cout << "q1 == q2: " << (q1 == q2) << std::endl;
std::cout << "q1 != q2: " << (q1 != q2) << std::endl;
std::cout << "q1 <  q2: " << (q1 < q2) << std::endl;
std::cout << "q1 <= q2: " << (q1 <= q2) << std::endl;
std::cout << "q1 >  q2: " << (q1 > q2) << std::endl;
std::cout << "q1 >= q2: " << (q1 >= q2) << std::endl;

输出结果:

q1 == q2: false
q1 != q2: true
q1 <  q2: true
q1 <= q2: true
q1 >  q2: false
q1 >= q2: false

swap

交换两个queue的元素内容。代码示例:

std::vector<int> tmp{1, 2, 3};
std::queue<int, std::vector<int>> q1;
std::queue<int, std::vector<int>> q2(tmp);

std::swap(q1, q2);
std::cout << "q1 size: " << q1.size() << std::endl;
std::cout << "q2 size: " << q2.size() << std::endl;

输出结果:

q1 size: 3
q2 size: 0

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值