C++中常用的STL容器

C++中常用的STL容器:

Vector:变长数组:数组长度是可以动态变化的,倍增

Pair<X,Y>:二元组:前后两个元素类型可以不同

string:字符串:常见的函数:substr()截取一段字串,c_str()返回字符串的头指针

queue:队列:先进先出,push()插入,pop() 弹出,front() 返回队头元素

priority_queue:优先队列:本质是个堆,push() 插入元素,top() 返回堆顶元素,pop() 堆顶弹出

stack:栈:push() 插入,pop() 弹出,top() 返回栈顶元素

deque:双端队列:队头队尾都可以插入删除,可以随机访问

set、map、multiset、multimap:基于平衡二叉树(红黑树),动态维护有序序列

unordered_set、unordered_map、unordered_multiset、unordered_multimap:基于哈希表实现

bitset:压位,比如原先的bool存储0/1需要1字节,但是采用bitset可以将多个0/1存放在一个字节

Vector:
    vector<int> a;//最简单的定义方法
    vector<int> a(100);//定义数组的大小
    vector<int> a(100,3);//将数组每个数初始化为3
    vector<int> a[10];//这是定义了10个vector,和第一个不一样
    clear()//清空容器中的元素
    front()/back()//返回第一个/最后一个数
    push_back()/pop_back()//最后一位:插入/删除
    begin(),end()//vector的迭代器,begin是第一个元素,end是最后一个数的后面一个数
    
Pair:
    pair<int,string> p ;//定义
    p=make_pair(10,"ABC");//构造一个pair
    p={20,"AAA"}//简单的构造方式
    p.first/p.second//取得第一个/第二个元素

String:
    string //可以直接相加拼接
    substr(1,3)//从下标1开始,返回长度为3的字串

Queue:
    push()//向队尾插入一个元素
    front()//返回队头元素
    back()//返回队尾元素
    pop()//弹出队头元素
    
Priority_queue:
    priority_queue<int> pq; //定义的优先队列默认是大根堆
    priority_queue<int,vector<int>,greater<int>> pq;//定义一个小根堆
    push()//向堆中插入一个元素
    top()//返回堆顶元素
    pop()//弹出堆顶元素
    
Stack:
    push()//向栈顶插入一个元素
    top()//返回栈顶元素
    pop()//弹出栈顶元素
    
Deque:
     clear()//清空容器中的元素
     front(),back()//返回第一个/最后一个元素
     push_back(),pop_back()//向最后插入一个元素,弹出最后一个元素
     push_front(),pop_front()//向队头插入一个元素,弹出第一个元素
     begin(),end()//比较器
     支持随机存取,但是速度较慢,不常用
    
Set,Multiset:
    set<int> s//不允许出现重复元素的集合
    multiset<int> ms//允许出现重复元素的集合
    
    find()//查找一个数,不存在的话会返回end迭代器
    insert()//插入一个数
    count()//返回某个元素的出现的次数
    erase(x)//删除集合中所有值为x的结点
    erase(*i)//删除这个迭代器所在的元素,只删除这一个
    lower_bound(X);//返回大于等于X的最小的数的迭代器
    upper_bound(X);//返回大于X的最小的数的迭代器
    
Map,Multimap:
    map<int,string> m;//不允许key重复
    multimap<int,string> mm;//允许key重复
    
    insert()//插入,要插入一个pair
    erase()//删除,可以输入pair或者迭代器
    find()//查找
    lower_bound(X);//返回大于等于X的最小的数的迭代器
    upper_bound(X);//返回大于X的最小的数的迭代器
    
unordered_set、unordered_map、unordered_multiset、unordered_multimap: 
    操作与上面操作类似
    优点:增删改查时间复杂度为O(1)
    缺点:不支持迭代器的++,-- ,也不支持lower_bound(X);upper_bound(X)操作
    
Bitset:
    bitset<1000> bs//定义时写的是长度
    支持所有位运算
    cout()//返回有多少个1
    any()/none()//返回是否至少有一个1/是否没有1
    reset()//把所有位置为0
    set()//把所有位置为1
    set(k,v)//把第k位置为v
    flip() //把所有位取反
    flip(k)//把第k位取反
posted @ 2025-09-14 10:50  小花护符  阅读(9)  评论(0)    收藏  举报