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]