恢复训练——STL笔记
\(set\)小结
-
\(set<type> s :\)定义一个集合\(s\);
-
\(s.clear() :\)清空集合\(s\)
-
\(s.insert(val) :\)往集合\(s\)中插入一个元素\(val\)
-
\(s.erase(val) :\)从集合中删除元素\(val\)
-
\(s.size() :\)返回集合\(s\)中元素个数
-
\(s.find(val) :\)从集合中寻找元素&val&,返回值为元素\(val\)所在位置迭代器
\(auto\) \(pos=s.find(val)\)
如果找不到则:
\(pos==s.end()\)
如果找到了则:
\(*pos==val\)
\(map\)小结
-
\(map<key\_type,data\_type> mp\):定义\(map\)型变量
-
\(mp.size()\):\(mp\)中的元素个数
-
\(mp.insert(make\_pair(v1,v2))\):向\(mp\)中插入元素,要注意的是\(mp\)也能像普通数组一样赋值:\(mp[v1]=v2\)
-
\(mp.erase(v1)\):删除\(mp\)中关键字是\(v1\)的元素
-
\(mp.find(v1)\):找到\(mp\)中关键字为\(v1\)的位置,找不到则返回\(mp.end()\)
若找到位置为\(auto\ pos\)
则\(pos->first==v1\)
\(pos->second=v2\)
或者\((*pos).first==v1\)
\((*pos).second==v2\)
\(string\)小结
回过神来发现自己对字符串的理解很浅,基本上当做字符数组在用。。。
-
\(string\) \(s :\)定义一个字符串\(s\)
-
\(s.size() :\)字符串\(s\)的长度
-
\(s=“abc” :\)字符串可以直接赋值
-
\(s=a+b:\)字符串的加减法
如:\(a=“abc”,b=“bcd”\) 则:\(s=“abcbcd”\) -
\(for(int\ i=0;i<s.size();++i)\ printf(“\%c”,s[i]);\) :字符串可以当做是字符数组来输出
更为规范点的(个人认为)应该是:\(for(auto\ i=s.begin();i<s.end();++i)\ printf(“\%c”,*i);\)
但是输入的时候不能像字符数粗一样一个元素一个元素的输入,因为其实在越界访问,要注意字符串变量是一段连续的内存空间。 -
\(cin>>s\):读入字符串,遇空格停止
\(getline(cin,s)\):读入字符串,遇换行符停止
但是要注意如果字符串上一行输入的是数字一定要加上换行符:\(scanf(“\%d\n”,\&n)\)
\(deque\)小结
\(deque\)与\(vector\)类似,只不过提供像队列一样的两端操作
\(deque<type> dque\) 定义一个变量
\(dque.push\_back(val)\) 序列末尾插入一个值
\(dque.pop\_front()\) 序列前段删除一个值
优先队列小结
\(priority\_queue<int> kque\)定义一个从大到小的优先队列
\(priority\_queue<int,vector<int>,greater<int>> kque\)定义一个从小到大的优先队列
struct Node
{
int val,idx;
bool operator < (const Node &x) const
{
return val<x.val;//从大到小
}
};
priority_queue<Node> kque;
\(kque.push(val)\)加入一个值
\(kque.pop()\)弹出队列头一个值
函数小结
\(sort\)小结
\(sort\)的范围为\([l,r)\)区间
下标从\(1\)开始: \(sort(a+1,a+1+n)\)
下标从\(0\)开始: \(sort(a,a+n)\)
\(unique\)小结
\(unique\)的范围为\([l,r)\)区间
下标从\(1\)开始: \(len=unique(a+1,a+1+n)-a-1\)
下标从\(0\)开始: \(len=unique(a,a+n)-a\)
二分查找小结
递增序列中:
\(upper\_bound(v.begin(),v.end(),val)\):返回第一个严格大于\(val\)的元素的迭代器
\(lower\_bound(v.begin(),v.end(),val)\):返回第一个大于等于\(val\)的元素的迭代器
递减序列:
\(upper\_bound(v.begin(),v.end(),val,greater<int>())\):返回第一个严格小于\(val\)的元素的迭代器
\(lower\_bound(v.begin(),v.end(),val,greater<int>())\):返回第一个小于等于\(val\)的元素的迭代器
查找最值小结
\(max\_element(v.begin(),v.begin()+k)\)查询一段区间的最大值,返回其迭代器,区间长度为\(k\),时间复杂度\(O(k)\)
\(min\_element(v.begin(),v.begin()+k)\)查询一段区间的最小值,返回其迭代器,区间长度为\(k\),时间复杂度\(O(k)\)

浙公网安备 33010602011771号