1. 程式人生 > >c++常見的STL容器

c++常見的STL容器

include 兩個 top true .... art node 下標運算 ear

c++常見的STL容器

1 隊列—queue

我想很多人都知道這個神器—queue

隊列queue(FIFO),!!需要頭文件 #incldue<queue>

有幾種常見操作:

1.queue<類型> q 定義一個某類型的隊列q

2.q.push(元素) 把一個元素壓入隊列q的隊首

3.q.pop() 彈出隊尾元素

4.q.size() 返回隊列中元素的個數

5.q.empty() 判斷隊列是否為空,為空則返回1,不為空則返回0

6.q.front()返回隊首元素


2 棧—stack

stack是一種類似於隊列(FIFO)的另一種(LIFO)鏈式儲存結構

棧stack,!!需要頭文件 #include<stack>

c++中STL提供了幾種常見操作:

1.stack<類型> s定義一個某類型的隊列s

2.s.push(元素)把一個元素壓入s的棧頂

3.s.pop()彈出棧頂元素

4.s.size()返回棧中元素的個數

5.s.empty()判斷是否空棧,為空則返回1,不為空則返回0

6.s.top()返回棧頂元素


3 向量—vector

向量vector俗稱"動態數組",因為其可以像數組一樣進行下標運算,而且使用時,vector自動動態申請儲存空間,並且擁有更多操作,亦可以用於sort等函數之中

向量vector,!!需要頭文件 #include<vector>

c++中STL提供了幾種常見操作:

1.vector<類型> v定義一個某類型的向量v

2.v.push_back()在數組v的最後添加一個數據

3.v.pop_back()彈出數組v的最後一個數據

4.v.begin()返回v的首部元素的叠代器

5.v.end()返回v的尾部元素的後一個元素的的叠代器

6.v.back()返回v的首元素

7.v.front()返回v的尾元素

8.v.size()返回v中的元素個數

9.v.erase()刪除指針指向的數據項

10.v.clear()彈出v中所有元素

11.v.empty()判斷是否為空,為空則返回1,不為空則返回0


下面來舉幾個栗子:

1

輸入n個數,逆序輸出這n個數(棧實現)

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    int n;
    cin>>n;
    stack<int> s;
    for(int i=1;i<=n;i++)
    {
        int a;
        cin>>a;
        s.push(a);
    }
    while(s.size())
    {
        cout<<s.top()<<" ";
        s.pop();
    }
}

2

輸入n個數,由小到大排序後輸出(向量實現)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<int> v;
    for(int i=1;i<=n;i++)
    {
        int a;
        cin>>a;
        v.push_back(a);
    }
    sort(v.begin(),v.end());//STL中sort的用法請見我後面的文章 
    vector<int>:: iterator it=v.begin();//STL中叠代器的用法請見我後面的文章 
    for(it;it<v.end();it++)
    {
        cout<<*it<<" ";
    }
}

3

走迷宮: 一個迷宮由R行C列格子組成,有的格子裏有障礙物,不能走;有的格子是空地,可以走。   給定一個迷宮,求從左上角走到右下角最少需要走多少步(數據保證一定能走到)。只能在水平方向或垂直方向走,不能斜著走。 input: 第一行是兩個整數,R和C,代表迷宮的長和寬。( 1<= R,C <= 40)   接下來是R行,每行C個字符,代表整個迷宮。   空地格子用‘.’表示,有障礙物的格子用‘#’表示。   迷宮左上角和右下角都是‘.’。 output:輸出從左上角走到右下角至少要經過多少步(即至少要經過多少個空地格子)。計算步數要包括起點和終點。

e.g.input:

5 5
..###
#....
#.#.#
#.#.#
#.#..

e.g.output:

9

#include<iostream>
#include<queue>
using namespace std;
int vis[1000][1000];
struct node
{
    int x,y,step;
};
int main()
{
    queue<node> q;
    int R,C;
    cin>>R>>C;
    int dx[4]={1,0,-1,0};
    int dy[4]={0,1,0,-1};

    char map[1000][1000];
    for(int i=1;i<=R;i++)
    {
        for(int o=1;o<=C;o++)
        {
            cin>>map[i][o];
        }
    }
    node yy;
    yy.x=1;
    yy.y=1;
    yy.step=1;
    q.push(yy);//隊列實現寬搜
    while(q.size())
    {
        node op;
        op=q.front();
        for(int i=0;i<4;i++)
        {
            int qqx=op.x+dx[i];
            int qqy=op.y+dy[i];
            if(map[qqx][qqy]=.&&qqx>0&&qqx<=R&&qqy>0&&qqy<=C&&!vis[qqx][qqy])
            {
                map[qqx][qqy]=#;
                vis[qqx][qqy]=true;
                node pp;
                pp.x=qqx;
                pp.y=qqy;
                pp.step=op.step+1;
                q.push(pp);
                if(qqx==R&&qqy==C)
                {
                    cout<<op.step+1;
                    return 0;
                }
            }
        }
        q.pop();
    }
}

c++常見的STL容器