C++ STL

 vector

 vector可以理解为变长的动态数组,内部基于倍增思想

#include<vector>      头文件
vector<int>a             一个动态变化的数组a
vector<int>v[100]     一个第一维是100,第二维动态变化的数组
struct emmm {...
}
vector<emmm>c        结构体类型也可以在vector中使用

size/empty

size函数返回的是vector的长度

empty函数返回的是一个bool类型,表示vector是否为空

clear

将vector清空

迭代器

迭代器像一个指针,可以用*解除引用

一个保存int类型的迭代器声明方式:

vector<int>::iterator a;

(至于迭代器小编本身也不是很会 在这里不多说了)

queue

queue里面主要包含循环队列queue和优先队列priority_queue

声明:

queue<int>q;

prtority_queue<int>q;

prtority_queue<pair<int, int> >q;

 queue

入队(从队尾)push   如q.push(x);

出队(从队头)pop     如q.pop();

队头元素 front 如 int a = q.front();

队尾元素  back 如 int b = q.back();

prtority_queue

其实 优先队列可以理解为一个大根二叉堆

重载<运算符

如果你使用的是自定义类型 那么你需要重载运算符了

struct emmm{
   int a, b;    
};
bool operator<(const ...&a, const...&b) {
    return ....
}

小根堆

主要有3种,可我只会2种

1:proority_queue<int, vector<int>, greater<int> >q;

一个int类型的优先队列可以通过上面来定义

2:在插入时直接插入那个数的相反数 用的时候再取相反数

deque

此为双端队列 是一种支持双端插入或删除元素的线性储存空间 类似于vector和queue的结合

头/尾迭代器 :begin/end

队头/尾元素:front/back

队头/尾入队:q.push_front/back

队头/尾出队:q.pop_front/back

清空队列:q.clear();

 set

set为集合 包括set和multiset两部分 前者是“有序集合”, 后者是“有序多重集合”

声明

set<int> s;

struct emmm{...}; set<emmm> s;

multiset<double> s;

insert

s.insert(x)把一个元素x插入到集合s中

set中 如果已经存在x 则不会重复插入 无影响

find

s.find(x)在集合s中查找等于s的元素,并返回该元素的迭代器

count

s.count(x)返回集合中等于s的元素的个数

map

map为映射

声明

map<int, int>q;

map<string, int>q;

map<long long, bool>vis;

map<make_pair<int, int>, vector<int> >test;

algorithm

reverse

翻转一个vector

reverse(a.begin(), a.end());

翻转一个数组

reverse(a + 1, a + n + 1);

random_shuffle随机打乱

用法同reverse

sort快排

将一个int数组从小到大排序

sort(a + 1, a + n + 1);

自定义排序 例如从大到小

int a[100];

bool cmp(int a, int b){return a > b;}

sort(a + 1, a + n + 1, cmp);

自定义结构体vector排序

struct rec {int id, x, y};

vector<rec> a;

bool operator <(const rec &a, const rec &b) {

  return ...;
}

sort(a.begin(), b.begin());

lower_bound/upper_bound

lower_bound的第三个参数x,在其中进行二分查找 返回指向第一个大于等于x的元素的位置的迭代器(或指针)

upper_bound的用法和lower_bound相似 唯一的区别是upper_bound查找的是第一个大于x的位置

要求是有序序列

在有序int数组中查找第一个大于等于x的最小整数的下标

int i = lower_bound(a + 1, a + n + 1, x) - a;

转载于:https://www.cnblogs.com/-sheldon/p/11394791.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值