c ++计算一个新的向量,它具有现有向量的增量

时间:2015-07-24 22:16:52

标签: c++ algorithm vector stl

我正致力于学习C ++ STL算法。我需要帮助尝试找到一个函数来从现有向量中的值创建增量向量。换句话说:

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

我正在寻找简洁的东西,比如R"差异"这里提到的功能: computing a new vector which has deltas from an existing vector

我找到了转换函数,但它似乎一次只对一个元素进行操作。它似乎不允许在提供的函数中允许迭代器的参数进行转换,所以我仅限于当前元素。我试图学习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;
}

1 个答案:

答案 0 :(得分:3)

std::transform(std::next(v.begin()), v.end(),
               v.begin(), delta.begin(),
               [](int a, int b){ return std::abs(a - b); });

您只是错过了transform的第二个版本。看看它here

查看操作中的代码online