【发布时间】:2017-05-24 15:48:24
【问题描述】:
我正在编写一个 c++ 方法,它采用 T 类型的向量 vec 并返回一个“delta”向量,即在位置 i 处具有元素 vec(i)-vec(i-1) 的向量,i>0 /I set 0 处的元素与 1/ 处的元素相同。
为此,我首先复制向量vec,然后以这种方式迭代:
template<class T>
vector<T> delta(vector<T> vec){
vector<T> result(vec);
for (typename vector<T>::iterator i = result.end(); i >= result.begin()+1; i--)
{
*i = *i - *(std::prev(i));
}
result.at(0) = result.at(1);
return (result);
}
线路好像有问题
*i = *i - *(std::prev(i));
我不明白。如果我将其更改为 *i = *i - 1 它工作正常。另一个问题是程序只是失败而没有显示错误(它会弹出一个窗口,显示“main.exe 已停止工作”。我正在使用 CLion IDE。
附:从主我传递一个带有双值的初始化向量。
【问题讨论】:
-
你的调试器告诉你什么?
-
警告:003EAF20 处的堆块在 003EB258 处修改,请求大小超过 330
-
您的程序无效。您不能取消引用
.end()迭代器。 -
有时未定义行为的症状是它似乎有效。但是,您仍然不能取消引用过去的迭代器,所以停止这样做。
-
这不是您正在实施的 std::adjacent_difference 的受限版本吗?