-1

我正在尝试通过使用向量中的 (max_element-min_element) 来设置浮点数的值。我正在循环其中的几个,因此是浮点向量和向量向量。

我收到以下错误:

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:这个问题的解决方案是这个问题的第一条评论。我使用的一些向量是空的,这导致了错误。

编辑2:

@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 这是幅值存储中的值之一)

我应该一直在做:

for (int i = 0; i < amplitudeStorage.size(); i++)
                {
                    cout << amplitudeStorage[i] << endl;
                }
4

3 回答 3

0

您的编译器可能试图警告您,当amplitudeStorage 向量为空时,您无法正确引用amplitudeStorage[i] 的任何i 值。要么在开始时调整幅值存储的大小以匹配 vectorStorage 的大小,要么使用push_back. 我更喜欢push_back. 这是一个完整的示例(它还避免了按值传递向量,并纠正了代码中使用int索引数据结构的问题,该数据结构的大小本身可以增长到超过可以容纳的最大值int)。

请注意,此代码在 C++11 中,因为它使用基于范围的 for 循环。您可能需要告诉编译器打开对 C++11 的支持。C++11 中有很多不错的便利。

#include <vector>
#include <algorithm>

using namespace std;

float WaveAmplitude(const vector<float>& dataVectorr) {
  return (*max_element(begin(dataVectorr), end(dataVectorr)))
    - (*min_element(begin(dataVectorr), end(dataVectorr)));
}

vector<float> amplitudeStorage;
vector<vector<float>> vectorStorage;    

int main(void) {
  // Populate vectorStorage somehow here, replacing this comment.
  amplitudeStorage.clear();
  for (const auto& wave : vectorStorage)
    {
      amplitudeStorage.push_back(WaveAmplitude(wave));
    }
  return 0;
}
于 2016-04-03T10:50:27.607 回答
0

我使用的一些向量是空的,这导致了错误。

于 2016-04-05T16:10:28.853 回答
-1

请参阅完整的工作示例。我尝试共同编译,没有问题。

#include <vector>
#include <algorithm>

using namespace std;

vector<float> amplitudeStorage;
vector< vector<float> > vectorStorage;

void AssignWaveAmplitude(float& amplitudeVariable, const vector<float>& dataVectorr) {
    if( dataVectorr.size() ) {
        amplitudeVariable = 0;
        return;
    }
    amplitudeVariable = (*max_element(dataVectorr.begin(), dataVectorr.end())) - 
       (*min_element(dataVectorr.begin(), dataVectorr.end()));
}

main(){

    for (int i = 0; i < amplitudeStorage.size(); i++) {
        AssignWaveAmplitude(amplitudeStorage[i], vectorStorage[i]);
    }

}
于 2016-04-03T10:18:22.720 回答