单向队列,双向队列,优先队列的基本用法

1.单向队列,意思就是只能从队列后面加入元素,遵循先进先出原则;

#include 
#include 
using namespace std;
int main()
{
    queue<int>q;
    q.push(5)//在队列末尾插入一个元素5;
    q.pop()//删除队列的第一个元素;
    q.front()//返回队列的第一个元素;
    q.empty()//判断队列是否为空,如果为空返回true;
    q.size()//返回队列中有多少元素;
    //遍历队列中元素可以为:
    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop();
    }
    return 0;
}

2.双向队列,意思是既可以从队尾插入元素,也可以从队列前插入元素

#include 
#include 
using namespace std;
int main()
{
    deque<int>q;
    deque<int>::iterator it1//正向迭代器
    deque<int>::reverse_iterator it2;//反向迭代器
    q.push_back()//在队尾插入元素;
    q.push_front()//在队列前插入元素;
    q.pop_back()//删除队尾元素;
    q.pop_front()//删除队列前元素;
    q.size()//返回队列q里面有多少元素;
    q.empty()//检查队列q是否为空;
    q.clear()//情况队列所有元素
    q.erase(start,end)//删除这俩个迭代器所指向的区间
    q.insert(i,x)//把x插入到迭代器i所指向的位置;
    正向遍历
    for(it1 = q.begin();it1 != q.end();it1++)
        cout << *it1 << endl;
    反向遍历
    for(it2 = q.rbegin();it2 != q.rend();it2++)
        cout << *it2 << endl;
    不借助迭代器遍历
    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop_front();
    }
    return 0;
}

3.优先队列,就是这个队列是默认从大到小排序,如果要从小到大排序,需要借助其他函数;

 #include 
#include 
using namespace std;
int main()
{
    priority_queue<int>q;//默认从大到小排序
    priority_queue<int, vector <int> ,greater <int> >q;//从小到大排序
    q.push()//插入元素;
    q.pop()//删除元素;
    q.size()//队列q的元素个数
    while(!q.empty())//遍历
    {
        cout << q.top() << endl;
        q.pop();
    }
}

你可能感兴趣的:(acm一些基本算法)