我将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}’)|
答案 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>
。