zoukankan      html  css  js  c++  java
  • STL学习笔记数值算法

    STL学习笔记--数值算法

    数值算法

      C++ STL 的数值算法(Numeric algorithms)是一组对容器元素进行数值计算的模板函数,包括容器元素求和 accumulate 、两序列元素的内积 inner_product 、容器元素的一系列部分元素和 partial_sum 、容器每对相邻元素的差。

    应用 accumulate 算法求数组元素和、元素积
     1 /*    下面示例程序对数组 iArray={1, 2, 3, 4, 5}进行元素求和、求积
     2 */
     3 ----------------------------------------------- 应用 accumulate 算法求数组元素和、元素积
     4 #include <numeric>
     5 #include <iostream>
     6 using namespace std;
     7 
     8 int multiply(int x, int y)
     9 {
    10     return x * y;
    11 }
    12 
    13 int main()
    14 {
    15     int iArray[5] = {1, 2, 3, 4, 5};
    16     cout << "数组 iArray 的元素和为:"
    17          << accumulate(iArray, iArray+5, 0)
    18          << endl << endl;
    19 
    20     cout << "数组 iArray 的元素积为:"
    21          << accumulate(iArray, iArray+5, 1, multiply)
    22          << endl;
    23 
    24     return 0;
    25 }
    应用 inner_product 算法计算两数组内积
    1 /*    下面示例程序分别使用 inner_product 算法的两种用法,计算两数组{2, 5, 4} 和{10, 6, 5}的内积
     2 */
     3 ----------------------------------------------- 应用 inner_product 算法计算两数组内积
     4 #include <numeric>
     5 #include <iostream>
     6 using namespace std;
     7 
     8 int add(int x, int y)
     9 {
    10     return x + y;
    11 }
    12 
    13 int mul(int x, int y)
    14 {
    15     return x * y;
    16 }
    17 
    18 int main()
    19 {
    20     int iArray1[3] = {2, 5, 4};
    21     int iArray2[3] = {10, 6, 5};
    22 
    23     // 第1中计算方法
    24     int result = inner_product(iArray1, iArray1+3, iArray2, 0);
    25     cout << "数组iArray1与数组iArray2的内积为:" << result << endl << endl;
    26 
    27     // 第2中计算方法(扩展性更强)
    28     result = inner_product(iArray1, iArray1+3, iArray2, 0, add, mul);
    29     cout << "数组iArray1与数组iArray2的内积为:" << result << endl << endl;
    30 
    31     return 0;
    32 }
    应用 partial_sum 算法计算数组的一系列部分元素和
    1 /*    下面示例程序先对数组 iArray={1, 2, 3, 4, 5}进行局部求和,打印输出为"1 3 6 10 15",然后选择 binary_op 为乘法运算,打印出各个局部阶乘积为“1 2 6 24 120”
     2 */
     3 ----------------------------------------------- 应用 partial_sum 算法计算数组的一系列部分元素和
     4 #include <numeric>
     5 #include <algorithm>
     6 #include <iostream>
     7 using namespace std;
     8 
     9 void print(int x)
    10 {
    11     cout << x << "  ";
    12 }
    13 
    14 int multiply(int x, int y)
    15 {
    16     return x * y;
    17 }
    18 
    19 int main()
    20 {
    21     int iArray[5] = {1, 2, 3, 4, 5};
    22     int iResult[5];
    23 
    24     // 求和
    25     partial_sum(iArray, iArray+5, iResult);
    26     for_each(iResult, iResult+5, print);
    27     cout << endl << endl;
    28 
    29     // 计算阶乘
    30     partial_sum(iArray, iArray+5, iResult, multiply);
    31     for_each(iResult, iResult+5, print);
    32     cout << endl;
    33 
    34     return 0;
    35 }
    应用adjacent_difference 算法计算数组的一系列临近元素差的积
    1 /*    下面示例程序,先对数组 iArray={1, 10, 17, 25, 30}的各个邻近元素求差,打印输出"1 9 7 8 5",然后用乘法运算代替求差,计算各个相邻元素的乘积,打印输出为“1 10 170 425 750”
     2 */
     3 ----------------------------------------------- 应用adjacent_difference 算法计算数组的一系列临近元素差的积
     4 #include <numeric>
     5 #include <algorithm>
     6 #include <iostream>
     7 using namespace std;
     8 
     9 void print(int x)
    10 {
    11     cout << x << "  ";
    12 }
    13 
    14 int multiply(int x , int y)
    15 {
    16     return x * y;
    17 }
    18 
    19 int main()
    20 {
    21     int iArray[5] = {1, 10, 17, 25, 30};
    22     int iResult[5];
    23     // 邻近元素差
    24     adjacent_difference(iArray, iArray+5, iResult);
    25     for_each(iResult, iResult+5, print);
    26     cout << endl << endl;
    27 
    28     // 邻近元素相乘
    29     adjacent_difference(iArray, iArray+5, iResult, multiply);
    30     for_each(iResult, iResult+5, print);
    31     cout << endl;
    32 
    33     return 0;
    34 }

    -----------------------------------  数值算法小结
        介绍了C++ STL 针对容器的元素进行数值计算的算法,虽然简单且为数不多,但是计算形式具有相当的灵活性。

    例如:
        容器元素求和的 accumulate 算法,可设置运算为乘法操作,就可变成对容器元素的阶乘计算;
        两序列容器的元素内积 inner_product 算法,可推广到对应元素两两执行一种运算后,再将结果执行另一种另一种运算;
        容器元素的部分元素和 parital_sum 算法,可设置相应的操作运算,变成一系列部分元素的阶乘计算;
        相邻元素差 adjacent_difference 算法,可转换为计算相邻元素的和或者乘积 等等。

    作者:Music__Liang
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
     
    标签: STLC++算法
  • 相关阅读:
    cxGrid 锁定列
    精选网站
    Delphi XE10 dxLayoutControl 控件应用指南
    合并当前工作簿下的所有工作表
    【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中
    CxGrid如何实现导出Excel 功能
    Google Material Design的图标字体使用教程
    Mui沉浸模式以及状态栏颜色改变
    移动端弹性效果
    JS中的“!!”
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3023155.html
Copyright © 2011-2022 走看看