vector:(封装数组)
vector<int> r;
vector<vector<int>> r;
访问最后一个元素:r.rbegin() 或r.end()-1 或r.back()
添加元素:r.push_back();
删除最后一个元素:r.pop_back();
删除元素:r.erase(pos);删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器.
清空元素:r.clear();
注意:
1.若没有指定vector的大小,不能直接用[下标]访问。
在声明中指定大小:
vector<int> r(n,value);
vector<vector<int>> r(n1,vector<int>(n2,value));
也可以利用r.resize(n)+for循环指定大小。
2.memset不能处理vector封装的数组,若需赋同样的值,可以在声明中初始化。
———————————————————————————————————————————
set:(基于平衡二叉树(红黑树),动态维护有序序列)
set<int> rbb;
添加元素:rbb.insert();
!不能使用[下标]进行访问,不能使用比较运算符<或>,只有string,vector,map可以。
删除元素:rbb.erase();
查找元素:rbb.count();用来查找set中某个键值出现的次数。
自定义比较函数:
非结构体:set<int,greater<int>> rbb;(默认是set<int,less<int>> rbb;)
结构体:
struct Info
{
string name;
float score;
//重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const
{
//按score从大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it;
———————————————————————————————————————————
map:(基于平衡二叉树(红黑树),动态维护有序序列)
map<pair<int,string>> shu;
插入元素(pair类型):shu.insert();或shu[ ]= ;
删除元素:shu.erase();
map和set配置的都是双向迭代器,假设p为两种类型中的某一种类型的迭代器,则其只能进行++,--操作,只能用==或!=两种比较运算符。
unordered_map: (与map的区别:增删改查O(1)、无序)
unordered_map<string,int> shu;
插入元素:shu[" "]= ;
查询元素:shu[" "]返回其对应的值。
判断有无:shu.count();(如果存在具有给定键的值,则此函数返回1,否则返回0。)
基本上,map能用的,unordered_map都能用。
不支持lower_bound()/upper_bound()。
补充:unordered_map基于散列表,增删改查的时间复杂度一般为O(1),但最坏为O(n)!!!!
queue:(队列)
queue<int> que;
插入元素:que.push();
删除队列头部元素:que.pop();
访问队头:que.front();
访问队尾:que.back();
判断是否为空:que.empty();(若为空,则为真)
注意:queue不提供.clear();
priority_queue:(优先队列,优先级大的在队前,默认第二个参数为less<int>)
priority_queue<int> que;
插入元素(并排序)que.push();
访问队头:que.top();
若需要优先级相反,priority_queue<int,vector<int>,greater<int>> que;
———————————————————————————————————————————
string:
srting s;
复制字符串子串:s.substr(pos,len);(pos为起始位置,len为长度)
———————————————————————————————————————————
stack:
stack<int> sta;
添加栈顶元素:sta.push();
访问栈顶元素:sta.top();
删除栈顶元素:sta.pop();