C++的STL的学习

目录

1基本概念:

2 vector容器案例:

3string容器

4stack容器:

5Queue容器:(队列)

6list容器(链表):

7set容器(集合容器)


1基本概念:

  1. STL标准模板库
  2. STL从广义上分为1容器2算法3迭代器
  3. 容器和算法之间通过迭代器进行无缝衔接
  4. STL六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器

容器:

用最广泛的一些数据结构实现出来的

数组、链表、树、栈、队列、集合、映射表等

算法:这个都理解啊

就是分为质变和非质变

迭代器:

算法通过迭代器来访问容器中的元素

可以理解为迭代器就是指针

 1:vector容器案例:

#include<iostream>
using namespace std;
#include<vector>
int main()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    //通过迭代器访问容器中的数据;//类似于我定义一个并且将其赋值;
    vector<int>::iterator itbegin=v.begin();//起始迭代器  指向容器第一个元素
    vector<int>::iterator itend=v.end();//结束迭代器  指向容器最后一个元素下一个位置
    while(itbegin!=itend)
    {
        cout<<*itbegin<<" ";
        itbegin++;

    }
//这是利用了迭代器

 

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法的头文件
void my_print(int val)
{
    cout<<val<<" ";
}
int main()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    //通过迭代器访问容器中的数据;//类似于我定义一个并且将其赋值;
    // vector<int>::iterator itbegin=v.begin();//起始迭代器  指向容器第一个元素
    // vector<int>::iterator itend=v.end();//结束迭代器  指向容器最后一个元素下一个位置
    // while(itbegin!=itend)
    // {
    //     cout<<*itbegin<<" ";
    //     itbegin++;

    // }
    for_each(v.begin(), v.end(), my_print);
}
//利用STL的算法;

2:string容器

1:拼接:

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法的头文件
#include<string>
int main()
{
    string str1;
    string str2;
    str1="woai";
    // str2="youxi";
    // str1+=str2;
    // cout<<str1;
    str1.append("youxi");
    cout<<str1;
}
//string容器的拼接;
append(字符串,起始位置,末尾位置)
只截取起始位置不截取末尾位置

2:查找和替换: 

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法的头文件
#include<string>
int main()
{
    string str1;
    string str2;
    // str1="woai";
    // str2="youxi";
    // // str1+=str2;
    // // cout<<str1;
    // str1.append(str2,0,3);//他这个末尾是不截取的直截取开头;
    // cout<<str1;
    str1="I love You";
    int pos=str1.find("lo");
    cout<<pos;//返回你所查找到的字符串的起始位置
//rfind是从右侧开始查找find是从左往右查找;

}
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法的头文件
#include<string>
int main()
{
    string str1;
    string str2;
    str1="I love You";
    str1.replace(0,1,"yushqi");// 从0号字符起1个字符替换为“yushiqi”
    cout<<str1; 
    // insert(pos,char):在制定的位置pos前插入字符char
    s1.insert(s1.begin(),'1'); 
   int pos;
    pos=str1.find(str2);//寻找操作
    cout<<pos<<endl;
    str1.insert(pos,str2);//插入操作
    cout<<str1; 
    str1.erase(pos,str2.size());//删除操作
    reverse(str1.begin(),str2.end())//整体逆序;
    cout<<str1;


}

先不学string和vector了我现在要用其他的以后学了再补充

stack容器:

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法头文件
#include<stack>
int main()
{
    stack<int> stk;
    stk.push(10);
    stk.push(40);
    stk.push(30);
    stk.push(20);//入栈
    while(!stk.empty())//判断栈空空返回1;
    {
        cout<<stk.top()<<endl;//返回栈顶元素;
        stk.pop();//弹栈
       

    }
    cout<<stk.size()<<endl;//返回栈的大小;
}

Queue容器:(队列)

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{
    queue<double>Q;
    int i;
    for(i=0;i<3;i++)
    {
        Q.push(i+5.3);
    }
    while(!Q.empty())//判断队列为不为空
    {
        cout<<Q.front()<<" ";//查看对头元素;
        cout<<Q.back()<<" ";//查看队尾元素;
        Q.pop();//弹出对列;
    }
    cout<<Q.size();//队列大小;
}

list容器(链表):

    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #include<list>
    void print_list(list<int>&l1)
    {
        for(list<int>::iterator it=l1.begin();it!=l1.end();it++)
        {
            cout<<*it<<" ";
        }
    }
    int main()
    {
        //防止修改容器加const;
        //构造链表有好几种形式:
        //默认构造
        list<int>l1;
        int i=0;
        for(;i<3;i++)
        {
            l1.push_back(i+10);
        }
        print_list(l1);//遍历l1
         //区间构造
        list<int>l2(l1.begin(),l1.end());
        print_list(l2);
        //拷贝构造:
        list<int>l3(l1);
        print_list(l3);
        cout<<endl;

    }
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #include<list>
    void print_list(const list<int>&l1)//加const是防止l1被修改;
    {
        for(list<int>::const_iterator it=l1.begin();it!=l1.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    }
    int main()
    {
        list<int>l1;
        int i=1;

        for(;i<5;i++)
        {
            l1.push_back(i+20);
        }
        print_list(l1);
        list<int>l2;list<int>l3;list<int>l4;
        l2=l1;
        print_list(l2);
        l3.assign(l2.begin(),l2.end());
        print_list(l3);
        l4.assign(10,100);
        print_list(l4);//这些都是赋值操作;
        l1.swap(l4);
        print_list(l1);
        print_list(l4);//链表的交换
    }
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #include<list>
    void print_list(const list<int>&l1)//加const是防止l1被修改;
    {
        for(list<int>::const_iterator it=l1.begin();it!=l1.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    }
    int main()
    {

        list<int>l1;
        int i=0;
        for(;i<4;i++)
        {
            l1.push_back(i+20);//尾插法;
        }
        print_list(l1);
        cout<<l1.size()<<endl;
        if(!l1.empty())
        {
            cout<<"no empty"<<endl;
        }
        else
        {
            cout<<"empty"<<endl;
        }
        l1.resize(10);//改变链表大小;
        print_list(l1);
    }
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #include<list>
    void print_list(const list<int>&l1)//加const是防止l1被修改;
    {
        for(list<int>::const_iterator it=l1.begin();it!=l1.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    }
    int main()
    {
//list容器的插入和删除
        list<int>l1;
        int i=0;
        for(;i<4;i++)
        {
            l1.push_back(i+20);//尾插法;
        }
        print_list(l1);
        l1.push_front(100);//头插;
        print_list(l1);
        l1.pop_back();//尾删;;
        print_list(l1);
        l1.pop_front();
        print_list(l1);
        //头删;
        //插入;
        list<int>::iterator it=l1.begin();//先给一个迭代器移动然后插入
        l1.insert(++it,130);
        l1.insert(++it,130);l1.insert(++it,130);
        print_list(l1);
        //移除:
        l1.remove(130);
        print_list(l1); 
        //清空:
        l1.clear();
        print_list(l1);
    }
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#include<list>
void print_list(const list<int>&l1)//加const是防止l1被修改;
{
    for(list<int>::const_iterator it=l1.begin();it!=l1.end();it++)
    {
        cout<<*it<<" ";
    }
        cout<<endl;
}
//列表迭代器可以双向访问;并且不可跳跃不支持随机访问
int main()
{
    list<int>l1;
    int i=0;
    for(;i<5;i++)
    {
        l1.push_back(i+10);
    }
    // cout<<l1.back()<<endl;
    // cout<<l1.front()<<endl;
//排序,反转
    print_list(l1);
    l1.reverse();//这是一个反转的操作
    print_list(l1);
    list<int>l2;
    l2.push_back(10);
    l2.push_back(90);
    l2.push_back(100);
    l2.push_back(80);
    print_list(l2);
    l2.sort();//默认是升序;
    print_list(l2);
   // l2.sort();
}

set容器(集合容器)

void print_set(set<int>&s)
{
    for(set<int>::iterator it=s.begin();it!=s.end();it++)
    {
        cout<<(*it)<<" ";

    }
    cout<<endl;
}
int main()
{  set<int>s;
    s.insert(10);
    s.insert(230);//set容器的插入
    s.insert(23);
    s.insert(30);
    print_set(s);
    set<int>s1;
    if(!s.empty())//判断是否为空
    {
        cout<<"s不为空"<<endl;
    }
    s1.insert(12);
    s1.insert(18);//插入
    s1.insert(19);
    s1.insert(14);
    print_set(s1);
    cout<<s.size()<<endl;//大小
    cout<<s1.size()<<endl;
    s.swap(s1);//交换
    print_set(s);
    print_set(s1);
    it=s.begin();//set容器的删除
    it++;
    s.erase(it);
    print_set(s);
//clear()清空
     set<int>::iterator pos=s.find(230);//fing返回一个迭代器并且没找到的话输出的是末尾迭代器
    if(pos==s.end())
    {
        cout<<"meizhaodao"<<endl;
    }
    else
    {
        cout<<*pos<<endl;//输出迭代器所对应的内容
    }
 //创建队组pair;
    pair<string,int>p=make_pair("yushiqi",18);
    cout<<p.first<<p.second<<endl;
}
//set容器不会重复而且会自动排序可以理解为集合容器//不做赘述了和其他容器接口基本一致

map容器、string、vector后续在更

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李小于

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值