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的比较函数是可以自定义的,利用这一点我们可以更灵活的进行排序。
c++常用小算法的更多相关文章
- DotNet常用排序算法总结
数据结构和算法对一个程序来说是至关重要的,现在介绍一下几种算法,在项目中较为常用的算法有:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等7中算法. 现在介绍选择排序算法, ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏
ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...
- Matlab常用小技巧及部分快捷键
Matlab常用小技巧一: 1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚.不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成.原因是 ...
- ACM 中常用的算法有哪些?
在网上看到别人ACM学习的心得,转载过来,源地址不记得了,当时是百度的.内容如下: 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以 ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
随机推荐
- JavaWeb——关于RequestDispatcher的原理
RequestDispatcher简介 RequestDispatcher 代表请求的派发者.它有2个动作:forward 和 include .客户端对于任何一个请求,可以根据业务逻辑需要,选择不同 ...
- Day74
Django框架之视图函数(day74)一 作业相关 urlpatterns = [ url(r'^$',views.book), #根路径,响应到指定视图函数: ..... url(r ...
- Hexo+Github博客最简教程-Dockerfile自动搭建
闲谈 拿出你的气质,打开你的电脑,借你半小时搭建好属于你的hexo博客,小生用dockerfile自动帮你搭建好:你只需要在你的mac或linux或windows上提前把docker安装好,如何安装不 ...
- jQuery+php+Ajax文章列表点击加载更多功能
jQuery+php+Ajax实现的一个简单实用的文章列表点击加载更多功能,点击加载更多按钮,文章列表加载更多数据,加载中有loading动画效果. js部分: <script type=&qu ...
- opencv常用api
opencv常用api 一.图像及视频读写 img=cv2.imread('jiang.jpg',1) cv2.imwrite('jiang.jpg',img) cv2.imshow('ji ...
- Linux连接虚拟机及操作指令
Linux的安装(虚拟机环境)与基础配置 一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Li ...
- spring注解-“@Scope”
@Scope可用来指定Spring创建bean的方式 默认为单实例,即@Scope("singleton").IOC容器启动的时候会调用方法创建对象并放到IOC容器中,以后每次获取 ...
- Unix shell范例精解 课后题
1.read #屏幕输入read name #输入名字 2.echo #在终端打印出内容echo "What is your name ?" # What is your n ...
- mysql导入太慢解决方法
半调子数据科学家又要折腾数据,拿到数据一看,3.6G的zip文件,解压看看,卧槽12个G的sql文件.好吧,又要折腾sql数据了.第一件事,肯定是搭一个数据库,导入数据咯. 折腾过sql导入的亲们都知 ...
- CCNA学习视频
CCNA:链接:https://pan.baidu.com/s/1aiZC4pbYIu9qJSWcVfKwWw 提取码请私信楼主