C++中算法(优先队列、遍历算法、查找算法、排序算法)
1.优先队列#include <iostream>#include <queue>#include <vector>using namespace std;int main(){//priority_queue(Type,Container,Functional);//参数1为数据类型,2为保存数据的容器(必须是用数组实现的容器,...
·
1.优先队列
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
//priority_queue(Type,Container,Functional); //参数1为数据类型,2为保存数据的容器(必须是用数组实现的容器,例如vector,queue,但不能使用list),3为元素比较方式
//priority_queue<int, vector<int> > p1; //大顶堆 默认从大到小排序
//priority_queue<int, vector<int> ,greater<int> > p1; //小顶堆 声明从小到大排序
priority_queue<int, vector<int> ,less<int> > p1; //大顶堆 声明从大到小排序
p1.push(3);
p1.push(8);
p1.push(2);
p1.push(6);
p1.push(9);
cout << p1.top() << endl;
while( !p1.empty())
{
cout << p1.top() << " ";
p1.pop();
}
cout << endl;
return 0;
}
2.遍历算法
#include <iostream>
#include <vector>
using namespace std;
void print1(char ch)
{
cout << ch << " ";
}
class print2
{
public:
void operator()(char ch)
{
cout << ch << " ";
}
};
char print3(char &ch)
{
return ch + 1;
}
int main()
{
char str[] = "helloworld";
vector<char> v1(str, str + strlen(str));
//for_each()算法在遍历过程中不能修改容器内的数据
//for_each(v1.begin(), v1.end(),print1); //print1函数指针 回调函数
for_each(v1.begin(), v1.end(),print2() ); //print2()函数对象
cout << endl;
//transform() 在遍历过程中可以修改容器内的数据
transform(v1.begin(), v1.end(), v1.begin(), print3); //print3函数指针 回调函数
for_each(v1.begin(), v1.end(),print1);
cout << endl;
return 0;
}
3.查找算法
#include <iostream>
#include <set>
using namespace std;
int print1(int a)
{
cout << a << " ";
}
bool greater_three(int n)
{
return n > 3;
}
int main()
{
multiset<int> s;
srand(time(NULL)); //种子
for(int i=0; i<10; i++)
{
s.insert( rand() % 5);
}
for_each(s.begin(), s.end(), print1); //print1函数指针 回调函数
cout << endl;
cout << "******查找相邻重复的元素*******" << endl;
multiset<int>::iterator it;
it = adjacent_find(s.begin(),s.end()); //第一个重复的元素,不是全部
if(it == s.end())
{
cout << "没有重复的元素" << endl;
}
else
{
cout << "重复元素为:" << *it << endl;
}
cout << "******在有序序列中找*******" << endl;
bool ret = binary_search(s.begin(),s.end(),3);
if(ret)
{
cout << "3存在" << endl;
}
else
{
cout << "3不存在" << endl;
}
cout << "******统计某个元素的个数*******" << endl;
int num = count(s.begin(), s.end(), 3);
cout << "3的个数为:" << num << endl;
cout << "******统计大于某个元素的个数*******" << endl;
num = count_if(s.begin(), s.end(), greater_three);
cout << "大于3的个数:" << num << endl;
cout << "******查找等于3*******" << endl;
it = find(s.begin(), s.end(), 3);
if( it == s.end())
{
cout << "没有3" << endl;
}
else
{
cout << *it << endl;
}
cout << "******查找大于某个元素的第一个元素*******" << endl;
it = find_if(s.begin(), s.end(), greater_three);
if( it == s.end())
{
cout << "没有大于3的元素" << endl;
}
else
{
cout << "第一个大于3的元素为:" << *it << endl;
}
return 0;
}
4.排序算法
#include <iostream>
#include <vector>
using namespace std;
void print(int n)
{
cout << n;
}
int main()
{
int a1[] = {1,3,5,7,9};
vector<int> v1(a1, a1 + sizeof(a1) / sizeof(a1[0]));
int a2[] = {2,4,6,8};
vector<int> v2(a2, a2 + sizeof(a2) / sizeof(a2[0]));
cout << "*******合并********" << endl;
vector<int> v3;
v3.resize(v1.size() + v2.size());
merge(v1.begin(),v1.end(),v2.begin(),v2.end(), v3.begin()); //合并
for_each(v3.begin(), v3.end(), print); //print函数指针 回调函数
cout << endl;
cout << "********顺序置乱**********" << endl;
random_shuffle(v3.begin(),v3.end());
for_each(v3.begin(), v3.end(), print); //print函数指针 回调函数
cout << endl;
cout << "*******sort排序*********" << endl;
sort(v3.begin(), v3.end(), less<int>() ); //从小到大排序
for_each(v3.begin(), v3.end(), print); //print函数指针 回调函数
cout << endl;
cout << "********逆序*********" << endl;
reverse(v3.begin(), v3.end());
for_each(v3.begin(), v3.end(), print); //print函数指针 回调函数
cout << endl;
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)