c++常见的STL容器

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();
    }
}

原文地址:https://www.cnblogs.com/boruto/p/9562495.html

时间: 2024-10-08 03:41:34

c++常见的STL容器的相关文章

STL容器之优先队列

STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级.这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面.标准库默认使用<操作符来确定对象之间的优先级关系,所以

STL容器之优先队列(转)

STL容器之优先队列 原地址:http://www.cnblogs.com/summerRQ/articles/2470130.html 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级.这种队列不

STL - STL容器的适用情况

原文地址:http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ 一.各种容器的特性 vector 典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取.修改具有常数时间复杂度,在序列尾部进行插入.删除是常数时间复杂度,但在序列的头部插入.删除的时间复杂度是O(n),可以 在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑. deque 序列容器,

STL容器的适用情况

转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; mso-bidi-font-family:"times new roman"; mso-bidi-theme-font:minor-bidi;} @page {mso-page-border-surround-header:no; mso-page-border-surround-footer

stl容器学习——queue,stack,list与string

目录 string stack queue list 点击上面的内容可以实现跳转哦 简介:本文记录了对string list queue stack四个容器的学习总结,包含有四种容器常用的函数介绍和一些使用过程中碰到的细节总结,在list容器中介绍了迭代器的使用. 头文件 想要用哪一种容器,就要加上对应的头文件 比如想要使用queue , 就要加上 #include<queue> 以此类推,想要使用STL库中的容器,只要加上它们的头文件就好. string 目录部分 1.string的定义及初

STL容器简介

C++标准定义了一系列的容器的共通要求,适用于所有的STL容器,然而由于C++11带来了容器的多样化,因此可能出现若干例外. ?初始化: 每个容器都提供了一个default构造函数,一个copy函数和一个析构函数 ? ? ?

STL容器之一vector

STL中最简单也是最有用的容器之一是vector<T>类模板,称为向量容器,是序列类型容器中的一种. 容器容量可以选择性修改.(1)声明:vector<type>  v;    //容量为0构造v对象,指定元素类型为typevector<type>  v(n);    //容量为n构造v对象,指定元素类型为typevector<type>  v(n, initValue);    //容量为n构造v对象,指定元素类型为type,且所有元素被初始化为initV

STL容器的遍历删除

STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的表项(当然这个函数是应该运行在另起一个线程上的),但是在按照下面的方法对hash_map(用迭代器)遍历删除时,当找到第一个满足删除条件的元素并将其删除后,程序将提示非法: for(list<int>::iterator iter = m_map.begin(); iter != m_map.en

STL 容器

标准库为相关对象的存储集合提供了各种类型安全容器.容器是类模板:在声明容器变量时,你可以指定该容器将保存的元素类型.可以使用初始值设定项列表构造容器.它们具有用于添加和移除元素以及执行其他操作的成员函数.可使用迭代器循环访问容器中的元素以及访问单个元素.可以通过使用其成员函数和运算符以及全局函数来显式使用迭代器.还可以隐式使用它们,例如通过使用范围 for 循环.所有 STL 容器的迭代器都有一个通用接口,但是每个容器会定义自己的专用迭代器. 容器可以分为三个类别:序列容器.关联容器和容器适配器