vector iterator not dereferencable C ++

时间:2016-04-03 10:09:45

标签: c++ function 2d-vector

我正在尝试使用向量中的(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;
                }

3 个答案:

答案 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