C++ STL库 使用详细总结 #include< algorithm >库函数 目录 #include< algorithm >库函数 1.sort排序 函数原型:sort(起始地址, 末尾地址, cmp),其中cmp是可以⾃⼰定义的函数名. 默认从⼩到⼤ sort(a,a+5);// 需要⾃⼰构造函数 sort(a,a+5,cmp);// 排序 sort(vec.begin(),vec.end());//vector ⾃定义构造函数排序 sort(vec.begin(),vec.end(),cmp);//vector 2.reverse倒转 函数原型:reverse(起始地址,末尾地址)。 普通数组 reverse(a,a+5);// 倒转 reverse(vec.begin(),vec.end());//vector 3.unique去重 注意:unique去重需要先⽤sort排序,去重后重复的素会放在数组尾端并且缩减数组长度,需要⽤erase函数实现真正删除。 数组 sort(a,a+5);// 去重返回尾地址 int pos =unique(a,a+5);//unique pos 从尾地址到最后空间进⾏删除 erase(pos,a+5);// ————————————————- sort(vec.begin(),vec.end());//vector 去重返回尾地址 int pos =unique(vec.begin(), vec.end());//unique pos 从尾地址到最后空间进⾏删除 vec.erase(pos, vec.end());// 4.⼆分查找 函数原型: 1.lower_bound(起始地址, 末尾地址,x):查找第⼀个⼤于等于x⽬标值的位置 2.upper_bound(起始地址, 末尾地址,x):查找第⼀个⼤于x⽬标值的位置 3.binary_search(起始地址, 末尾地址,x):查找x是否存在于数组或中,找到返回true,否则返回false 数组 int pos1=lower_bound(a,a+5,2)-a;// int pos2=upper_bound(a,a+5,2)-a; int flag=binary_search(a,a+5,2); ———————————————————– int pos1=lower_bound(vec.begin(),vec.end(),2)-vec.begin();//vector int pos2=upper_bound(vec.begin(),vec.end(),2)-vec.begin(); int flag=binary_search(vec.begin(),vec.end(),2); 5.find函数查找 函数原型: 1.s1.find(s2):在s1字符串中查找s2,查找到返回第⼀个字符的位置,查找失败返回s1.npos,这个其实是⼀个数字 ,即s1.npos= 2.set.find(a):查找a是否在set中,如果找不到,返回set.end() 2.set.count(a):本来是计算a出现的次数,但是由于集合中是没有重复素的,于是count函数也就被作为查找函数了,因为a只能出 现1次或者0次,查找成功,返回1;查找失败返回0 3.map.find():主要⽤于查找key是否存在map中,不存在返回map.end(),⽤法和set⼀样 6.字符串和整型的互换 函数原型: 1.stoi(s):将字符串s转化成整形,s为string类型,即string –> int 类型,可以先⽤s.c_str()⽅法把string类型转化为const char 2.atoi(s):将字符串转化为整形,但s为const char 类型,再转为整 形,即const char –> int 3.stringstream:需要头⽂件#include< sstream>,可将只含数字的字符串转化为整形,也可将数字和⼩数点组成的字符串转化为浮 点型,即string –> int, string –> double 4.stringstream:需要头⽂件#include< sstream>,可将整形或浮点型数字转化为字符串,即int –> string, double –> string 5.to_string():可将整形转化为字符串,不推荐将浮点型转化为字符串 7.排列组合 next_permutation(),求当前排列的下⼀个全排列 prev_permutation(),求当前排列的上⼀个全排列 #include< vector >库函数 1.vector介绍 vector和built-in数组类似,拥有⼀段连续的内存空间,能⾮常好的⽀持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间 进⾏插⼊和删除会造成内存块的拷贝,另外,当插⼊较多的素后,预留内存空间可能不够,需要重新申请⼀块⾜够⼤的内存并把原来的数 据拷贝到新的内存空间。这些影响了vector的效率,但是实际上⽤的最多的还是vector容器,建议⼤多数时候使⽤vector效率⼀般是不错 的。 创建vector对象,vector< int > vec; vector的函数部分适⽤于string字符串 / / 2.vector的功能函数 在 的最后位置添加⼀个数据 vec.push_back();// vector 去掉 的最后⼀个数据 vec.pop_back();// vector 得到编号位置的数据 vec.at();// 得到 头的指针 vec.begin();// vector 得到 的最后⼀个单 的指针 vec.end();// vector +1 得到 最前⾯的值 vec.front();// vector 得到数组的最后⼀个单的引⽤ vec.back();// 得到 最⼤可以是多⼤ 区别与 vec.max_size();// vector / vec.size() 当前 分配的⼤⼩ vec.capacity();// vector 当前使⽤数据的⼤⼩ vec.size();// 改变当前使⽤数据的⼤⼩,如果它⽐当前使⽤的⼤ 则填充默认值 vec.resize();// , 改变当前 所分配空间的⼤⼩ vec.reserve();// vecotr 删除指针指向的数据项 vec.erase();// 清空当前的 vec.clear();// vector 将 反转后的开始指针返回 其实就是原来的 vec.rbegin();// vector ( end-1) 将 反转构的结束指针返回 其实就是原来的 vec.rend();// vector ( begin-1) 判断 是否为空 为空返回 否则返回 vec.empty();// vector , true, false 与另⼀个 交换数据 vec.swap();// vector #include< stack >堆栈库函数 1.stack介绍 堆栈是⼀个线性表,插⼊和删除只在表的⼀端进⾏。这⼀端称为栈顶(Stack Top),另⼀端则为栈底(Stack Bottom)。堆栈的素插⼊称为 ⼊栈,素的删除称为出栈。由于素的⼊栈和出栈总在栈顶进⾏,因此,堆栈是⼀个后进先出(Last In First Out)表,即 LIFO 表。为了 严格遵循堆栈的数据后进先出原则,stack 不提供素的任何迭代器操作,因此,stack 容器也就不会向外部提供可⽤的前向或反向迭代器 类型。 2.stack的函数 创建stack对象,stack< int >s 堆栈为空则返回 否则返回 s.empty();// true, false 移除栈顶素 s.pop();// 在栈顶增加素 s.push();// 返回栈中素数⽬ s.size();// 返回栈顶素 s.top();// #include< queue >队列库函数 1.queue正常队列 创建queue对象,queue< int >q 将素接到队列的末端; q.push();// 弹出队列的第⼀个素,并不会返回素的值; q.pop();// 访问队⾸素 q.front();// 访问队尾素 q.back();// 访问队中的素个数 q.size();// 队列为空返回 否则返回 q.empty();// true, false 2.priority_queue优先队列 创建priority_queue对象,priority_queue< int >q;//默认⼤顶堆 升序队列 ⼩顶堆 priority_queue <int,vector<int>,greater<int>> q;// , 降序队列 ⼤顶堆 priority_queue <int,vector<int>,less<int>>q;// , deque的构造函数 创建deque对象,deque< int >d 创建⼀个空 deque();// deque 创建⼀个 素个数为 deque(int nSize);// deque, nSize 创建⼀个 素个数为 且值均为 deque(int nSize,const T& t);// deque, nSize, t 复制构造函数 deque(const deque &);// deque的功能函数 ⾸素地址 d.begin();// 尾素地址 d.end();// 插⼊ 末端 d.push_back();// deque 插⼊ ⾸端 d.push_front();// deque 为空返回 ,否则返回 d.empty();//deque true false 将 的长度改为 ,超出的素将被删除 d.resize(n);// deque n 清空 d.clear();// deque 将 的 到 中的素赋值给 d.assign(a.begin(),a.end());// a begin end deque 等同于 交换两个队列 d.swap(d2);// swap(d,d2); 逆置 d.reverse();// deque 将 和 合并并且变成升序 默认升序 d.merge(d2);// deque d2 ( ) 将 和 合并并且变成降序 d.merge(d2,greater<int>());// deque d2 头部插⼊从 开始到结尾的素 d.insert(d.begin(),d2,begin(),d2.end());//deque d2 在 开始位置插⼊⼀个 d.insert(d.begin(),n);// deque n 在 开始位置插⼊ 个 d.insert(d.begin(),x,n);// deque x n 将 第⼀个素删除 d.erase(d.begin());// deque 将 从 到 删除 d.erase(d.begin(),d.end());// deque begin() end() 以下操作需要 前置查看 是否为空 // empty deque 头部素 d.front();// deque 最后⼀个素 d.back();// deque 当 为空时 和 不会报错 // deque front() back() 删除最后⼀个素 d.pop_back();// 删除第⼀个素 d.pop_front();// 当 为空是调⽤ 和 会使程序崩溃 // deque pop_back() pop_front() #include< ctype.h>字符串判断库函数 1.ctype介绍 该函数库包含1.isalpha() 2.isalnum() 3.islower() 4.isupper四个函数 2.ctype函数 判断字符是否为字母 是返回 否则返回 isalpha();// , 1, 0 判断字符是否为数字或者字母 也就是说判断⼀个字符是否属于 isalnum();// , a~z||A~Z||0~9 判断字符是否为⼩写字母 是否属于 islower();// , a~z 判断字符是否为⼤写字母 是否属于 isupper();// , A~Z #include< stdlib.h>⽹络库函数 1.stdlib介绍 ⽬前接触到有改写字符的⼤⼩写。 2.stdlib函数 将字符转化为⼩写 tolower();// 将字符转化为⼤写 toupper();// #include< math.h>数学库函数 1.取整函数 向上取整 ceil();// 向下取整 floor();// 四舍五⼊取整
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/44663.html