c++计算一个新向量,该向量与现有向量有delta

c++ computing a new vector which has deltas from an existing vector

本文关键字:向量 delta 新向量 计算 一个 c++      更新时间:2023-10-16

我正在学习c++ STL算法。我需要帮助,试图找到一个函数来创建从值在现有的矢量delta的矢量。换句话说:

  • delta0 = abs(original1 - original0)
  • delta1 = abs(original2 - original1)
  • 等等

我正在寻找一些简洁的东西,像R的"diff"函数在这里提到:计算一个与已有向量

有delta的新向量

我找到了变换函数,但它似乎一次只对一个元素进行操作。它似乎不允许提供的函数中的迭代器参数进行转换,所以我仅限于当前元素。我正在尝试学习STL算法,所以我真的不需要任何可能"diff"实现的库。我只是想看看一种方法来使用STL函数来解决这个问题,如果有一个简洁的方法,我不知道。

下面是一个有问题的部分注释的例子:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<int> v = { 1, 2, 3, 4, 5 };
    vector<int> delta;
    //---------------------------------------
    // way to do this with STL algorithms?
    for (auto i = v.begin()+1; i != v.end(); i++) {
        delta.push_back(abs(*i - *(i - 1)));
    }
    //---------------------------------------
    for (int i : delta) {
        cout << i << " ";
    }
    return 0;
}
std::transform(std::next(v.begin()), v.end(),
               v.begin(), delta.begin(),
               [](int a, int b){ return std::abs(a - b); });

您只是错过了transform的第二个版本。请看这里

在线查看代码!