adjacent_difference算法和back_inserter vector <vector <int>&gt;

时间:2018-03-25 14:06:23

标签: c++ algorithm

我将adjacent_difference算法应用于向量以成对使用元素,然后adjacent_difference调用diff函数处理元素并给出各种元素的向量,我想要插入std::vector<std::vector<int>>back_inserter不起作用。如果您只使用std::vector<int>并仅从diff函数返回int,那么back_inserter会成功。帮助解决问题。它不编译((

std::vector<int> dif(int prev, int val)
{
    std::vector<int> arr;
    if(prev < val)
        for(int i = prev; i < val; i++)
            arr.push_back(i);
    else
        for(int i = prev; i > val; i--)
            arr.push_back(i);
    return arr;
}

int main()
{
    std::vector<int> arr {1, 2, 6, 8, 10};
    std::vector<std::vector<int>> n;
    std::adjacent_difference(arr.begin(), arr.end(), std::back_inserter(n), dif);
    return 0;
}

错误:

/usr/include/c++/4.9/bits/stl_numeric.h|374|error: no match for ‘operator=’ (operand types are ‘std::back_insert_iterator<std::vector<std::vector<int> > >’ and ‘_ValueType {aka int}’)|

1 个答案:

答案 0 :(得分:0)

根据算法的描述

  

首先,创建一个累加器acc,其类型为InputIt的值   输入,首先用*初始化它,并将结果赋值给   * d_first。然后,按顺序为[first + 1,last]中的每个迭代器创建一个对象val,其类型为InputIt的值类型,初始化   它与* i,计算val - acc(overload(1))或op(val,acc)   (overload(3)),将结果赋给*(d_first +(i - first)),和   移动从val分配到acc。

因此,当您尝试为其分配int类型的对象时,您调用算法的累加器的类型为std::vector<int>