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):由{键,值}对组成的集合,以某种作用于键
对上的谓词排列 -
容器适配器
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;
}
};
最近真的是和这类型的题目瞌上了,上回学位运算用异或解决的,再上一回用暴力,桶。