容器:1.序列式?vector、deque、list、stack、queue(与插入时间地点有关)
各种容器间的很多操作和函数的使用是相通的,当然也有不同,记忆时重点关注相通和特殊的。
动态数组
#include<vector>
定义变量Vector<int>v1;
带参定义vector<int>v1(array,array+n);
?????????Vector<int>v2(n,m) ?存放n个m元素
?????????Vector<int>v3(v1) ???用v1初始化为v3
赋值:v1.assign(array.begin(),array.end());左闭右开
V1.assign(n,m)
V1=v2
V1.swap(v2)
容器大小:v1.size()
V1.empty(); 返回bool型
v1.resize(num,0) 重新指定长度num,默认多出来的值为0
??????访问:下标法 ?#下标越界可能导致程序异常终止
??????迭代器:
??????at函数:v.at(下标) ?越界会报错
插入:v.insert(pos,elem) ?pos不能是下标是指针
v.insert(pos,n,elem)
v.insert(pos,begin,end) ??左闭右开,如数组区间
末尾插入:v.push_back(elem);
末尾移除:v.pop_back();
删除:v.erase(elem)? ? ? ? v.erase(it1,it2)? it为迭代器或下标(it2取不到)
遍历元素的数据类型
统一了对容器的访问方式 迭代器自增访问
vector<int>::iterator iter; 定义一个inter迭代器
Vector<int>::reverse_iterator iter1 反向迭代器
随机访问迭代器:可以移动多个位置
end()返回容器最后一个元素后一个元素的迭代器
*iter 返回迭代器对应值
for(it=v.begin();it!=v.end();it++); ?
?双端数组
#include<list>
it++ √
it+5 ×
list<int>lst;
头尾操作
lst.push_back();
Lst.push_front();
lis.pop_back();
Lis.pop_front();
List<int>::iterator it;
List<int>lst(3,5);
List<int>lst(begin,end);
List<int>lst(lst1);
#基本和vector操作方式相同
List.clear();
List.erase(begin,end)
List.erase(pos); ?pos为迭代器
Lst.remove(elem);
栈相对简单,记住下面核心4个即可
Stk.top()返回栈顶元素
Stk.pop()删除栈顶元素
Stk.push()插入元素到栈顶
Stk.size()
q.push_back(elem)
q.pop() 弹出队头
q.front()
q.back()
集合容器 元素唯一 ?主要实现去重
自动排序(默认升序),不能指定插入位置
Set.insert(elem);仅能这样插入
拷贝构造与赋值和其他容器相同
?????Set<int,greater<int>>s;降序排列
查找
Set.find(elem) #找不到返回end
Set.count(elem)
Set.lower_bound(elem)
Set.upper_bound(elem)
键值对
Map<int,char>map1;
Map<string,int>map2;
插入(三种方法)
获取键对应的值
Swap();
Reverse();
Unique();
Sort();
Lower_bound();
Upper_bound();
Max();min();
Max_element();min_element();
Pre_permutation();next_permutation();
Abs();exp();
Log();pow();
Sqrt();
Ceil();floor();
Round();
Gcd();lcm();
????????
???????????????