C++STL的简要

vector

vector 变长数组(动态数组),支持随机访问。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    // 初始化方法:
    vector<int> a;
    vector<int> b(10); // 长度为10的vector数组,10个元素均为0
    vector<int> c(10, 2); // 长度为10的vector数组,10个元素均为2

    a.size(); // 返回vector元素个数
    a.empty(); // 返回vector容器是否为空
    a.clear(); // 清空vector容器

    // 向vector中插入10个数
    for (int i = 0; i < 10; i++)
        a.push_back(i);

    // 遍历方式:
    for (int i = 0; i < 10; i++)
        cout << a[i] << ' ';
    // 输出为:0 1 2 3 4 5 6 7 8 9

    for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
        cout << *it << ' ';
    // 输出为:0 1 2 3 4 5 6 7 8 9

    for (auto x : a)
        cout << x << ' ';
    // 输出为:0 1 2 3 4 5 6 7 8 9

    // vector容器可比较大小(按照字典序)
    vector<int> x(4, 3), y(3, 4);
    if (x < y)
        cout << "x < y";
    // 输出为:x < y
}

queue

  • queue 队列,遵循先进先出原则!
#include <iostream>
#include <queue>
using namespace std;
int main()
{
    queue<int> q;

    /* 

    q.size() 返回队列长度
    q.empty() 返回队列是否为空
    q.push(x) 向队尾插入一个元素x
    q.front() 返回队头元素
    q.back() 返回队尾元素
    q.pop 弹出队头元素
    
    */
}
  • priority_queue优先队列(大根堆,优先弹出最大值)
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
    priority_queue<int> p;

    /*

    p.size() 返回堆长度
    p.empty() 返回堆是否为空
    p.push(x) 插入一个元素x
    p.top() 返回堆顶元素(即最大值)
    p.pop() 弹出堆顶元素(即删除最大值)

    */

   /*
   
    实现小根堆的方法:
    1. 直接插入负数

    2. priority_queue<int, vector<int>, greater<int>> p;

   */
}

stack

stack栈,遵循先进后出原则!

#include<iostream>
#include<stack>
using namespace std;
int main(){
    stack<int> s;

    /*
    
    s.size() 返回栈长度
    s.empty() 返回栈是否为空
    s.push(x) 插入一个元素x
    s.top() 返回栈顶元素
    s.pop() 弹出栈顶元素
    
    */
}

deque

deque 双端队列,支持随机访问。

#include <iostream>
#include <deque>
using namespace std;
int main()
{
    deque<int> d;

    /*

    d.size() 返回队列长度
    d.empty() 返回队列是否为空
    d.clear() 清空队列
    d.front() / d.back() 返回第一个/最后一个元素
    d.push_front(x) / d.push_back(x) 向队首/队尾插入一个元素x
    d.pop_front() / d.pop_back() 弹出队首/队尾一个元素
    d.begin() 返回队头的迭代器
    d.end() 返回队尾下一个元素的迭代器

    */
}

set

  • set 有序集合

    • 元素都是排序好的
    • 没有重复的元素
#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;

    /*
    
    s.size() 返回集合大小
    s.empty() 返回集合是否为空
    s.insert(x) 将x插入集合
    s.count(x)  查询集合内有没有x,如果有返回1,如果没有返回0  
    s.erase(x) 将集合中值为x的元素删除
    s.begin() 返回set容器的第一个元素的地址
    s.end() 返回set容器的最后一个元素地址
    s.clear() 删除set容器中的所有的元素
    lower_bound(x) 返回大于等于的最小的数的迭代器
    upper_bound(x) 返回大于x的最小的数的迭代器
    
    */
}
  • multiset 有序多重集合
    • 元素都是排序好的
    • 有重复的元素
#include <iostream>
#include <set>
using namespace std;
int main()
{
    multiset<int> s;

    /*
    
    s.size() 返回集合大小
    s.empty() 返回集合是否为空
    s.insert(x) 将x插入集合
    s.count(x)  返回集合中元素x的个数
    s.erase(x) 将集合中值为x的元素删除
    s.clear() 删除set容器中的所有的元素
    lower_bound(x) 返回大于等于的最小的数的迭代器
    upper_bound(x) 返回大于x的最小的数的迭代器

    */
}

map

  • map 基于平衡二叉树(红黑树),动态维护有序序列,支持随机访问(时间复杂度\(O(\log_2{n})\)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
    map<string, int> m;

    /*
    
    size/empty/clear/begin/end均与set类似
    insert() 插入的数是一个pair<key_type, value_type>
    m.find(x) 在变量名为m的map中查找key为x的二元组

    */
}
  • multimap
#include <iostream>
#include <map>
using namespace std;
int main()
{
    map<int, int> m;

    /*
    
    size/empty/clear/begin/end均与set类似
    insert() 插入的数是一个pair<key_type, value_type>
    
    */
}

unordered_set和unordered_map

增删改查时间复杂度\(O(1)\)

#include <unordered_set>

unordered_set<int> a;       //哈希表实现,不能有重复元素
unordered_multiset<int> a;  //哈希表实现,可以有重复元素

#include<unordered_map>

unordered_map<int, int> a;  //哈希表实现

bitset

bitset 压位


#include <bitset>
bitset<10000> S;

/*

支持位运算:
~, &, |, ^ 
>> , <<
==, !=

count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
set() 把所有位置成1
set(k, v) 把第k位变成0
reset() 把所有位置成0
flip(k) 把第k位取反

*/
posted @ 2023-03-30 23:29  Ttree  阅读(16)  评论(0)    收藏  举报