恢复训练——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)\)

posted @ 2022-10-27 13:24  模拟退火  阅读(41)  评论(0)    收藏  举报