常用的STL

常用的STL

1.vector 变长数组,倍增的思想

vector<int> a(10, 3);

    a.size();
    a.empty();

    for(int i = 0; i < 10; i++) a.push_back(i);
    for(int i = 0; i < a.size(); i++) cout << a[i] << ' ';
    for(vector<int>::iterator i = a.begin(); i != a.end(); i++) cout << *i << ' ';
    for(auto x : a) cout << x << ' ';

    size(), 返回元素个数
    empty(), 返回是否为空
    clear(), 清空
    front()/ back(), 返回第一个数/返回最后一个数
    push_back()/ pop_back(), 向最后插入一个数/删除最后一个数
    begin()/end(),0个数和最后一个数的下一个数
    vector支持随机存取
    vector支持比较运算,按字典序

2.pair<int, int>

​ first, 第一个元素
​ second, 第二个元素
​ 支持比较运算,以first为第一关键字,以second为第二关键字,按照字典序

pair<int, string> p;
	cout<<p.first<<" "<<p.second;
	p = make_pair(10, "yxc");
	p = {20, "abc"};
pair<int, pair<int, int>> p;

3.string 字符串, substr(), c_str()

​ size()/length(), 返回字符串长度
​ empty()
​ clear()

string a = "yxc";

    a += "def";
    a += 'c';

    cout << a << endl;
    cout << a.substr(1, 2) << endl;

    printf("%s\n", a.c_str()); //printf方法输出string

4.queue 队列

先进先出,不允许顺序遍历

queue<int> q;
q = queue<int>(); //想要清空直接重新构造即可
empty():判断队列是否为空
size():返回队列的实际元素个数
front():返回队头元素
back():返回队尾元素
push(elem):元素elem进队
pop():元素出队
没有clear(),

5.priority_queue 优先队列(堆),默认大根堆

优先队列是一种受限访问操作的存储结构,元素可以以任意顺序进入优先队列。

priority_queue<int> heap;
heap.push(-x); //小根堆

priority_queue<int, vector<int>, greater<int>> heap; //小根堆

empty():判断优先队列是否为空
size():返回优先队列的实际元素个数
push(elem):元素elem进队
top():获取队头元素
pop():元素出队
没有clear()

6.stack 栈

stack容器只有一个出口,即栈顶,可以在栈顶插入(进栈)和删除(出栈)元素,而不允许顺序遍历。

stack<int> s;

empty():判断栈是否为空
size():返回栈的实际元素个数
push(elem):元素elem进栈
top():返回栈顶
pop():元素出栈
没有clear(),
   

7.deque 双端队列

deuqe<int> dq1; 
empty():判断双端队列是否为空
size():返回双端队列的元素个数
front():取队头元素
back():取队尾元素
push_front(elem):在队头插入元素elem
push_back(elem):在队尾插入元素elem
pop_front(elem):删除队头一个元素
pop_back(elem):删除队尾一个元素
erase():从双端队列中删除一个或几个元素
clear():删除双端队列的所有元素
begin():引用容器的第一个元素
end():引用容器的最后一个元素后面的一个位置
rbegin():引用容器的最后一个元素
rend():引用容器的第一个元素前面的一个位置

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

set<int> S;
multiset<int> MS;   
map<string, int> a;
    a["yxc"] = 1;
    cout << a["yxc"] << endl;
    size(),
    empty(),
    clear(),
    begin()/end() 支持++/-- 返回前驱和后继 时间复杂度O(logn)
set 不能有重复元素
    insert() 插入一个数
    find() 查找一个数
    count() 返回某一个数的个数
    erase()
        输入一个数x,删除所有x  O(k + logn)
        输入一个迭代器,删除这个迭代器
    lower_bound()/upper_bound()
        lower_bound(x) 返回大于等于x的最小的数的迭代器
        upper_bound(x) 返回大于x的最小的数的迭代器
multiset 可以有重复元素

map/multimap
    insert() 插入的数是一个pair
    erase() 插入的参数是pair或者迭代器
    find()
    支持随机存储 时间复杂度O(logn)
    lower_bound()/upper_bound()

unorder_set,unordered_map,unorder_multiset,unordered_multimap 哈希表

和上面类似,增删改查的时间复杂度是O(1)
不支持lower_bound()/upper_bound(),不支持迭代器的++/--

9.List 链表

list<int> l1;                   // 定义元素为int的链表l1
list<int> l2(10);               // 指定链表l2的初始大小为10个int元素
list<double> l3(10, 1.23);      // 指定dq3的10个初始元素的初值为1.23
list<int> l4(a, a + 5);         // 用数组 a[0,·· 4] 共5个元素初始化l4
    empty():判断链表是否为空
    size():返回链表的元素个数
    push_back():在链表尾部插入元素
    pop_back():删除链表的最后一个元素
    remove():删除链表中所有指定值的元素
    erase():从链表中删除一个或几个元素
    unique():删除链表中相邻的重复元素
    clear():删除链表的所有元素
    insert(pos, elem):在pos位置插入元素elem
    insert(pos, n, elem):在pos位置插入n个元素elem
    reverse():反转链表
    sort():对链表中的元素排序
    begin():引用容器的第一个元素
    end():引用容器的最后一个元素后面的一个位置
    rbegin():引用容器的最后一个元素
    rend():引用容器的第一个元素前面的一个位置

10.bitset 压位

bitset<10000> s; //长度为10000的bitset
	~,&,|,^
    >>,<<
    ==,!=
    支持随机存储
    count() 返回有多少个1
    any() 判断是否至少有一个1
    none() 判断是否全为0
    set() 把所有位置成1
    set(k, v) 将第k位变成v
    reset() 把所有位变成0
    flip() 等价于~
    flip() 把第k位取反
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值