C++ 算法基础知识总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XZ2585458279/article/details/89470855

前言

打算刷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);//默认递增
也可以自定义比较函数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;

后记

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

猜你喜欢

转载自blog.csdn.net/XZ2585458279/article/details/89470855
今日推荐