C++ 容器 queue

定义于头文件 <queue>

template<

    class T,
    class Container = std::deque<T>

> class queue;

std::queue 类是容器适配器,它给予程序员队列的功能——尤其是 FIFO (先进先出)数据结构。

类模板表现为底层容器的包装器——只提供特定的函数集合。 queue 在底层容器尾端推入元素,从首端弹出元素。

模板形参

T

-

存储的元素类型。若 T 与 Container::value_type 不是同一类型则行为未定义。 (C++17 起)

Container

-

用于存储元素的底层容器。容器必须满足序列容器 (SequenceContainer) 的要求。另外,它必须提供带通常语义的下列函数:

  • back()
  • front()
  • push_back()
  • pop_front()

标准容器 std::dequestd::list 满足这些要求。

queue是一种先进先出的数据结构,它只允许从一端插入元素,从另一端弹出元素,这两个过程被称为入队和出队,就像我们到火车站卖票窗口买票一样,只能排在队伍后面,队伍最前面的人买了从队伍最前面离开,新来买票的只能排在队伍最后面直到前面的人都离开了队伍才能轮到他。所以queue容器总结有以下特征:

(1)queue容器只允许从一端新增元素,从另外一端移除元素。

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

(3)队列中进数据叫入队push()。

(4)队列中出数据叫出队pop()。

(5)判断队列是否为空empty()。

简单举例:

#include <iostream>

#include <queue>

#include <algorithm>

using namespace std;

class Person

{

public:

      Person(const string &nam,int ag);

      string name;

      int age;

};

Person::Person(const string &nam,int ag)

{

      this->name = nam;

      this->age = ag;

}

void test01(void)

{

      queue<Person> q;

      Person p1("唐僧",30);

      Person p2("八戒",50);

      Person p3("沙僧",40);

      Person p4("悟空",60);

      q.push(p1);

      q.push(p2);

      q.push(p3);

      q.push(p4);

      cout << "q queue size:" << q.size()<<endl;

      queue <Person> q2(q);

      cout << "q2 queue size:" << q2.size()<<endl;

      queue <Person> q3 = q;

      cout << "q3 queue size:" << q3.size()<<endl;

     

      cout << "q: --------------------------------------------"<<endl;

      while(!q.empty())

      {

            cout << "queue head:" << q.front().name << " " << q.front().age << endl;  

            cout << "queue tail:" << q.back().name << " " << q.back().age << endl;

            q.pop();//

      }

      cout << "q queue size:" << q.size()<<endl;

     

      cout << "q2: --------------------------------------------"<<endl;

      while(!q2.empty())

      {

            cout << "queue head:" << q2.front().name << " " << q2.front().age << endl;  

            cout << "queue tail:" << q2.back().name << " " << q2.back().age << endl;

            q2.pop();//

      }

      cout << "q2 queue size:" << q2.size()<<endl;

     

      cout << "q3: --------------------------------------------"<<endl;

      while(!q3.empty())

      {

            cout << "queue head:" << q3.front().name << " " << q3.front().age << endl;  

            cout << "queue tail:" << q3.back().name << " " << q3.back().age << endl;

            q3.pop();//

      }

      cout << "q3 queue size:" << q3.size()<<endl;

}

int main(int argc, char *argv[])

{

      test01();

      return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值