返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ STL 中的数值算法示例讲解
  • 145
分享到

C++ STL 中的数值算法示例讲解

2024-04-02 19:04:59 145人浏览 泡泡鱼
摘要

目录1.iota2.accumulate3.partial_sum4.adjacent_difference5.inner_product以下算法均包含在头文件 numeric 中

以下算法均包含在头文件 numeric 中

1.iota

该函数可以把一个范围内的序列从给定的初始值开始累加
先看用法。
例:
假设我需要一个长度为10,从5开始递增的序列

    vector<int> a(10);
    iota(begin(a), end(a), 5);

    for (auto x : a) {
        cout << x << " ";
    }

输出:

5 6 7 8 9 10 11 12 13 14

这样就可以很方便的创建一个递增的序列,而不用使用for循环
此外,该函数是使用连续的支持 operator++()的 T 类型值填充序列
也就是说double类型也可以使用,string类型也可以使用。
只要是重载了++运算符的类型都可以使用。

2.accumulate

曾经在算法比赛中看见别人使用accumulate函数计算出了一个数组的和。
觉得特别的优雅,像这样:

    vector<int> a(10);
    iota(begin(a), end(a), 1);

    cout << accumulate(begin(a), end(a), 0) << "\n";  // 计算从1加到10的和,从0开始加

输出:

55

从那天起,每当我要求一个序列的和的时候,我都会使用这个方法...
但是今天,当我看到accumulate的源码之后:

template <class InputIterator, class T>
   T accumulate (InputIterator first, InputIterator last, T init)
{
  while (first!=last) {
    init = init + *first;  // or: init=binary_op(init,*first) for the binary_op version
    ++first;
  }
  return init;
}

注意看这里:

哇哦,它竟然还支持二元仿函数,详解c++ functional库中的仿函数使用方法
于是,我有了一个大胆的想法。
求一个数组的乘积

    vector<int> a(10);
    iota(begin(a), end(a), 1);

    cout << accumulate(begin(a), end(a), 1, multiplies<int>()) << "\n";  // 计算从1加到10的乘积,从1开始乘

输出:

3628800

同理,还可以求数组的减,数组的除,数组的模?

3.partial_sum

这个函数可以用来求前缀和,前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身)。

例如,1、2、3、4、5的前缀和数组为 1 3 6 10 15

    vector<int> a(5);
    iota(begin(a), end(a), 1);

    partial_sum(begin(a), end(a), begin(a)); // 求a的前缀和,赋值给a数组(第三个参数)

    for (auto x : a) {
        cout << x << " ";
    }

输出:

1 3 6 10 15

有了上一个函数的经验,我们还可以求一个数组的前缀乘、除等

例:

    partial_sum(begin(a), end(a), begin(a), multiplies<int>());

输出:

1 2 6 24 120

4.adjacent_difference

这个函数可以对一个序列里相邻两个元素进行运算,通过differerce这个词可以看出来,默认是计算相邻两元素的差

vector<int> a{1, 4, 5, 100, 40};

adjacent_difference(begin(a), end(a), begin(a)); // 求a数组相邻元素的差,赋值给a数组(第三个参数)

for (auto x : a) {
    cout << x << " ";
}

输出:

1 3 1 95 -60

今天我想计算相邻两元素的乘积

adjacent_difference(begin(a), end(a), begin(a), multiplies<int>());

输出:

1 4 20 500 4000

5.inner_product

这个函数默认情况下可以求序列中每个元素的内积之和:

    vector<int> a(3);
    iota(begin(a), end(a), 1);

    cout << inner_product(begin(a), end(a), begin(a), 10) << "\n"; // 从初值10开始加上序列各元素的内积

输出:

24

还可以用来求两个序列元素两两相乘再相加的结果

    vector<int> a{1, 2, 3};
    vector<int> b{2, 3, 4};

    // 1 * 2 + 2 * 3 + 3 * 4
    cout << inner_product(begin(a), end(a), begin(b), 0) << "\n";

输出:

20

此外,还可以通过仿函数来替代上述的两个操作符 + 和 *

    vector<int> a{1, 2, 3};
    vector<int> b{2, 3, 4};

    cout << inner_product(begin(a), end(a), begin(b), 1
                        , multiplies<int>(), minus<int>()) << "\n";
                            // 原来的加法 +  // 原来的乘法 *
                            // 计算 (1 - 2) * (2 - 3) * (3 - 4) = -1

输出:

-1

到此这篇关于C++ STL 中的数值算法示例讲解的文章就介绍到这了,更多相关C++ 数值算法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ STL 中的数值算法示例讲解

本文链接: https://lsjlt.com/news/145300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ STL 中的数值算法示例讲解
    目录1.iota2.accumulate3.partial_sum4.adjacent_difference5.inner_product以下算法均包含在头文件 numeric 中 ...
    99+
    2024-04-02
  • C++ STL中五个常用算法使用教程及实例讲解
    目录前言sort()排序常用遍历算法for_each()常用遍历算法 搬运transform()查找算法find删除操作erase()实例应用前言 在C++中使用STL算法都要包含一...
    99+
    2024-04-02
  • C++11语法之右值引用的示例讲解
    目录一、{}的扩展initializer_list的讲解:二、C++11一些小的更新decltypenullptr范围for新容器三、右值引用右值真正的用法完美转发默认成员函数总结一...
    99+
    2024-04-02
  • STL组件之算法的示例分析
    这篇文章主要介绍了STL组件之算法的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。STL提供了大量的模板类和函数,可以在OOP和常规编程中使用。所有的STL的大约50...
    99+
    2023-06-17
  • C++中STL vector的模拟实现示例
    这篇文章主要介绍C++中STL vector的模拟实现示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. vector的介绍和使用vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存...
    99+
    2023-06-14
  • C#中的==运算符用法讲解
    目录==运算符与基元类型==运算符与引用类型==运算符与String类型==运算符与值类型==运算符与泛型总结==运算符与基元类型 我们分别用两种方式比较两个整数,第一个使用的是Eq...
    99+
    2024-04-02
  • C++ STL中常见的算法使用方式
    目录什么是STL?0. < algorithm> 是什么:1. Non-modifying sequence operations:1.1 find:(Find valu...
    99+
    2024-04-02
  • C++STL中的常用遍历算法分享
    目录1.for_each功能描述函数原型2.transform功能描述函数原型1.for_each 功能描述 实现容器遍历 函数原型 for_each(itertor beg,ite...
    99+
    2022-12-20
    C++ STL遍历算法 C++ 遍历算法 C++ STL
  • C++示例讲解friendstaticconst关键字的用法
    目录一、友元函数1.1重载operator<<1.2友元函数1.3友元类二、关键字const2.1const修饰类的成员函数三、关键字static3.1static类成员...
    99+
    2024-04-02
  • C++中指针,引用和STL的示例分析
    这篇文章主要介绍C++中指针,引用和STL的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!对象的定义:对象是指一块能存储数据并具有某种类型的内存空间一个对象a,它有值和地址;运行程序时,计算机会为该对象分配存...
    99+
    2023-06-29
  • C++中list的用法实例讲解
    目录前言一、list的节点二、list的迭代器2.1、模板参数为什么是三个2.2 const 迭代器2.3 修改方法二、美中不足三、迭代器的分类3.x std::find的一个报错总...
    99+
    2024-04-02
  • STl中的排序算法详细解析
    1. 所有STL sort算法函数的名字列表: 函数名             功能描述 sort          对给定区间所有元素进行...
    99+
    2022-11-15
    STl 排序算法
  • C语言示例讲解for循环的用法
    目录1、循环语句for的语法2、for循环中的break以及continue3、for语句的循环变量控制的一些建议4、for循环的变种5、题目1、循环语句for的语法 for (表达...
    99+
    2024-04-02
  • C语言示例讲解ifelse语句的用法
    目录1、前言2、if语句的语法结构3、关于if else语句的示例4、if else 书写形式的对比5、例子1、前言 (1)C语言是结构化的程序设计语言。C语言的三种基本程序结构分别...
    99+
    2024-04-02
  • C++示例讲解初始化列表方法
    目录定义特性初始化阶段计算阶段成员变量的初始化顺序定义 我们先来看一个例子 Date(int year, int month, int day)//带参构造函数 :_...
    99+
    2024-04-02
  • C++的STL中accumulate函数的使用方法
    目录1.累加求和2.自定义数据类型的处理3.用法补充前言: accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 1.累加求和 in...
    99+
    2024-04-02
  • C++实现贪心算法的示例详解
    目录区间问题区间选点最大不相交区间数量区间分组区间覆盖Huffman树合并果子排序不等式排队打水绝对值不等式货舱选址区间问题 区间选点 给定 N 个闭区间 [ai,bi],请你在数轴...
    99+
    2024-04-02
  • C++常见的stl容器与相关操作示例解析
    目录sort排序vectormapunordered_mapsetqueuestack创建容器时指定排序规则sort排序 针对含有迭代器的容器,可以用#include<algo...
    99+
    2022-11-13
    C++ stl容器 C++ stl容器操作
  • Java数据结构与算法实例讲解
    这篇文章主要讲解了“Java数据结构与算法实例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数据结构与算法实例讲解”吧! 为什么需要树这种结构数组存储方式分析:优点:通...
    99+
    2023-06-15
  • Python中 join() 函数的使用示例讲解
    目录Python中 join() 函数的使用函数说明1、join()函数2、os.path.join()函数补充:python中的join函数Python中 join() 函数的使用...
    99+
    2023-05-14
    Python join() 函数 Python join() 函数用法 Python join用法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作