C++(七)——STL

STL

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

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

容器:特殊的数据结构,用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、
map 等。

迭代器:一种复杂的指针,支持各种复杂类型操作  运算符重载'。用于遍历对象集合的元素。这些集合可能是容器,
也可能是容器的子集。

算法:对元素数据做存取。作用于容器,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。

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

vector

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

vector函数部分示例

c 复制代码
/*===============================================
*   文件名称:vector.cpp
*   创 建 者:   
*   创建日期:2023年09月11日
*   描    述:
================================================*/
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
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<<myvector.back()<<"  ";
        myvector.pop_back();
    }
    cout<<endl;

    */

    //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;
}

list

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

list部分函数代码示例

c 复制代码
/*===============================================
*   文件名称:list.cpp
*   创 建 者:   
*   创建日期:2023年09月11日
*   描    述:
================================================*/
#include <iostream>
#include <iterator>
#include <list>

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

set

set部分函数代码示例

cpp 复制代码
/*===============================================
*   文件名称:set.cpp
*   创 建 者:   
*   创建日期:2023年09月11日
*   描    述:
================================================*/
#include <iostream>
#include <set>

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

map

map部分函数代码示例

cpp 复制代码
/*===============================================
*   文件名称:map.cpp
*   创 建 者:    
*   创建日期:2023年09月11日
*   描    述:
================================================*/
#include <iostream>
#include <map>
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;
}

deque

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

deque部分函数代码示例

cpp 复制代码
/*===============================================
*   文件名称:deque.cpp
*   创 建 者:   
*   创建日期:2023年09月11日
*   描    述:
================================================*/
#include <iostream>
#include <deque>
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;
}
相关推荐
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
UestcXiye5 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang