stack和queue详解

要注意的问题:

1. 在使用unique_copy()函数之前,一定要使用sort()函数进行排序,否则得不到正确的结果。因为unique_copy()函数的原来删除相邻的相同元素。

2.使用meger()函数合并两个数列的时候,也要在之前用sort()进行排序。li1.sort();  li2.sort();  li1.merge(li2);

3.STL容器分两种,序列式容器(vector/list/deque/stack/queue/heap),及关联式容器。关联式容器又分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)/multimap(多键映射表),这些容器均以RB-tree完成。

一、stack

#include  <stack>

namespace std {

     template <class T, class Container = deque<T> >

     class stack;
}

===========
第一个template参数代表元素类别。带有默认值的第二个template参数用来定义stack内部存放元素所用的实际容器。
缺省采用deque。

std::stack<int> st;      //interger stack

实际上stack只是很简单地把各项操作转化为内部容器的对应调用。你可以使用任何序列式容易来支持stack,只要它们支持back(),push_back(),pop_back(),等动作就行。可以使用vector或list容器来容纳元素:
std::stack<int, std::vector<int> > st;
===
三个核心成员函数:
push()会将一个元素置于stack内。
top()会返回stack内的下一个元素。
pop()会从stack中移除元素。
可以用size()和empty()来检验容器是否为空.
====
使用例子:
#include <stack>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
     stack<int> st;

     st.push(1);
     st.push(2);
     st.push(3);

     cout<<st.top()<<" ";
     st.pop();
     cout<<st.top()<<" ";
     st.pop();

     //modify top elements
     st.top() = 77;

     st.push(4);
     st.push(5);

     cout<<"\nsize:"<<st.size()<<"\n";

     st.pop();

     while ( !st.empty() ) {
          cout<<st.top()<<" ";
          st.pop();
     }
    
     cout<<endl;

     return 0;
}

二、queue

#include  <queue>

namespace std {

     template <class T, class Container = deque<T> >

     class queue;
}
===========
第一个template参数代表元素类别。带有默认值的第二个template参数用来定义queue内部存放元素所用的实际容器。
缺省采用deque。
std::stack<std::string> buffer;     //interger queue
实际上queue只是很简单地把各项操作转化为内部容器的对应调用。你可以使用任何序列式容易来支持queue,只要它们支持front(),back(),push_back(),pop_front(),等动作就行。可以使用list容器来容纳元素:
std::queue<int, std::list<std::string> > buffer;
===
三个核心成员函数:
push()会将一个元素置于queue内。
front()回返回queue内的下一个元素(也就是第一个被置入的值)
back()返回最后一个元素
pop()会从queue中移除元素。清除第一个元素 (出队)
size()
empty()
===
可以用size()和empty()来检验容器是否为空.
====
使用例子:
#include <queue>
#include <string>
#include <iostream>

using namespace std;


int main(int argc, char **argv)
{
     queue<string> q;

     q.push("these ");
     q.push("are ");
     q.push("more than ...");

     //read and print
     cout << q.front();
     q.pop();
     cout<<q.front();
     q.pop();

     //insert two new elements
     q.push("four ");
     q.push("words! ");

     q.pop();

     //skip and print
     cout<<q.front();
     q.pop();
         
     cout<<q.front()<<endl;
     q.pop();

     //print number of elements in the queue
     cout<<"number of elements in the queue: "<<q.size()<<endl;

     return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值