迭代通过向量中的Struct成员的错误

时间:2015-02-13 00:07:24

标签: c++ vector struct

我的.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;
        }

虽然我很确定我的逻辑错误,但我目前得到的错误错误表达式必须有一个指针类型。被困在这一段时间,谢谢。

2 个答案:

答案 0 :(得分:1)

更改

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++)
  // ^^^^^

  

&#34;虽然我很确定我的逻辑错误,...&#34;

除非您提供有关逻辑要求的更多背景信息,否则无法回答。

答案 1 :(得分:1)

除了问题πάνταῥεῖ指出,你的代码目前有一个问题,除了浪费一些时间之外它根本没有完成任何事情。

考虑:

    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

现在代码实际上已经完成了某些事情,似乎不太可能我们最终意外地错误地写错了。

底线:标准算法是你的朋友。与人类朋友不同,他们喜欢被使用。