簡體   English   中英

通過向量中的結構的成員迭代錯誤

[英]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;
    }

delaylengthweight都在進入該塊時創建,並在退出時銷毀-因此我們創建了一對值,然后銷毀它們,並重復執行與向量中一樣多的項目-但永遠不要對我們計算的值。 它們只是經過計算,然后銷毀。

假設您已解決此問題,那么我也將編寫足夠不同的代碼,以至於根本就不會發生此問題。 例如,假設您確實要修改數組中的每個項目,而不僅僅是從中計算某些內容並丟棄結果。 您可以使用以下代碼執行此操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM