zoukankan      html  css  js  c++  java
  • c++常用小算法

    这篇文章列出了一些简单常用的C++容器算法,C++标准库中事实上提供了很多的算法并且有详细的介绍。如果需要详细的了解这些算法可以 参考C++在线参考手册 algrithm .

    1 排序

    #include<algorithm> 中,调用形式为 sort(beign,end) 它的参数为一个输入区间。注意end要指向需要排序的最后一个 元素的下一个位置。参数可以是指针也可以是迭代器。

    int num[10]={1,3,5,7,9,0,2,4,6,8};
    sort(num,num+10);

    去除重复元素

    一般需要unique函数(#include<algorithm>)和sort函数共同使用。unique函数实际上是一种伪去除函数, 它可以将容器中相邻的重复元素放到容器的末尾,然后返回第一个重复元素的地址。由于重复元素相邻才能放到末尾 所以需要使用sort先进行排序。下面这个例子用来去除vector中重复的元素。

    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    using namespace std;
     
    int main()
    {
        vector<int> vec;
        vector<int>::iterator iter;
        vec.push_back(1);
        vec.push_back(2);
        vec.push_back(3);
        vec.push_back(1);
        vec.push_back(2);
        vec.push_back(3);
        vec.push_back(4);
     
        sort(vec.begin(),vec.end());
    	for(vector<int>::iterator i =vec.begin();i != vec.end();++i)
    	{
    		cout<<*i<<" ";
    	}
    	cout<<endl;
        iter = unique(vec.begin(),vec.end());
    	vec.erase(iter,vec.end());
        for(iter=vec.begin(); iter!=vec.end(); ++iter)
            cout<<*iter<<" ";
            cout<<endl;
     
        return 0;
    }

    3 找到vector中最大值和最小值

    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    using namespace std;
     
    int main()
    {
    	vector<int> vec(5);	//5行
     
    	int i = 0;
    	for(vector<int >::iterator ite=vec.begin();ite != vec.end();++ite)
    	{
    		*ite = i;
    		i++;
    	}
      //vector<int>::iterator maxIte = max_element(vec.begin(),vec.end());
      //cout<<*maxIte<<endl;
    	auto maxMin = minmax_element(vec.begin(),vec.end());
    	cout<<*maxMin.first<<","<<*maxMin.second<<endl;
     
        return 0;
    }

    4 利用map比较函数进行排序

    利用map在插入键值对时会自动排序,我们可以灵活的实现对数据的各种排序要求。如排序并获得排序前对应的角标索引, 不排序获得排序后的名次。下面是使用map获得排序名次的一个示例:

    #include <iostream>
    #include <vector>
    #include <map>
     
    using namespace std;
     
    class a
    {
    	public:
    	struct strA
    	{
    		double d;
    		int I;
    	};
    };
     
    int main()
    {
    	vector<a::strA> a;
    	a.resize(5);
    	a[0].d = 2;
    	a[1].d = 3;
    	a[2].d = 0;
    	a[3].d = -1;
    	a[4].d = 8.4;
    	map<double,int> temp;
    	for(int i = 0;i < a.size();++i)
    		temp.insert(make_pair(a[i].d,i));	//数据放入map中会自动按键值升序排序
    	int i = a.size();
    	for(map<double,int>::iterator it = temp.begin();it != temp.end();++it)
    	{
    		a[it->second].I = i;
    		i--;
    	}
    	for(int i = 0;i < a.size();++i)
    		cout<<a[i].d<<","<<a[i].I<<endl;
     
        return 0;
    }

    执行结果:

    2,3
    3,2
    0,4
    -1,5
    8.4,1

    前面是需要排序的数( strA.d ),后面是对应的排序名次( strA.i )。 实际上map的比较函数是可以自定义的,利用这一点我们可以更灵活的进行排序。

  • 相关阅读:
    多线程,超时处理
    多线程,超时处理
    多线程,超时处理
    如何使用vue2搭建ElementUI框架
    pip 报错 ssl_.py:339: SNIMissingWarning: An HTTPS request has been made, but the SNI
    从单机到2000万QPS: 知乎Redis平台发展与演进之路
    OAuth2和JWT
    收集统计信息 不会更新DDL时间
    Python爬虫入门教程 8-100 蜂鸟网图片爬取之三
    Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
  • 原文地址:https://www.cnblogs.com/yabin/p/7017058.html
Copyright © 2011-2022 走看看