首页 > 代码库 > STL之stack,queue,优先队列

STL之stack,queue,优先队列

1.stack,size(),empty(),pop()函数

#include<stack>

#include<iostream>

usingnamespacestd;

//通过push()方法入栈

//通过size()方法求栈中元素的个数

//通过empty()方法判断栈是否为空

//通过pop()求栈中最顶端的元素

voidmain()

{

  intnum;

  cin >>num;

  stack<int>mystack;

  for (;num;num /= 2)

  {

      mystack.push(num % 2);

      std::cout << "当前元素个数" << mystack.size() << endl;

  }

  while (!mystack.empty())

  {

      intnum =mystack.top();

      std::cout << num <<" ";

      mystack.pop();

  }

  cin.get();

  cin.get();

}

运行结果:

2.queue,队列

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

voidmain()

{

  queue<char *> myq;

  myq.push("calc");

  myq.push("notepad");

  myq.push("tasklist");

  myq.push("mspaint");

  while (!myq.empty())

  {

      char *p = myq.front();//获取

      system(p);

      myq.pop();

  }

  cin.get();

  //运行结果是:

  //弹出计算器

  //弹出notepad

  //显示进程

  //弹出mspaint

}

案例2

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

voidmain()

{

  deque<int>mydq;

  mydq.push_back(1);

  mydq.push_back(11);

  mydq.push_back(111);

  mydq.push_back(1111);

  mydq.push_back(11111);

  mydq.push_front(123);

  mydq.insert(mydq.begin() + 3, 100);//插入

  //类似数组的方式打印出结果

  for (inti = 0;i <mydq.size();i++)

  {

      std::cout << mydq[i] << std::endl;

  }

  std::cout << "------------------" <<std::endl;

  //通过beginend的方式实现打印出结果

  autoib =mydq.begin();

  autoie =mydq.end();

  for (;ib !=ie;ib++)

  {

      std::cout << *ib <<std::endl;

  }

  cin.get();

}

运行结果:

案例3

关于队列的erase(),删除某个元素

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

//删除元素

voidmain()

{

  deque<int>mydq;

  mydq.push_back(1);

  mydq.push_back(11);

  mydq.push_back(111);

  mydq.push_back(1111);

  mydq.push_back(11111);

  mydq.push_back(123);

  //删除头部元素

  mydq.erase(mydq.begin());

  //删除尾部元素

  mydq.erase(mydq.end() - 1);

  autoib =mydq.begin();

  autoie =mydq.end();

  for (;ib !=ie;ib++)

  {

      std::cout << *ib <<std::endl;

  }

  cin.get();

}

运行结果:

案例4

关于pop_front()pop_back()

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

//删除元素

voidmain()

{

  deque<int>mydq;

  mydq.push_back(1);

  mydq.push_back(11);

  mydq.push_back(111);

  mydq.push_back(1111);

  mydq.push_back(11111);

  mydq.push_back(123);

  //头部弹出

  mydq.pop_front();

  //尾部弹出

  mydq.pop_back();

  autoib =mydq.begin();

  autoie =mydq.end();

  for (;ib !=ie;ib++)

  {

      std::cout << *ib <<std::endl;

  }

  cin.get();

}

运行结果:

案例5

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

//删除元素

voidmain()

{

  deque<int>mydq;

  mydq.push_back(1);

  mydq.push_back(11);

  mydq.push_back(111);

  mydq.push_back(1111);

  mydq.push_back(11111);

  mydq.push_back(123);

  //清空

  mydq.clear();

  autoib =mydq.begin();

  autoie =mydq.end();

  for (;ib !=ie;ib++)

  {

      std::cout << *ib <<std::endl;

  }

  cin.get();

}

运行结果:

案例6

swap实现两个栈中的内容交换

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

//swap()两个栈中的数据交换

voidmain()

{

  deque<int>mydq1;

  mydq1.push_back(1);

  mydq1.push_back(11);

  mydq1.push_back(111);

  mydq1.push_back(1111);

  mydq1.push_back(11111);

  deque<int>mydq2;

  mydq2.push_back(2);

  mydq2.push_back(21);

  mydq2.push_back(211);

  mydq2.push_back(2111);

  mydq2.push_back(21111);

  mydq1.swap(mydq2);

  {

      autoib =mydq1.begin();

      autoie =mydq1.end();

      for (;ib !=ie;ib++)

      {

          std::cout << *ib <<std::endl;

      }

  }

  std::cout << "---------------" <<std::endl;

  {

      autoib =mydq2.begin();

      autoie =mydq2.end();

      for (;ib !=ie;ib++)

      {

          std::cout << *ib <<std::endl;

      }

  }

  cin.get();

}

案例7.

关于front(),back(),max_size(),size()

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

//提供了二维动态数组的功能,头部,尾部,任意操作

usingnamespacestd;

//swap()两个栈中的数据交换

voidmain()

{

  deque<int>mydq1;

  mydq1.push_back(1);

  mydq1.push_back(11);

  mydq1.push_back(111);

  mydq1.push_back(1111);

  mydq1.push_back(11111);

  //第一个元素

  std::cout << mydq1.front() << std::endl;

  //最后一个元素值

  std::cout << mydq1.back() << std::endl;

  //栈所允许的最大个数

  std::cout << mydq1.max_size() << std::endl;

  //当前栈的个数

  std::cout << mydq1.size() << std::endl;

  cin.get();

}

运行结果:

3.优先队列

优先队列实现的参数的结果是有序的

#include<queue>

#include<iostream>

usingnamespacestd;

//优先队列实现了自动排序功能

voidmain()

{

  priority_queue<int>myq;

  myq.push(10);

  myq.push(12);

  myq.push(11);

  myq.push(110);

  myq.push(101);//自动排序

  while (!myq.empty())

  {

      std::cout << myq.top() << endl;

      myq.pop();

  }

  cin.get();

}

运行结果:

4.优先队列之2

案例:

#include<queue>

#include<iostream>

#include<string>

#include<stdlib.h>

#include<list>

#include<deque>//双端队列

usingnamespacestd;

structstudent

{

  intage;

  stringname;

};

//这里按照年龄比较大小

structstuless

{

  bool operator()(conststudent &s1,conststudent &s2)

  {

      returns1.age < s2.age;

  }

};

voidmain()

{

              //类名 存储方式是deque方式 按照年龄排序

  priority_queue<student,deque<student>,stuless>myq;

  students1;

  s1.age = 10;

  s1.name = "谭胜";

  students2;

  s2.age = 9;

  s2.name = "熊飞";

  students3;

  s3.age = 19;

  s3.name = "peng";

  myq.push(s1);

  myq.push(s2);

  myq.push(s3);

  while (!myq.empty())

  {

      std::cout << myq.top().age << myq.top().name << endl;

      myq.pop();

  }

  cin.get();

}

运行结果是:

STL之stack,queue,优先队列