STL学习笔记(数值算法)

运用数值算法之前必须先加入头文件<numeric>

 

加工运算后产生结果

1.对序列进行某种运算

T

accumulate(InputIterator beg,InputIterator end,

                   T initValue)

accumulate(InputIterator beg,InputIterator end,

                   T initValue,BinaryFunc op)

1.第一种形式计算InitValue和区间[beg,end)内所有元素的总和。

2.第二种形式计算initValue和区间[beg,end)内每一个元素进行op运算的结果。更具体的说,它针对每一个元素调用以下表达式:

   initValue=op(initValue,elem)

 

下面这个例子展示如何使用accumulate()得到区间内所有元素的总和和乘积:

 1 #include "algostuff.hpp"
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     vector<int> coll;
 7     INSERT_ELEMENTS(coll,1,9);
 8     PRINT_ELEMENTS(coll);
 9     cout<<"sum: "
10         <<accumulate(coll.begin(),coll.end(),0)
11         <<endl;
12     cout<<"sum: "
13         <<accumulate(coll.begin(),coll.end(),-100)
14         <<endl;
15     cout<<"product: "
16         <<accumulate(coll.begin(),coll.end(),1,multiplies<int>())
17         <<endl;
18     cout<<"product: "
19         <<accumulate(coll.begin(),coll.end(),0,multiplies<int>())
20         <<endl;
21 }
View Code

 

2.计算两序列的内积

T

inner_product(InputIterator beg1,InputIterator end1,

                       InputIterator beg2,T initValue)

T

inner_product(InputIterator beg1,InputIterator end1,

                       InputIterator beg2,T initValue,

                       BinaryFunc op1,BinaryFunc op2)

1.第一种形式针对“两区间内的每一组对应元素”调用以下表达式:

   initValue=initValue+elem1+elem2

2.第二形式则调用以下表达式:

  initValue=op1(initValue,op2(elem1,elem2))

 

以下程序示范inner_product()的用法

 1 #include "algostuff.hpp"
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     list<int> coll;
 7     INSERT_ELEMENTS(coll,1,6);
 8     PRINT_ELEMENTS(coll);
 9     cout<<"inner product: "
10         <<inner_product(coll.begin(),coll.end(),coll.begin(),0)
11         <<endl;
12     cout<<"inner reverse product: "
13         <<inner_product(coll.begin(),coll.end(),coll.rbegin(),0)
14         <<endl;
15     cout<<"product of sums: "
16         <<inner_product(coll.begin(),coll.end(),coll.begin(),1,multiplies<int>(),plus<int>())
17         <<endl;
18 }
View Code

 

 

相对值跟绝对值之间的转换

1.将相对值转换成绝对值

OutputIterator

partial_sum(InputIterator sourceBeg,

                    InputIterator sourceEnd,

                    OutputIterator destBeg)

OutputIterator

partial_sum(InputIterator sourceBeg,

                    InputIterator sourceEnd,

                    OutputIterator destBeg,BinaryFunc op)

1.第一形式计算源区间[sourceBeg,sourceEnd)中每个元素的部分和,然后将结果写入以destBeg为起点的目标区间

2.第二形式将源区间[sourceBeg,sourceEnd)中的每个元素和其先前所有元素进行op运算,并将结果写入destBeg为起点的目标区间

   例如对于以下数值序列:a1 a2 a3 ...

   它们分别计算:

   a1,a1+a2,a1+a2+a3,..

   a1,a1 op a2,a1 op a2 op a2,...

以下程序示范partial_sum()的用法

 1 #include <iterator>
 2 #include "algostuff.hpp"
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     vector<int> coll;
 8     INSERT_ELEMENTS(coll,1,6);
 9     PRINT_ELEMENTS(coll);
10     partial_sum(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
11     cout<<endl;
12     partial_sum(coll.begin(),coll.end(),ostream_iterator<int>(cout," "),multiplies<int>());
13     cout<<endl;
14 }
View Code

 

 

2.将绝对值转换成相对值

OutputIterator

adjacent_difference(InputIterator sourceBeg,

                                InputIterator sourceEnd,

                                OutputIterator destBeg)

OutputIterator

adjacent_difference(InputIterator sourceBeg,

                                InputIterator sourceEnd,

                                OutputIterator destBeg)

1.第一种形式计算区间[sourceBeg,sourceEnd)中每一个元素和其紧邻前驱元素的差额,并将结果写入destBeg为起点的目标区间

2.第二种形式针对区间[sourceBeg,sourceEnd)中每一个元素和其紧邻前驱元素调用op操作,并将结果写入destBeg为起点的目标区间

   对于以下数值序列:

   a1,a2,a3,a4,...

   它们分别计算:

   a1,a2-a1,a3-a2,a4-a3,...

   a1,a2 op a1,a3 op a2,a4 op a3,...

以下程序示范adjacent_difference()的用法

 1 #include <iterator>
 2 #include "algostuff.hpp"
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     deque<int> coll;
 8     INSERT_ELEMENTS(coll,1,6);
 9     PRINT_ELEMENTS(coll);
10     adjacent_difference(coll.begin(),coll.end(),ostream_iterator<int>(cout," "),plus<int>());
11     cout<<endl;
12     adjacent_difference(coll.begin(),coll.end(),ostream_iterator<int>(cout," "),multiplies<int>());
13     cout<<endl;
14 }
View Code

 

转载于:https://www.cnblogs.com/runnyu/p/4849852.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

angualejs

为什么80%的码农都做不了架构师&#xff1f;>>> http://segmentfault.com/a/1190000000347412 http://www.xker.com/page/e2015/06/199141.html http://www.runoob.com/angularjs/angularjs-application.html http://blog.csdn.net/lglgsy456/article/details/3690…

SPOJ SORTBIT Sorted bit squence (数位DP,入门)

题意&#xff1a; 给出一个范围[m,n]&#xff0c;按照二进制表示中的1的个数从小到大排序&#xff0c;若1的个数相同&#xff0c;则按照十进制大小排序。求排序后的第k个数。注意&#xff1a;m*n>0。 思路&#xff1a; 也是看论文的。一开始也能想到是这种解法&#xff0c;枚…

mysql日志(介绍 路径修改 备份)

2019独角兽企业重金招聘Python工程师标准>>> 环境&#xff1a;senos6 软件&#xff1a;mysql2.6.20 mysql日志&#xff1a; 错误日志 一般查询日志 慢查询日志 二进制日志 只记录DDL&#xff0c;DML等引起数据库改变的操作都会记录下来 复制&am…

Algorithm I assignment Collinear

这本来应该是第三周的作业&#xff0c;但是由于其他作业逼近deadline&#xff0c;暂时推后了一周完成。 这周的assignment大大提高了我对这门课的看法&#xff0c;不得不说&#xff0c;Algorithms这门课的assignment部分设计得很好。为什么好&#xff1f;个人认为有以下几点&am…

Java BigDecimal详解

1.引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff0c;它们没有提供完全精确的结果&#xff0c;所以不应该被用于要求精确结果的场合。但是…

windows 串口编程 c语言,windows下C语言版串口发送程序(基于VS2017)

#include "tchar.h"#include int main(){/*****************************打开串口*************************************/HANDLE hCom;//全局变量&#xff0c;串口句柄hCom CreateFile(_T("COM3"),//COM3口GENERIC_READ | GENERIC_WRITE,//允许读和写0,/…

scikit-learn决策树算法类库使用小结

之前对决策树的算法原理做了总结&#xff0c;包括决策树算法原理(上)和决策树算法原理(下)。今天就从实践的角度来介绍决策树算法&#xff0c;主要是讲解使用scikit-learn来跑决策树算法&#xff0c;结果的可视化以及一些参数调参的关键点。 1. scikit-learn决策树算法类库介绍…

c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...

使用c语言编写程式&#xff0c;实现计算1*2*34*5*67*8*9……28*29*30的值以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;使用c语言编写程式&#xff0c;实现计算1*2*34*5*67*8*9……28*29*3…

PHP 正则表达式分割 preg_split 与 split 函数

为什么80%的码农都做不了架构师&#xff1f;>>> preg_split() preg_ split() 函数用于正则表达式分割字符串。 语法&#xff1a; array preg_split( string pattern, string subject [, int limit [, int flags]] ) 返回一个数组&#xff0c;包含 subject 中沿着与…

简单学C——第五天

结构体 首先明确&#xff0c;结构体是一种构造的数据类型&#xff0c;是一种由多个数据类型如 int&#xff0c;char&#xff0c;double&#xff0c;数组或者结构体......组成的类型,现在告诉大家如何定义一个结构体。在定义int整型变量时&#xff0c;大家肯定都知道 int a; 即…

Codeforces Round #325 (Div. 2) B. Laurenty and Shop 前缀和

B. Laurenty and Shop Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/586/problem/BDescription A little boy Laurenty has been playing his favourite game Nota for quite a while and is now very hungry. The boy wants to make sau…

android gallery自动播放,可循环显示图像的Android Gallery组件

类型&#xff1a;源码相关大小&#xff1a;23.6M语言&#xff1a;中文 评分&#xff1a;9.1标签&#xff1a;立即下载第 4 页 实现循环显示图像的Gallery组件实现循环显示图像的Gallery组件在本节将组出与循环显示图像相关的ImageAdapter类的完整代码。读者可以从中看到上一节介…

curl网站开发指南

curl网站开发指南 作者&#xff1a; 阮一峰 日期&#xff1a; 2011年9月 4日 我一向以为&#xff0c;curl只是一个编程用的函数库。 最近才发现&#xff0c;这个命令本身&#xff0c;就是一个无比有用的网站开发工具&#xff0c;请看我整理的它的用法。 curl网站开发指南 阮一…

Who Gets the Most Candies? POJ - 2886 (线段树)

按顺时针给出n个小孩&#xff0c;n个小孩每个人都有一个纸&#xff0c;然后每个人都有一个val&#xff0c;这个val等于自己的因子数&#xff0c;如果这个val是正的&#xff0c;那就顺时针的第val个孩子出去&#xff0c;如果是负的话&#xff0c;就逆时针的第val个孩子出去&…

javax.validation.ValidationException: Unable to find a default provider

2019独角兽企业重金招聘Python工程师标准>>> [ERROR] [2016-11-16 13:58:21 602] [main] (FrameworkServlet.java:457) Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframewo…

android视频播放器api,03.视频播放器Api说明

03.视频播放器Api说明目录介绍01.最简单的播放02.如何切换视频内核03.切换视频模式04.切换视频清晰度05.视频播放监听06.列表中播放处理07.悬浮窗口播放08.其他重要功能Api09.播放多个视频10.VideoPlayer相关Api11.Controller相关Api12.边播放边缓存api13.类似抖音视频预加载14…

Taurus.MVC 2.0 开源发布:WebAPI开发教程

背景&#xff1a; 有用户反映&#xff0c;Tausus.MVC 能写WebAPI么&#xff1f; 能&#xff01; 教程呢&#xff1f; 嗯&#xff0c;木有&#xff01; 好吧&#xff0c;刚好2.0出来&#xff0c;就带上WEBAPI教程了&#xff01; 开源地址&#xff1a; https://github.com/cyq116…

chrome瀏覽器去掉緩存的方法

方法一&#xff1a; 1.開發說打開開發者工具 勾選這個訪問可以 方法二: commandshiftR 转载于:https://www.cnblogs.com/kaibindirver/p/9378572.html

sony z2 android 5.0,索尼Xperia Z2 5.0 root教程_索尼Z2获取5.0系统的root

来说一下咱们的索尼Xperia Z2手机的5.0系统的root&#xff0c;因为现在很多机友的系统是5.0的&#xff0c;可是对于5.0的系统很多机友还不知道如何进行root操作&#xff0c;之前的针对4.4的系统的root方法肯定是用不到5.0的系统上的&#xff0c;因此需要专门的针对5.0的root软件…

ABP文档 - Javascript Api - AJAX

本节内容&#xff1a; AJAX操作相关问题ABP的方式 AJAX 返回信息处理错误 HTTP 状态码WrapResult和DontWrapResult特性 Asp.net Mvc 控制器Asp.net Web Api 控制器动态Web Api层Asp.net Core 控制器动态Web Api层AJAX操作相关问题 执行一个AJAX调用在现在的应用里非常常见&…