[英]Error Iterating Through Members of a Struct in Vector
我的.h文件中有一個結構和兩個向量:
struct FTerm {
int m_delay;
double m_weight;
};
std::vector<FTerm> m_xterms;
std::vector<FTerm> m_yterms;
我已經讀過一個文件,以將值填充到m_xterms和m_yterms,並且我試圖遍歷這些值:
vector<FTerm>::iterator terms;
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
{
int delaylength = m_xterms->m_delay * 2; // Assume stereo
double weight = m_xterms->m_weight;
}
盡管我可以肯定我的邏輯有誤,但是我目前收到錯誤Error表達式必須具有指針類型。 堅持了一段時間,謝謝。
更改
int delaylength = m_xterms->m_delay * 2;
double weight = m_xterms->m_weight;
至
int delaylength = terms->m_delay * 2;
// ^^^^^
double weight = terms->m_weight;
// ^^^^^
您想通過以下方式訪問值
vector<FTerm>::iterator terms;
在循環內
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
// ^^^^^
“盡管我很確定我的邏輯是錯誤的,但是……”
除非您提供有關邏輯要求的更多上下文,否則無法回答。
伴隨着πάνταῖεῖ指出的問題,您的代碼當前存在一個問題,即它只是浪費了一些時間而無濟於事。
考慮:
for (terms = m_xterms.begin(); terms < m_xterms.end(); terms++)
{
int delaylength = m_xterms->m_delay * 2; // Assume stereo
double weight = m_xterms->m_weight;
}
delaylength
和weight
都在進入該塊時創建,並在退出時銷毀-因此我們創建了一對值,然后銷毀它們,並重復執行與向量中一樣多的項目-但永遠不要對我們計算的值。 它們只是經過計算,然后銷毀。
假設您已解決此問題,那么我也將編寫足夠不同的代碼,以至於根本就不會發生此問題。 例如,假設您確實要修改數組中的每個項目,而不僅僅是從中計算某些內容並丟棄結果。 您可以使用以下代碼執行此操作:
std::transform(m_xterms.begin(), m_xterms.end(), // Source
m_xterms.begin(), // destination
[](FTerm const &t) { return {t.m_delay * 2, t.m_weight}; });// computation
現在,代碼實際上完成了某些工作, 而最終導致我們意外地錯誤編寫它的可能性似乎要小得多。
底線:標准算法是您的朋友。 與人類朋友不同,他們喜歡被使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.