• STL的注意事项


    template是一个泛化的:
    使用template时开始仅仅是声明,具体的例如:k<int> a;叫做实例化
    显式实例化:类似k<int>a;明确指出哪种类型;
    隐式实例化:类似k<>a;没有说明类型,有编译器自动匹配
    特化:(个人认为就是自己制定template 中T的作用)

    操作符重载:

    复习stl:
    vector:

    list不适合查找;
    顺序容器和关联容器中都有的成员函数:
    erase:删除一个或多个元素
    clear:删除所有元素
    vecter,deque支持随机访问,支持迭代器的<,>,i=i+2的操作;
    stack,queue,priority_queue不支持迭代器
    list,set,mulset,map,mulmap为双向,不支持随机访问,无<,>,[]等;
    list在使用merge合并时,为从小到大排序的合并;
    l.splice(l.begin(),ll,ll.begin(), ll.end());

    map : 

    添加元素:m.insert(make_pair(str_copy, str));
    m.insert(pair<string ,string>(str_copy, str));
    (multimap与map共用;而m[str]=str1只适合map)
    可用迭代器遍历: if (m.count(p->first) == 1)
    s.push_back(p->second);
    (第一个为p->first ,第二个为p->second)

    set :
    if (S.size() == lens) ans++;else lens = S.size;
    可利用重复元素不进入set中,使用容器内个数是否相等来统计重复元素的 个数
    if (s.find(x)!=s.end()) 判断元素是否属于集合(因为如果不属于返回值为s.end())
    vector :
    查找里面的元素个数:m.size();
    list :
    Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

    string :
    str1.replace(pos, 3, s2);//replace 的第一参数为下标,第二为个数,第三个为要替换的东西
    pos = str1.find(s1, 0);//第一个参数为找的符合s1的字符串,第二个是str1开始查找的位置
    str.substr(begin,len);//返还str开始的下标长len的字符串
    str.replace(pos,3,s2)//用s2中的字符替换str[pos]开始后三个字符;
    数字转string:
    for (int i = 1; i <= n; i++)
    str += '0' + i;
    dequeue :
    q.push()//放在队列后
    q.front()//访问第一个
    q.pop()//删除第一个
    q.back()//访问最后一个
    注意:为顺序存储结构:
    queue :
    只能进行pop头,push 尾

    注意:为顺序存储结构:

    priority_queue:
    默认从大到小(less)注意:set从小到大(greater);
    从大到小:priority_queue<T,vector<T>,greater<T>> q;
    放入其中时,优先级大的放最上面(可查奶牛问题);

    algorithm:
    使用copy()之前要确保不溢出,string可以考虑reserve;
    next_permutation(全排列):
    do{cout << str << endl;} while (next_permutation(str, str + strlen(str), cmp));

    (可以想把办法使用字符串剪切操作输出全排列的位数)
    s = str.substr(0, m);
    cout << s << endl;
    while (next_permutation(str.begin(), str.end()))
    {
    if (s != str.substr(0, m))
    {
    s = str.substr(0, m);
    cout << s << endl;
    }
    }

    max_element(begin,end,mycmp);
    bool mycmp(const pair<int, int> p1, const pair<int, int > p2)
    {
    return p1.second < p2.second;
    }
    (对于mycmp,,,min_element返回最小值的地址)

    count(a, a + 5, 'a')//第一个参数为开始地址,第二个为结束的地址,第三个为要找的值
    getline(cin,s2,'j');//第一个为从哪读入,第二个为读给的对象,第三个为到那停止(默认换行停止);
    sort(vect.begin(),vect.end(),greater<int> ())//默认从大到小

  • 相关阅读:
    考研系列 HDU2241之早起看书 三分
    考研系列 HDU2242之空调教室 tarjan
    HDU5880 Family View ac自动机第二题
    HDU2222 Keywords Search ac自动机第一题
    hiho1514 偶像的条件 lower_bound
    HDU1800 hash+去前导0
    阿里云数据库自研产品亮相国际顶级会议ICDE 推动云原生数据库成为行业标准
    MaxCompute 图计算开发指南
    MaxCompute Mars开发指南
    基于MaxCompute的数仓数据质量管理
  • 原文地址:https://www.cnblogs.com/kangdong/p/8452948.html
Copyright © 2020-2023  润新知