📜  C++ STL中的数字标头|集合2(adjacent_difference(),inner_product()和iota())(1)

📅  最后修改于: 2023-12-03 14:39:53.056000             🧑  作者: Mango

C++ STL中的数字标头|集合2

在 C++ STL 中,数字标头包含了一系列常用的算法函数,如求和、平均值、最大/小值等。在本文中,我们将学习集合2部分的三个函数:adjacent_difference()inner_product()iota()

adjacent_difference()

adjacent_difference()函数可以用来计算相邻元素之间的差值,并将结果存储到另一个容器中。其原型如下:

template <class InputIt, class OutputIt>
OutputIt adjacent_difference(InputIt first, InputIt last, OutputIt d_first);

参数解释:

  • first:要计算的容器的起始迭代器
  • last:要计算的容器的终止迭代器
  • d_first:存储结果的容器的起始迭代器

示例:

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> v = {1, 2, 4, 8, 16};
    vector<int> result(v.size());

    adjacent_difference(v.begin(), v.end(), result.begin());

    for (auto i : result) {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 1 2 4 8
inner_product()

inner_product()函数可以计算两个容器的内积。其原型如下:

template<class InputIt1, class InputIt2, class T>
T inner_product(InputIt1 first1, InputIt1 last1,
                InputIt2 first2, T value);

参数解释:

  • first1:第一个容器的起始迭代器
  • last1:第一个容器的终止迭代器
  • first2:第二个容器的起始迭代器
  • value:内积的初始值

示例:

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> v1 = {1, 2, 3};
    vector<int> v2 = {4, 5, 6};

    cout << inner_product(v1.begin(), v1.end(), v2.begin(), 0) << endl;

    return 0;
}

输出:

32
iota()

iota()函数可以用来给容器中的元素赋值,其值为一个递增的序列。其原型如下:

template <class ForwardIt, class T>
void iota(ForwardIt first, ForwardIt last, T value);

参数解释:

  • first:容器的起始迭代器
  • last:容器的终止迭代器
  • value:要赋予的起始值

示例:

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> v(5);

    iota(v.begin(), v.end(), 1);

    for (auto i : v) {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3 4 5

感谢阅读本篇文章,希望能够帮助你更好地理解 C++ STL 中数字标头集合2中的三个函数。