/*
vector 变长数组
定义一个长度为10的vector
vector[HTML_REMOVED] a(10);
定义一个长度为10的vector 并且都是3
vector[HTML_REMOVED] a(10,3);
定义10个vector
vector[HTML_REMOVED] a[10];
返回元素个数 是否为空 O(1) 清空 返回vector第一个数 返回vector最后一个数
size() empty() clear() front() back()
插入最后一个数 删除最后一个 第0个数 最后一个数的后面一个数(迭代器)
push_back() pop_back() begin()/end
for(int i = 0; i < a.size(); i ) cout << a[i] << ‘ ‘;
可以把这一串写成auto
for(vector[HTML_REMOVED]::iterator i = a.begin(); i != a.end(); i ) cout << *i << endl;
for(auto x: a) cout << x << ‘ ‘;
支持比较运算
系统为某一程序分配空间时 与空间大小无关与申请次数有关
所以变长数组要尽量减少申请空间的次数(倍增)
pair[HTML_REMOVED] 可以存储一个二元组
pair[HTML_REMOVED]p;
取第一个元素 取第二个元素
p.first p.second
支持比较运算 以first为第一关键字 以second为第二关键字
p.make_pair(10,”tzy”);
p = {20,”abc”};
存三种
pair[HTML_REMOVED]>p
string 字符串 substr() c_str()
可以相加
string a = “tzy” a+=”def”
一个参数返回从x到最后位置 两个是切片 c_str()
substr(1,2) 返回起始地址
queue push() front() back() pop()
没有clear函数 如果想清空可以重新构造 q = queue[HTML_REMOVED]()
priority_queue 优先队列 = 堆 默认大根堆
插入一个元素 返回堆顶元素 弹出堆顶元素
push top() pop()
如果想定义小根堆 方法一:加入负数 方法二:直接定义 priority_queue[HTML_REMOVED],greater[HTML_REMOVED]>heap
stack push() top() pop()
deque 双端队列 clear() front() back() push_back()/pop_back() push_front()/pop_front() begin()/end()
缺点 慢
set map multiset multimap 基于平衡二叉树(红黑树) 动态维护有序序列
set/multiset
set 不可以有重复元素 但是multiset可以
set 支持insert() find()查找一个数 count()返回某一个数的个数
erase() (1)输入的是一个数x 删除所有x O(k+logn)
(2)输入一个迭代器 删除这个迭代器
返回>=x的最小的数的迭代器 返回>x的最小的数的迭代器
lower_bound() upper_bound()
map/multimap
insert erase find
unordered_set unordered_map unordered_multiset unordered_multimap 哈希表
用法同上 但是增删改查时间复杂度O(1)
不支持lower_bound() upper_bound()
bitset 压位
括号写个数 长度为10000
bitset<10000>s
~ & | ^ count返回有多少个1
判断是否至少有一个1 是否全为0
any none()
把所有位置成1 把第k位变成v 把所有位变成0 flip等价于~
set() set(k,v) reset flip
*/