STL简要

STL介绍(简化程序)

STL组件
1.容器(Container) 管理某类对象的集合
2.迭代器(Iterator) 在对象集合上进行遍历
(注意:这些集合可能是容器,也可能是容器的子集。)
3.算法(Algorithm)处理集合内的元素,算法作用于容器。
(算法提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜 索和转换等操作。)
4.容器适配器(container adaptor)
5.函数对象(functor)

STL容器(顺序容器、关联容器和容器适配器):用于存放、容纳各种不同类型数据,它们实现为类模板。
(容器用于装各种类型的对象)

  • 顺序容器:
    1、向量(vector) :连续存储的元素
    2、列表(list) :由节点组成的双向链表,每个结
    点包含着一个元素
    3、双队列(deque) :连续存储的指向不同元素的指
    针所组成的数组

  • 关联容器
    4、集合(set): 由节点组成的红黑树,每个节点都包含着
    一个元素,节点之间以某种作用于元素对的谓词排列,没有
    两个不同的元素能够拥有相同的次序
    5、多重集合(multiset):允许存在两个次序相等的元素的
    集合
    6、映射(map):由{键,值}对组成的集合,以某种作用于键
    对上的谓词排列
    7、多重映射(multimap): 允许键对有相等的次序的映射
    (一个键可以对应多个值)

  • 容器适配器
    8、栈(stack) :后进先出的值的排列 ,LIFO
    9、队列(queue) :先进先出的执的排列 ,FIFO
    10、优先队列(priority_queue):元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

    STL容器元素的条件
    必须能够通过拷贝构造函数进行复制
    必须可以通过赋值运算符完成赋值操作
    必须可以通过析构函数完称销毁动作
    序列式容器元素的默认构造函数必须可用
    某些动作必须定义operator ==,例如搜寻操作
    关联式容器必须定义出排序准则,默认情况是重载
    operator <

  • vector
    vector类似于普通数组的方式存储类型T的对象;如果给vector添加一个或多个元素,其大小会按某个比例增长,以容纳新元素,所以其容量会大于其大小。

    vector容器内元素的访问:
    1.下标访问:下标从0到vi.size()-1
    2.迭代器访问
    vector常用函数:

pop_back() //删除尾部的元素,O(1)
push_back() //在尾部添加元素,O(1)
size()//获得元素个数,O(1),返回unsigned类型
insert()//插入元素,O(N)
clear()//删掉所有元素,O(N)
erase()//删掉单个元素,O(N)
erase(first,last)//清空一个区间里的所有元素
empty()//判断容器是否为空
max_size()//返回容器能容纳的最大元素数量
  • list
    list是一种双向链表。
    list的元素可以是任意类型T,但必须具备赋值和拷贝能力;list不支持随机存取,因此不提供下标操作符。
    在任何位置上执行元素的插入和移除都非常快。
    list包含了erase(), begin(), end(),insert(), push_back(), push_front()这些基本函数。

迭代器(一种类似指针的东西)
可遍历STL容器内全部或部分元素的对象
1.begin():返回一个迭代器,指向第一个元素
2.end():返回一个迭代器,指向最后一个元素之后*(作为迭代器末尾标志,不储存任何元素)*
3.rbegin():返回一个逆向迭代器,指向逆向遍历的第一个元素
4.rend():返回一个逆向迭代器,指向逆向遍历的最后一个元素之后

STL学习心得https://blog.csdn.net/weixin_44678167/article/details/105810555
(发现大佬的博客,简洁而全面,小丑竟是就是我自己

在这里插入图片描述
二分法

class Solution {
public:
    int getMissingNumber(vector<int>& nums){
        if(nums.empty()) return 0;
        int l=0, r=nums.size()-1;
        while (l<r) {
            int mid=l+r>>1;
            if (nums[mid]!=mid) r=mid;
            else l=mid+1;
        }
        if (nums[r]==r) r++ ;
        return r;
    }
};

最近真的是和这类型的题目瞌上了,上回学位运算用异或解决的,再上一回用暴力,桶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值