STL简单详解

 vector


    vector<int> vec;//定义一个vector,<>中的int可以换成任何数据类型

    vec.clear();//清空vector

    vec.empty();//判断vector是否为空,如果是空就返回1,否则返回0

    //vector的输入
    for(int i=1;i<=5;i++)
    {
        int x;
        cin>>x;
        vec.push_back(x);//放入前一个数字的后面
        
    }
    //vec.insert()在vector中不常用,想了解自行百度

  
    sort(vec.begin(),vec.end());    //vector排序方法
    reverse(vec.begin(),vec.end()); //将vector翻转


    //vecto的三种循环方法

    //第一种,利用数组的循环方式
    for(int i=0;i<vec.size();i++)
        cout<<vec[i]<<' ';
    cout<<"\n";

    //第二种,利用迭代器(指针)来遍历vector

    std::vector<int>::iterator it;//std::vector<int>::iterator可以换成auto

    //auto定义的变量会自动识别所赋值的变量类型
    
    for(it=vec.begin();it!=vec.end();it++)
    {    
        cout<<*it<<" ";
    }
    cout<<"\n";

    //第三种,利用auto进行遍历
    for(auto j: vec)
    {
        cout<<j<<" ";
    }
    cout<<'\n';

    //vector删除元素
    vec.pop_back();//删除vector中最后一个元素

    auto it1=vec.begin();
    for(;it1!=vec.end();)
    {
        if(*it1==4) it1=vec.erase(it1);
        else it1++;
    }
    for(auto j: vec)
    {
        cout<<j<<" ";
    }

 string

    string a,b;

    a.clear();b.clear();//清空
    
    cin>>a>>b;
    
    a.push_back('a');//尾部存放字符元素
    a.pop_back();//删除最后一个字符元素

    a+=b;//b字符串拼接到a字符串的后面,但没有a-=b的语法

    //字符串的遍历
    for(int i=0;i<a.size();i++)
    {
        cout<<a[i];//输出字符
        a[i]='a';//修改字符
    }

    int t=a.find('a');

    //find返回第一个出现‘a’的下标
    //如果没有‘a',nm返回的是string::npos
    //也可以在a中查找子串

    //substr提取子串函数
    
    string c;
    c=a.substr(0,3);//取a中第0位开始往后数3位的字符子串赋值给c
    cout<<c<<"\n";

    c=a.substr(3);//取从3开始直到最后的字符串,将其赋值给c

 pair

    pair<int,int> pii;//一种数据类型,pii一个变量携带两个值,经常和vector,set,map,queue等等结合使用

    cin>>pii.first>>pii.second;
    cout<<pii.first<<" "<<pii.second;

 set

 set<int> se;

    se.clear();//清空set
    se.empty();//判断set是否为空

    int n;
    cin>>n;
    int x=se.count(n);//返回set中出现n的个数

    //set的输入
    for(int i=1;i<=5;i++)
    {
        int x;
        cin>>x;
        se.insert(x);
    }
    

    //set的遍历
    //利用迭代器遍历
    std::set<int>::iterator it;
    for(it=se.begin();it!=se.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<"\n";

    //利用auto遍历
    for(auto j:se)
    {
        cout<<j<<" ";
    }
    cout<<"\n";

    //set的删除
    auto first1=se.begin();
    se.erase(it);//删除set首地址的元素
    se.erase(n);//删除set中元素n

    auto first=se.begin(),second=se.begin();
    second++;second++;
    se.erase(first,second);//删除地址first与second之间的元素,左闭右开

    se.find(n);//在set中查找元素n,返回一个地址,如果set中没有元素n,就返回se.end()的地址

    se.size();//set中的元素个数
    
    multiset<int> mse;//可以存放重复元素的set

 map

map<int,int> mp;//第一个int是关键字,第二个是关键值,关键字不重复

    for(int i=1;i<=5;i++)
    {
        int x,y;
        cin>>x>>y;
        mp.insert({x,y});//或者mp[x]=y也可以
    }

    mp.clear();//清空map

    mp.empty();//同set

    std::map<int,int>::iterator it;//map遍历
    for(it=mp.begin();it!=mp.end();it++)
    {
        cout<<(*it).first<<" "<<(*it).second<<"\n";
    }

    cout<<'\n';

    for(auto j:mp)//map遍历
    {
        cout<<j.first<<" "<<j.second<<"\n";
    }
    
    

    mp.erase(3);//用法类似set

    mp.count(3);//map中3的个数

    auto it=mp.find(3);//查找map是否存在元素3,如果没有元素3,那么返回mp.end();
    cout<<(*it).first<<" "<<(*it).second<<"\n";

    multimap<int,int> ma;//可以存放重复关键字的map

 queue

queue<int> q;//队列,先进先出

    for(int i=1;i<=5;i++)
    {
        int x;
        cin>>x;
        q.push(x);//队列输入
    }

    while(q.size())//size返回queue中的元素个数
    {
        int x=q.front();//返回queue中队首元素
        cout<<x<<" ";
        q.pop();//删除queue中队首元素
    }

    deque<int> dq;//双端队列

    for(int i=1;i<=5;i++)
    {
        int x,y;
        cin>>x>>y;
        dq.push_back(x);//放尾部
        dq.push_front(y);//放首部
    }
    while(dq.size())//队列元素
    {
        int x=dq.front(),y=dq.back();//返回首部和尾部的值
        dq.pop_front();//删除首部
        dq.pop_back();//删除尾部
        cout<<x<<' '<<y<<"\n";
    }

    priority_queue<int,vector<int>,greater<int>> minq;//小根堆
    priority_queue<int,vector<int>,less<int>> maxq;//大根堆

    for(int i=1;i<=5;i++)
    {
        int x;
        cin>>x;
        minq.push(x);
        maxq.push(x);
    }

    while(minq.size())
    {
        int t=minq.top();//每次取出的值都是minq中最小的
        minq.pop();
        cout<<t<<" ";
    }
    
    cout<<'\n';

    while(maxq.size())
    {
        int t=maxq.top();//每次取出来的值都是maxq中最大的
        maxq.pop();
        cout<<t<<" ";
    }

 stack

    stack<int> st;//栈,先进后出

    for(int i=1;i<=5;i++)
    {
        int x;
        cin>>x;
        st.push(x);//栈的储存
    }

    while(st.size())
    {
        int x=st.top();//获得尾部元素
        st.pop();//删除尾部元素
        cout<<x<<" ";
    }

 unique(去重函数)

    //unique去重函数

    //一般用于已经排好序的数组或者容器
    //单使用unique是讲后面不重复的元素移到i前面来
    
    //vector
    
    vector <int> vec;
    for(int i=1;i<=10;i++)
    {
        int x;
        cin>>x;
        vec.push_back(x);
    }

    sort(vec.begin(),vec.end());//vector排序

    unique(vec.begin(),vec.end());
    //返回值是从前往后第一个重复的元素的地址

    for(auto j:vec)
    {
        cout<<j<<' ';
    }

    cout<<'\n';

    vec.erase(unique(vec.begin(),vec.end()),vec.end());
    //erase加unique是将vector中的重复元素删除

    for(auto j:vec)
    {
        cout<<j<<" ";
    }

    cout<<'\n';
    
    //数组

    int a[1000];

    for(int i=1;i<=10;i++)
        cin>>a[i];

    sort(a+1,a+11);//数组排序

    unique(a+1,a+11);//将数组后面不重复的元素移到前面,后面的元素不发生改变

    for(int i=1;i<=10;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<"\n";
    
    int n=unique(a+1,a+11)-a+1;
    //n之后的元素可能会发生变动,但不影响去重本身的真确性
    for(int i=1;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值