繁体   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