STL中的vector、stack、queue

STL

  • vector(向量):可变长数组

  • stack(堆栈):FILO(先进后出)

  • queue(队列):FIFO(先进先出)

vector

  • 初始化:vector<数据类型(int char)> v(名称);

    • v 那么就是指一个空的数组v[]

    • v(n):指长度为n的空的数组

    • v(n,x):里面有n个x的数组,并且长度也为n

  • 遍历方法

    • v.size()->返回unit(数组大小);

    • auto

      • 拷贝式:for (auto i:v){cout<<i<<' ';}(不可修改)

      • 引用式 :auto&T:v 可以修改

  • 插入

    • push_back(y);----->v后面加一个y,并且v的大小会加一

    • emplace_back(y);

    • 下标[ ]:v[i]=v.at(i)

    • v.front()=v_0 v.back()=v[v.size()-1] 要保证v.size()>0

      • &i==&v.back()

  • 排序

    • sort(v.begin(),v.end()) 从小到大

  • 返回下标

    • lower_bound(v,begin(),v.end(),x)-v.begin() 返回x的下标

  • 去重 返回去重后第一个重复(无效)元素的迭代器

    • unique(v.begin(),v.end()); 使用unique的前提是已经排序(升序)

    • 如果v=[1,2,2,3,3,5] 使用unique后 v=[1,2,3,4,无效数据,无效数据](因为有两个重复数据,所以去重后,后面有两个无效数据) unique返回2(返回第一个重复的数据)

  • 代码:

    #include<bits/stdc++.h>
    using namespace std;
    void output(vector<int> &v)
    {
        cout<<"v.size()="<<v.size()<<":";//输出大小
        for(auto &i:v)//遍历输出
        cout<<i<<" ";
        cout<<"\n";
    }
    int main()
    {
        vector<int>v;//初始化容器
        output(v);
        v.push_back(1);//增添元素1
        output(v);
        v=vector<int>(5);
        output(v);
        v=vector<int>(3,2);//长度为3并且里面有3个2
        output(v);
        for(int i=0;i<10;i++)
        v.push_back(10-i);
        output(v);
        //vector排序
        sort(v.begin(),v.end());
        output(v);
        cout<<lower_bound(v.begin(),v.end(),3)-v.begin()<<endl;//返回下标
        unique(v.begin(),v.end());//去重
        output(v);
        sort(v.begin(),v.end());//使用unique必须有序,但是前面使用了unique,让v变得无序了,所以需要再使用一次sort
        v.erase(unique(v.begin(),v.end()),v.end());//删除
        output(v);
        return 0;
    }

  • 运行结果:

stack(堆栈)

  • 可以想象成一个下面有底的水桶,往里面放东西,取东西那么就只能从最上面一个一个取,直到最后。

  • FILO(先进后出)

    • 出栈:pop

    • 入栈:push

  • 初始化 stack<数据类型(int char double)> stk; 栈最开始一定是空的

    • 入栈: stk.push(x);

    • 出栈: stk.pop( ); 需要保证栈非空

  • 常用函数

    • stc.empty( )----->判断是否为空,为空返回true,不空返回false。

    • stc.size( )返回栈中元素的个数,即栈的大小,可以用来判断栈是否为空。

    • stk.top( )返回栈顶元素,不会自动pop,往往和pop( )一起用。

  • 代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        stack<int>stk;//初始化栈
        for(int i=1;i<=10;i++)//加入元素1 2 3 4 5 6 7 8 9 10
        {
            stk.push(i);
        }
        while(stk.size())//栈非空便一直循环
        {
            cout<<stk.top()<<" ";//输出栈顶元素
            stk.pop();//删掉栈顶元素
        }
        return 0;
    }

  • 运行结果:

queue(队列)

  • 相当一个单行管道,谁先从这头进去,谁就从另一头先出来,后面的需要排队。

  • FIFO(先进先出)

    • 入队:push

    • 出队:pop

  • 初始化 queue<数据类型 int char double......>q;

    • 入队:q.push(x);

    • 出队:q.pop( );

  • 常用函数

    • q.empty( );判断是否为空

    • q.size( );返回大小

    • q.front( );返回队首元素,也需要和pop一起使用

    • q.back( );返回队尾元素

  • 代码:

    #include<bits/stdc++.h>
    using namespace std;
    struct Node//定义一个结构体Node
    {
        int x,y;
    };
    int main()
    {
        queue<Node>q;//队列中数据类型为一个结构体
        for(int i=1;i<=6;i++)
        {
            q.push({i,i*2});//队列中添加元素
        }
        while(q.size())//队列不为空则一直循环
        {
            cout<<q.front().x<<" "<<q.front().y<<"\n";//输出首元素
            cout<<q.back().x<<"\n";//输出尾元素
            q.pop();//出队
    
        }
        return 0;
    }

  • 运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值