• C++(七)——STL


    STL

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

    C++ 标准模板库的核心包括以下三个组件:

    容器:特殊的数据结构,用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、
    map 等。
    
    迭代器:一种复杂的指针,支持各种复杂类型操作  运算符重载'。用于遍历对象集合的元素。这些集合可能是容器,
    也可能是容器的子集。
    
    算法:对元素数据做存取。作用于容器,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    C++ 官方文档https://cplusplus.com/


    vector

    单向数组,数组空间可扩容
     从尾巴插入和删除效率高,也可以从中间插入删除,但是一般不建议使用
    
    • 1
    • 2

    vector函数部分示例

    /*===============================================
    *   文件名称:vector.cpp
    *   创 建 者:   
    *   创建日期:2023年09月11日
    *   描    述:
    ================================================*/
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    
    int main()
    {
    
        //push_back
        std::vector<int> myvector;
        int myint ;
            
        for( int i =0 ; i < 6 ; i++ )
        {
            myvector.push_back(i);
        }
    
        cout<<"个数:"<<myvector.size()<<endl;
        
        /*
        //pop_back,back;
       
        for(int i = 0 ; i < 3 ; i++ )
        {
            cout<
    
        //iterator 迭代器
        vector<int>::iterator it = myvector.begin();
    
        while( it < myvector.end())
        {
            cout<<*it<<" ";
            it++;
        }
        cout<<endl;
    
        //at
        cout<<"at "<<myvector.at(1)<<endl;
    
        //insert
        it = myvector.end();
        it = myvector.insert(it,100);
        myvector.insert(it,2,200);
    
        it = myvector.begin();
        while( it < myvector.end())
        {
            cout<<*it<<" ";
            it++;
        }
        cout<<endl<<endl;;
    
        //erase
        myvector.erase(myvector.begin()+3);
        myvector.erase(myvector.begin(),myvector.begin()+2);
        it = myvector.begin();
        while( it < myvector.end())
        {
            cout<<*it<<" ";
            it++;
        }
        cout<<endl<<endl;
    
        //emplace 
        myvector.emplace(myvector.begin(),10101010);
        myvector.emplace(myvector.end(),109807);
        it = myvector.begin();
        while( it < myvector.end())
        {
            cout<<*it<<" ";
            it++;
        }
        cout<<endl<<endl;
    
    
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    list

    双向链表
     删除和插入可以在任意位置效率都很高
    不能随机访问:不支持  at  []
    访问list一般情况都使用迭代器
    
    • 1
    • 2
    • 3
    • 4

    list部分函数代码示例

    /*===============================================
    *   文件名称:list.cpp
    *   创 建 者:   
    *   创建日期:2023年09月11日
    *   描    述:
    ================================================*/
    #include 
    #include 
    #include 
    
    using namespace std;
    
    
    int main()
    {
        //push_back
        list<int> mylist;
        for(int i = 1 ; i < 8 ; i++ )
        {
            mylist.push_back(i);
        }
        cout<<"个数:"<<mylist.size()<<endl;
    
        //迭代器iterator
        for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        //迭代器rverse_iterator
        for(list<int> :: reverse_iterator it = mylist.rbegin(); it != mylist.rend() ; it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        //insert
        list<int> :: iterator i = mylist.begin()++;
        mylist.insert(i,100);
        for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        //erase
        list<int> :: iterator it = mylist.begin();
        it = mylist.erase(++it);
        it++;
        mylist.erase(it, mylist.end());
        for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    set

    set部分函数代码示例

    /*===============================================
    *   文件名称:set.cpp
    *   创 建 者:   
    *   创建日期:2023年09月11日
    *   描    述:
    ================================================*/
    #include 
    #include 
    
    using namespace std;
    
    int main()
    {
        set<int> myset;
        set<int> ::iterator it;
        //insert
        for( int i = 1 ; i<8 ; i++)
        {
            myset.insert(i);
        }
        for( it = myset.begin(); it != myset.end() ; it++ )
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        //erase
        myset.erase(4);
        myset.erase(myset.begin());
        it = myset.find(3);
        myset.erase(myset.begin(),it);
        for( it = myset.begin(); it != myset.end() ; it++ )
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    map

    map部分函数代码示例

    /*===============================================
    *   文件名称:map.cpp
    *   创 建 者:    
    *   创建日期:2023年09月11日
    *   描    述:
    ================================================*/
    #include 
    #include 
    using namespace std;
    
    int main()
    {
    
        //insert()
        map<char,int> mymap;
        mymap.insert(pair<char,int>('a',1));
        mymap.insert(pair<char,int>('b',2));
        mymap.insert(pair<char,int>('c',3));
        mymap.insert(pair<char,int>('d',4));
        mymap.insert(pair<char,int>('f',1010));
       
        mymap['e']=8848;//[]
        mymap['g']=121;//[]
        mymap['h']=10086;//[]
        mymap['j']=10010;//[]
        mymap['k']=9090;//[]
    
        mymap.emplace('x',100);//emplace
        mymap.emplace('y',200);
        
        map<char,int>::iterator it;
        
        //begin(),end()
        for( it = mymap.begin(); it != mymap.end() ; it++)
        {
            cout<<it->first<<"=>"<<it->second<<endl;
        }
    
    
        //find
        it = mymap.find('b');
        cout<<endl<<"find:"<<it->first<<"=>"<<it->second<<endl<<endl;
    
        //erase
        mymap.erase(it);//b;
    
        mymap.erase('c');
    
        it = mymap.find('g');
        mymap.erase(it,mymap.end());
    
        for( it = mymap.begin(); it != mymap.end() ; it++)
        {
            cout<<it->first<<"=>"<<it->second<<endl;
        }
    
        //count
        cout<<"a:"<<mymap.count('a')<<endl<<endl;
    
        //key_comp
        map<char,int>::key_compare mycomp = mymap.key_comp();
        for(it = mymap.begin();it != mymap.end() ;it++ )
        {
            if(!mycomp(it->first,'d'))
            {
                cout<<"d:"<<it->first<<"=>"<<it->second<<endl<<endl;
                break;
            }
        }
    
        cout<<mymap.end()->first<<endl<<endl;
        //value_comp
        pair<char,int> h = *(--mymap.end());
        for(it = mymap.begin();it != mymap.end() ;it++ )
        {
            if(!mymap.value_comp()(*it,h))
            {
                cout<<"f:"<<it->first<<"=>"<<it->second<<endl;
                break;
            }
        }
    
    
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    deque

     双向队列,存储方式采用分块存储
     可以在头部和尾部进行快速插入和删除
     支持随机存储
    
    • 1
    • 2
    • 3

    deque部分函数代码示例

    /*===============================================
    *   文件名称:deque.cpp
    *   创 建 者:   
    *   创建日期:2023年09月11日
    *   描    述:
    ================================================*/
    #include 
    #include 
    using namespace std;
    
    int main ()
    {
    
    
        //push_back
        deque<int> mydeque;
        for( int i = 1 ; i < 6; i++ )
        {
            mydeque.push_back(i);
        }
    
        //迭代器,begin()
        deque<int>::iterator it = mydeque.begin();
        for( int i=0 ; i < 5 ;i++ )
        {
            cout<<*(it+i)<<" ";
        }
        cout<<endl;
    
    
        //迭代器,end()
        deque<int>::iterator it1 = mydeque.end();
        for( int i=1 ; i < 6 ;i++ )
        {
            cout<<*(it1-i)<<" ";
        }
        cout<<endl;
    
        //迭代器,rbegin()
        deque<int>::reverse_iterator it2 = mydeque.rbegin();
        for( int i=0 ; i < 5 ;i++ )
        {
            cout<<*(it2+i)<<" ";
        }
        cout<<endl;
    
    
        //at()
        mydeque.at(4)=5555;
        for( int i = 0 ; i < 5 ; i++ )
        {
            cout<<mydeque.at(i)<<" ";
        }
        cout<<endl;
    
        //insert
        it = mydeque.begin();
        ++it;
        mydeque.insert(it,10);
        for( it = mydeque.begin(); it != mydeque.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        
        it = mydeque.begin();
        ++it;
        mydeque.insert(it,2,20);
        for( it = mydeque.begin(); it != mydeque.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        it = mydeque.begin();
        ++it;
        mydeque.insert(it,it+2,it+3);
        for( it = mydeque.begin(); it != mydeque.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
    
        //emplace
        it = mydeque.emplace(mydeque.begin()+1,222);
    
        mydeque.emplace(it,3333);
        mydeque.emplace(mydeque.end(),8888);
    
        mydeque.insert(it,it+2,it+3);
        for( it = mydeque.begin(); it != mydeque.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
  • 相关阅读:
    Python反复折磨斐波那契序列
    elasticsearch高级篇:核心概念和实现原理
    服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例
    Synopsys Sentaurus TCAD系列教程之-- Sdevice《5》Plot模块
    驱动初级Day03_内核模块下_参数和依赖
    【iOS】JSONModel的基本使用
    C++ Day04 this指针,友元函数,重载
    计算机毕设(附源码)JAVA-SSM基于云服务器网上论坛设计
    2. 安装运行SQL语句的环境
    【MySQL】约束
  • 原文地址:https://blog.csdn.net/qq_59566583/article/details/132818205