我想通過使用(max_element-min_element)從一個向量來設置一個浮點值。我正在循環其中幾個,因此矢量和矢量的矢量。向量迭代器不可忽略C++
,我發現了以下錯誤:
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)));
}
有誰知道如何解決這個問題?
非常感謝。
編輯1:解決這個問題是對這個問題的第一個評論。我使用的一些向量是空的,導致了錯誤。
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)));
}
但花車都還站出來爲同一個號碼。任何想法爲什麼?
編輯3:原來,爲什麼浮動錯誤是因爲我錯誤地輸出它們。
我做: cout << lowerBackYAmplitude<< endl
(這是amplitudeStorage的一個值)
我應該做的事情:
for (int i = 0; i < amplitudeStorage.size(); i++)
{
cout << amplitudeStorage[i] << endl;
}
這是一個想法。將其他過高的單行分解成幾部分,並查看哪些行程中的哪一行導航引用了最終迭代器。我猜,'dataVector'是空的。當然,如果沒有MCVE,那麼你會得到很多。 – WhozCraig
@WhozCraig yep只是檢查了代碼,一些存儲在vectorStorage中的向量是空的。現在沒有錯誤,但'amplitudeVariable'現在總是以'-1.07374e + 08'出現。任何想法爲什麼? –
大聲笑。不是線索,未初始化某些東西?但至少你知道爲什麼這個無效的引用是浮出水面的。很高興你找到*那*。順便說一句,也許給你的鑽機上的複製緩衝區休息一下,並通過'const'引用傳遞該矢量,而不是通過值複製。只是說... = P祝你好運。 – WhozCraig