C++算法常用类与函数总结

提示:文章为自用,可能有错误


前言

因为自己在写题的时候有时候java和c++换着写,就把一些函数记混了,所以这里总结一下自己使用


一、字符串相关函数

1.stringstream

这个类是在<sstream> 里的,通常用来类型转换和字符串拼接

用法一:类型转换

stringstream ss;
int num=520;
string str;
ss<<num;
ss>>str;
//str=ss.str()也可以
//<<是提取  >>是传出

用法二:凭借字符串
这里要注意str("")与clear()的区别
str("")可以清除sstream中内容,但是后面必须接上clear(),否则不能再添加内容

string str1="I ",str2="love ",str3="you!";
ss<<str1<<str2<<str3;

2.字符串比较

strcmp()与compare()

strcmp的函数定义注意这里比较的是char*,不是string
strcmp的函数
返回值有:
当 str1 < str2 时,返回为负数(-1);
当 str1 == str2 时,返回值= 0;
当 str1 > str2 时,返回正数(1)。

compare比较的是string,用法如下
在这里插入图片描述
注意:返回值是正数,0,负数。 不是1和-1

3.substr(pos,len)

该函数用来截取字符串,主要参数有pos(开始位置)和len(截取长度)
pos的缺省值是0,len的缺省值是(字符串的长度-pos),即不加参数是拷贝

string str="0123456789";
cout<<str.substr(2)<<endl;
//输出23456789
cout<<str.substr(2,3)<<endl;
//输出234

4.find()相关函数

全匹配:
1.find() 查找第一次出现的目标字符串
2.rfind()查找最后一次出现的目标字符串从前往后
非全匹配:
1.find_first_of() 从前面往后面查找子串中的某个字符最先出现的位置
2.find_last_of()从字符串的后面往前面搜索子串中的某个字符最先出现的位置
3.find_first_not_of() 找到第一个不与子串匹配的位置

二、vector

1.初始化方法

vector<int> vec1(10);
//容量设置为10
vector<int> vec2(10,1);
//初始化为10个1
vector<int> vec3(vec1);
//用另外一个vector初始化

2.常用函数

1.erase()

vec.erase(pos);
//删除pos位置的值
vec.erase(beg,end);
//删除[beg,end)区间的值

2.insert()

vec.insert(pos,num);
//在pos位置插入num
vec.insert(pos,n,num);
//在pos位置插入n个num

三 map

一个哈希算法容器,不能插入相同的key
没什么好讲的,主要是关注一下两种插入方法的区别
1.map["key"] = value;
2.map.insert(make_pair<>("key", "value"));
第一种插入相同的key时会覆盖,第二种不会插入

map会按照key的大小顺序从小到大进行储存
注意:key如果是string的话就是按照ASCAII码排序,即字典序
如果想要按key或者value的话,
我建议是直接这样vector<pair<int,int>> vec;
然后自己定义仿函数


四 优先队列(priority_queue)

定义:priority_queue<Type, Container, Functional>

Type就是数据类型
Cotainer就是构造的容器类型注意必须是数组实现的容器
Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

注意:自定义的数据类型时,别忘了自定义仿函数

五 STL常用函数

1.二分

  1. binary_search
  2. lower_bound
  3. upper_bound

传入的参数都是(arr[],arr[]+size,value)
value是要查找的值

2.计数count

  1. count()//这个没什么好说的
  2. count_if(gegin,end,cmp())

重点是自己定义的仿函数,这个用法就广了

3.查找区间

equal_range()返回first和last之间等于val的元素区间.返回值是一对迭代器

4.删除与替换

  1. remove_if() //注意不是真正删除
  2. replace_if()

总结

目前先写这么多吧,有时间的话把线段树的板子总结一下

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值