我正在尝试使用向量中的(max_element-min_element)来设置float的值。我正在循环其中的几个,因此浮点矢量和矢量矢量。
我收到以下错误:
Expression: Vector iterator not dereferencable
vector<float> amplitudeStorage;
vector<vector<float>> vectorStorage;
int main(){
for (int i = 0; i < amplitudeStorage.size(); i++)
{
AssignWaveAmplitude(amplitudeStorage[i], vectorStorage[i]);
}
}
它发生在函数调用上。该函数如下所示:
void AssignWaveAmplitude(float amplitudeVariable, vector<float> dataVectorr)
{
amplitudeVariable = (*max_element(begin(dataVectorr), end(dataVectorr))) - (*min_element(begin(dataVectorr), end(dataVectorr)));
}
有谁知道如何解决这个问题?
非常感谢。
EDIT1:此问题的解决方案是对此问题的第一个评论。我使用的一些向量是空的,这导致了错误。
EDIT2:
@WhozCraig所以现在我已经这样做了:
for (int i = 0; i < amplitudeStorage.size(); i++) {
amplitudeStorage[i] =AssignWaveAmplitude(vectorStorage[i]);
}
和此:
float AssignWaveAmplitude( vector<float> dataVectorr) {
return (*max_element(begin(dataVectorr), end(dataVectorr))) - (*min_element(begin(dataVectorr), end(dataVectorr)));
}
但是花车仍然出现在同一个数字上。知道为什么吗?
EDIT3:原因是浮标出错的原因是因为我输错了。
我在做:
cout << lowerBackYAmplitude<< endl
(这是amplitudeStorage中的值之一)
我应该这样做:
for (int i = 0; i < amplitudeStorage.size(); i++)
{
cout << amplitudeStorage[i] << endl;
}
答案 0 :(得分:0)
当amplitudeStorage向量为空时,您的编译器可能会尝试警告您无法正确引用amplitudeStorage [i]获取i的任何值。调整amplitudeStorage的大小以匹配开头的vectorStorage的大小,或使用push_back
。我更喜欢push_back
。这是一个完整的示例(它还避免按值传递向量,并纠正代码中使用int
索引数据结构的问题,该数据结构的大小本身可以增长到超过最大值{{1}可以坚持)。
请注意,此代码在C ++ 11中,因为它使用基于范围的for循环。您可能需要告诉编译器打开对C ++ 11的支持。 C ++ 11中有许多不错的便利。
int
答案 1 :(得分:0)
我使用的一些向量是空的,这导致了错误。
答案 2 :(得分:-1)
查看完整的工作示例。我尝试编译,没有问题。
function myFunc(a, b, c){
console.log(arguments.callee.length, myFunc.length, this.length);
}
myFunc("a","b"); //=> prints 3 3 0