浅沫记忆 发表于 2021-12-28 17:21:09

C++ 算法基础知识总结

前言
打算刷leetcode,有些放不下Python和C++这两种语言,常有些人说用Python刷算法是作弊。感觉有些道理吧,这不认真复习一下C++的基础。

基础
vector(变长数组)
头文件:#include<vector>
使用:vector <typename> name;
访问方式:下标访问和迭代器访问
迭代器访问:
for(vector<int>::iterator it = vi.begin();it != vi.end();it++)
{
迭代部分
}
常用方法:​​push_back(x)​​、​​pop_back()​​、​​size()​​、​​clear()​​,
​​insert(it,x)​​、​​erase(地址)​​
set(内部自动有序且去重)
头文件:#include<set>
使用:set<typename> name;
访问方式:只能通过迭代器访问,同上
常用方法:​​insert(x)​​、​​find(value)​​、​​size()​​、​​clear()​​、​​erase(地址)​​
string(字符串)
头文件:#include<string>
使用:string str = “abcd”;
访问方式:下标或迭代器访问(读入和输出用cin和cout)
特殊运算:+=(拼凑)、==、!=、<、<=、>、>=(这个不错)
常用方法:​​insert(pos,string)​​、​​substr(value)​​、​​size()/length()​​、​​erase(地址)​​
map(映射)
头文件:#include<map>
使用:map <typename1,typename2> mp;
特殊用法:map <typename1,typename2>::iterator it;
it->first;//访问键
it->second;访问值
访问方式:下标或迭代器访问
特殊运算:+=(拼凑)、==、!=、<、<=、>、>=(这个不错)
常用方法:​​insert(pos,string)​​、​​substr(value)​​、​​size()/length()​​、​​erase(地址)​​
queue(队列)
头文件:#include<queue>
使用:queue <int> q;
只能通过front()访问队首元素,back()访问队尾(先empty()判断是否为空)
常用方法:​​push()​​、​​pop()​​、​​empty()​​、​​size()​​
stack(栈)
头文件:#include<stack>
使用:stack <typename> name;
常用方法:​​push()​​、​​top()​​、​​pop()​​、​​empty()​​、​​size()​​
priority_queue(优先队列)
注:默认优先级最大的先出
头文件:#includ<queue>
使用:priority_queue<typename> name;
常用方法:​​push()​​、​​top()​​、​​pop()​​、​​empty()​​、​​size()​​
使用场景:可用于贪心问题(不用排列)
priority_queue<int,vertor<int>,less<int> > q;(less<int>数字大优先级大)
priority_queue<int,vertor<int>,greater<int> > q;(less<int>数字小优先级大)
结构体的优先级问题(使用友元类)
struct fruit {
string name;
int price;
//注意:只能重载<,而且优先队列的返回符号与sort的cmp相反
friend bool operator < (fruit f1,fruit f2){
    return f1.price < f2.price;
}
}
注意:使用top函数前必须用empty()判断队列是否为空

algorithm头文件
头文件:#include<algorithm>
函数: max()、min()、abs()
swap(x,y); //用来交换x和y的值
reverse(it,it2);//将数组进行反转
sort(a,a+6);//默认递增
stable_sort(a,a+6);//稳定排序
也可以自定义比较函数cmp
bool cmp(double a, double b){
return a > b;
}
结构体数组的排序
bool cmp(node a,node b){
return a.x > b.x;
}
find(开始地址,结束地址,查找数);//查找函数(一般用于verctor的查找)
主要实现在容器内查找指定元素,并且这个元素必须是基本数据类型的。
查找成功返回一个指向指定元素的迭代器,查找失败返回end迭代器。
vector<int>::iterator result = find( L.begin( ), L.end( ), 6 ); //查找3
if ( result == L.end( ) ) //没找到
    cout << "No" << endl;
else //找到
    cout << "Yes " <<(*result)<< endl;


后记
此刻感觉只有这些比较重要的了,如果还有的话,在进行补充就可以了。






https://blog.51cto.com/u_10975123/4852200
页: [1]
查看完整版本: C++ 算法基础知识总结