队列
- 创建队列对象: queue<元素类型> 队列名;
- 队列添加元素: 队列名.push(元素名);
- 去掉队首元素: 队列名.pop();
- 访问队首元素: 队列名.front();
- 访问队尾元素: 队列名.back();
- 判断是否为空: 队列名.empty();
- 返回队列大小: 队列名.size();
优先队列
特点:
- 在队尾加入元素
- 从队头删除元素
- 每次去除的是具有最高优先权的元素(不一定先进先出)
基本用法
- 创建队列对象: priority_queue<元素类型> 队列名;
- 队列添加元素: 队列名.push(元素名);
- 去掉第一个元素: 队列名.pop();
- 判断是否为空: 队列名.empty();
- 返回队列大小: 队列名.size();
- 访问最优元素: 队列名.top();
运算符重写
struct pos {
int x, y, z;
bool operator < (const pos &p1, const pos &p2) {
return p1.z < p2.z;
}
};
栈
- 创建栈对象: stack<元素类型> 栈名;
- 栈顶添加元素: 栈名.push(元素名);
- 删除栈顶元素: 栈名.pop();
- 访问栈顶元素: 栈名.top();
- 判断是否为空: 栈名.empty();
- 返回栈的大小: 栈名.size();
栈和队列一样,没有clear之类的函数,需要循环出栈实现清空操作。
访问空栈的top()就会RE
Vector(向量||变长数组)
基本用法:
- 向量的定义: vector a;
- 向量的初始化: vector abc;//默认值为0
- 向量的初始化: vector abc(10);初始化了10个默认值为0的元素
- 向量的初始化: vector abc(10, 1); 初始化了10个值为1的元素
- 去向量首元素的迭代器: 向量名.begin();
- 取向量尾元素下一地址: 向量名.end();
- 取向量首元素的值: 向量名.front();
- 取向量尾元素的值: 向量名.back();
- 下标形式访问: int value0 = 向量名[0];
- 往尾部添加一个元素: 向量名.push_back(value);
- 删除尾部的第一个元素: 向量名.pop_back();
- 判断向量是否为空: 向量名.empty();
- 求向量元素个数: 向量名.size(); //实际元素个数,不是容量
- 翻转向量: reverse(a.begin(), a.end());
集合
特性:
- 有序
- 自动排序
- 支持插入、删除、查找等操作明并且严格控制在logn时间内完成,效率非常高
- 只能通过迭代器(iterator)访问
例如:
for(set<int>::iterator it = st.begin(); it != st.end(); it++)
{
printf("%d ", *it);
}
注意:set不支持it < st.end()的写法
基本用法
- set的声明: set s;
- set的清空: s.clear();
- 插入一个元素x: s.insert(x);//若果集合之前没有,则成功插入并排序,否则不插入
- 查询是否有元素x: int hav = s.count(x);/0或1
- 判断是否为空集: bool isempty = s.empty();
- 求集合元素个数: int n = s.size();
- 删除元素x: s.erase(x);
主要用途
自动去重并按升序排序
String类
对象声明
string str;
string strl = “qwer”;
求对象长度
str.length();
str.size();
两者几乎相等
string对象连接
直接用+和+=
String对象的比较:
直接用< <= == != >= > 比较
求子串
string s1 = “this is iOK”;
string s2 = s1.substr(2, 4); // s2 = “is i”
s2 = s1.substr(2); // s2 = “is is OK”;
插入字符串
string s1(“Limitless”), s2(“00”);
sl.insert(2, “123”); // s1 = “Li123mitless”
s1.insert(3, s2); // s1 = “Lil0023mitless”
s1.insert(3, 5, ‘X’); // s1 = “LilXXXXX0023mitless”
删除子串
string s1 = “Real Steel”;
s1.erase(1, 3); // s1 = “R Steel”
s1.erase(5); // s1 = “R Ste”
查找字符串
string str = “the apple thinks apple is delicious”;
string key = “apple”;
int pos1 = str.find(key);
int pos2 = str.find(key, 10);
Map
map是一个键值对(key/value)容器, 对于迭代器来说,可以修改value,而不能修改key。Map会根据key自动排序
map类型通常可以理解为关联数组:可使用键作为下标来获取一个值。关联的本质在于:元素的值与某个特定的键值相关联,而非通过元素在数组中的位置来获取。
基本用法
map<int, string> m;
m.count(k); //返回m中键值等于k的元素的个数(1或0)
m.find(k); //存在则返回指向该元素的迭代器,否则返回结束地址end();
m.erase(k); //删除m中键为k的元素, 返回删除元素的个数(1或0);
m.erase§; //从m中删除迭代器p所指向的元素
m.insert(e); //e是一个用在m上的value_type类型的值(一个pair)