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;
}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐