STL用法总结

一、vector动态数组

用法:

尾部添加:push_back()

元素个数:size()

是否为空:empty()

在第i个元素前面插入k:insert(a.begin()+i,k)

删除尾部元素:pop_back()

删除区间:eraser(a.begin()+i,a.begin()+j)  删除区间[i,j-1]的元素

删除元素:eraser(a.begin()+2)  删除第三个元素

清空:clear()

反转:reverse()

排序:sort(a.begin(),a.end())

接下来练一下:圆桌问题

http://acm.hdu.edu.cn/showproblem.php?pid=4841

#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
vector<int>table;
int main()
{
    int n,m,i,j;
    while(cin>>n>>m)
    {
        table.clear();//清空数组
        for(i=0;i<2*n;i++)
            table.push_back(i);//放进数组
        int pom=0;
        for(i=0;i<n;i++)
        {
            pom=(pom+m-1)%table.size();
            table.erase(table.begin()+pom);//清除那个人
        }
        j=0;
        for(i=0;i<2*n;i++)
        {
            if(!(i%50)&&i)
                cout<<endl;
            if(j<table.size()&&i==table[j])
            {
                j++;
                cout<<"G";
            }
            else
            {
                cout<<"B";
            }
        }
        cout<<endl<<endl;
    }
}

二、栈和stack

用法:

入栈:push()

取栈顶:top()

删除栈顶元素:pop()

栈为空:empty()

栈内元素:size()

来个小例子:翻转字符串

http://acm.hdu.edu.cn/showproblem.php?pid=1062

#include<iostream>
#include<stack>
#include<cstdio>
using namespace std;
int main()
{
    int n,i,j;
    char c;
    cin>>n;
    getchar();
    while(n--)
    {
       stack<char>s;
        while(true)
        {
            c=getchar();
            if(c=='\n'||c==' '||c==EOF)
            {
                while(!s.empty())
                {
                    cout<<s.top();
                    s.pop();
                }
                if(c==' ')
                    cout<<" ";
                if(c=='\n'||c==EOF)
                    break;
            }
            else
            s.push(c);
        }
        cout<<endl;
    }
    return 0;
}

三、队列和queue

用法:

入队列:push()

返回队首:front()

返回队尾:back()

删除队首:pop()

返回元素个数:size()

判断队列为空:empty()

来个案例:

http://acm.hdu.edu.cn/showproblem.php?pid=1702

#include<iostream>
#include<queue>
#include<stack>
#include<string>
using namespace std;
int main()
{
    int t,n,x;
    string s,m;
    cin>>t;
    while(t--)
    {
        cin>>n>>s;
        queue<int>q;
        stack<int>stac;
        if(s=="FIFO")
        {
            while(n--)
            {
                cin>>m;
                if(m=="IN")
                {
                    cin>>x;
                    q.push(x);
                }
                else if(m=="OUT")
                {
                    if(q.empty())
                        cout<<"None"<<endl;
                    else
                    {
                        cout<<q.front()<<endl;
                        q.pop();
                    }
                }
            }
        }
        else if(s=="FILO")
        {
            while(n--)
            {
                cin>>m;
                if(m=="IN")
                {
                    cin>>x;
                    stac.push(x);
                }
                else if(m=="OUT")
                {
                    if(stac.empty())
                        cout<<"None"<<endl;
                    else
                    {
                        cout<<stac.top()<<endl;
                        stac.pop();
                    }
                }
            }
        }
    }
    return 0;
}

四、优先队列(priority_queue)

用法:

返回最高级的元素值:top()

删除最高级元素:pop()

插入新元素:push()

例子:看病要排队

http://acm.hdu.edu.cn/showproblem.php?pid=1873

 

#include<iostream>
#include<queue>
#include<string>
#include<stdio.h>
using namespace std;
struct node
{
    int pre;
    int id;
    int kk;
    bool operator <(const node &a)const
    {
        if(pre!=a.pre)
            return pre<a.pre;
        else
            return kk>a.kk;
    }
}nod;
int main()
{
    int n,i,j=1,a,b,k=1;
    string s;
    while(cin>>n&&n!=EOF)
    {
        priority_queue<node> pq[5];
        j=1,k=1;
        for(i=1;i<=n;i++)
        {
            cin>>s;
            if(s=="IN")
            {
                cin>>a>>nod.pre;
                nod.id=j++;
                nod.kk=k++;
                pq[a].push(nod);
            }
            else
            {
                cin>>a;
                if(pq[a].empty())
                {
                    cout<<"EMPTY"<<endl;
                }
                else
                {
                    cout<<pq[a].top().id<<endl;
                    pq[a].pop();
                }
            }
        }
    }
}

 

posted @ 2020-02-14 15:56  清风紫雪  阅读(335)  评论(0编辑  收藏  举报