zoukankan      html  css  js  c++  java
  • C++常用函数

    1. string转int类型

    采用标准库cstdlib中atoi函数,<cstdlib>是C++里面的一个常用函数库
    #include<cstdlib>
    string str = "55";
    int tmp = std::atoi(str.c_str());
    

    2.内置类型转string

    比如:int 转 string
    int tmp = 55;
    cout << std::to_string(tmp);
    

    3.判断字母/数字:#include<cctype>

    (1)isalpha() : 用来判断一个字符是否为字母,如果是字母则返回非零,否则返回零

    (2)isalnum() : 用来判断一个字符是否为数字或者字母

    (3)isdigit() : 用来判断一个字符是否为数字

    (4)islower():用来判断一个字符是否为小写字母

    (5)isupper():用来判断一个字符是否为大写字母

    (6)tolower():把字符串都转化为小写字母

    (7)toupper():把字符串都转化为大写字母

    4.STL通用算法函数   #include<algorithm>

    (1) 反转元素的次序 reverse() : 会将区间[begin, end)内的元素全部逆序

    string str("hello");
    // 反转h后面的元素变成holle
    reverse(str.begin()+1, str.end());
    

    (2)以很好的平均效率排序sort() :  是一种根据实际数据智能选择排序算法的函数,sort()会将区间[beg,end)内的元素排序,默认升序

    bool cmp (int a, int b)
    {
        return a > b; // 降序排列
    }
    int array[5] = {1, 2, 3, 4, 5};
    sort (array, array + 4, cmp); //通过自定义cmp函数将其改为降序排列
    
    输出: 4 3 2 1 5
    

    (3)string类型总结:#include<string>

    1.插入操作
    str.insert(pos, s) //在下标pos处插入字符串s
    
    2.删除操作
    (1)删除单个元素 str.erase(iter) //删除迭代器iter指定的元素
    (2)删除区间元素
    1⃣️str.erase(first_iter, last_iter)  //删除迭代器[first_iter, last_iter) 之间元素
    2⃣️str.erase(pos, length)    //删除下标pos开始长度为length的区间元素
    
    3.截取字符串
    string newstr = str.substr(pos, length)    //截取下标pos开撕长度为length的子串
    
    4.查找元素
    (1)str.find(str2) //如果str2是str的子串,返回首次出现的位置,否则返回string::npos
    (2)str.find(str2, pos)    //从pos位置开始查找
    拓展: rfind():从后往前找
     

    (4)queue队列总结:#include<queue>

    queue<int> a;  //申明一个空队列
    
    a.empty() //如果为空则返回1,不为空返回0
    a.size()    //队列元素个数
    a.front()    //指向队首元素的引用
    a.back()    //指向队尾元素的引用
    a.push(t)    //队尾插入元素
    a.pop()        //删除队首元素
    

    priority_queue:和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队

    //降序队列(大顶堆)默认
    priority_queue<int, vector<int>, less<int> > q;
    =>priority_queue<int> q;
    
    //升序队列(小顶堆)
    priority_queue<int, vector<int>, greater<int> > q;
    
    基本操作:
    1.top 访问队头元素
    2.empty 队列是否为空
    3.size 返回队列内元素个数
    4.push 插入元素到队尾 (并排序)
    5.emplace 原地构造一个元素并插入队列
    6.pop 弹出队头元素
    7.swap 交换内容

    (5)stack 栈总结 :#include<stack>

    stack<int> a;
    
    a.empty()  //栈为空返回true
    a.size()    //栈中元素数目
    a.top()      //返回指向栈顶元素的引用
    a.push(t)    //在栈顶插入元素x
    a.pop()    //删除栈顶元素
    

    (6)set 集合总结:#include<set>

    【1】储存同一类型的数据元素(这点和vector、queue等其他容器相同);
    【2】每个元素的值都唯一(没有重复的元素);
    【3】根据元素的值自动排列大小(有序性);
    【4】无法直接修改元素;
    【5】高效的插入删除操作;

    set<int> a; //申明
    
    a.begin()    //返回指向第一个元素的迭代器
    a.end()      //返回指向超尾的迭代器
    a.clear()    //清空a
    a.empty()    //判断a是否为空
    a.size()        //返回a中元素个数
    a.count(x)    返回a中元素x的个数
    a.insert(x)    //插入元素
    
    a.erase(x)    //删除值为x的元素
    a.erase(iterator)    //删除迭代器指向的元素
    a.erase(first, second)    //删除区间内的元素,左闭右开
    

    (7)字典map/unordered_map总结

    map的底层实现是RB-Tree(红黑树),因此会根据键值自动进行排序,默认是字典序。而unordered_map的底层实现是哈希。因此,如果只是单纯的用来创建某种映射关系的话,推荐unordered_map,效率会高一些。

    map是一种key-value型容器,其中key是关键字,起到索引作用,而value就是其对应的值。与set不同的是它支持下标访问。

    map<string, int> m;    //申明一个key为string, value为int的字典

    参考博客:https://blog.csdn.net/fantacy10000/article/details/95974634?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base 

  • 相关阅读:
    如何更改SQL Server2008默认数据库的存储路径
    虚拟内存页面文件pagefile.sys(棉文件)改变存放位置
    Redis热点数据高频访问问题以及解决方案
    gc日志收集和分析
    oauth2中client_id_to_access数据膨胀问题
    Redis慢查询日志
    24个Jvm面试题总结及答案
    springboot-使用assembly进行项目打包
    volatile关键字解读
    redis的zset结构跳表
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/15175194.html
Copyright © 2011-2022 走看看