1

我试图将 QMap 中的值放入 QVector,但程序崩溃并且我没有得到好的调试信息。我不习惯 C++ 容器类,并假设我做了一些非法的事情。代码如下所示:

MyClass::MyClass()
{
    myQMap = new QMap<QString, QString>();
}

void someFunc(QString data1, QString data2)
{
    QVector<double> a(30);
    QVector<double> x(30);

    myQMap->insert(data1, data2);

    QMap<QString, QString>::const_iterator i = myQMap->constBegin();
    while(i != myQMap->constEnd())
    {
        a.append(i.key().toDouble());
        x.append(i.value().toDouble());
    }
}
4

1 回答 1

1

从您没有推进迭代器实例的意义上说,您的循环似乎将是“无止境的”。这意味着,您将很快追加 30 个项目,a并且x矢量容器将饱和,然后您将进一步追加......您无法做到这一点而没有任何问题。

简单的解决方法是使用类似于以下代码段的内容来增加迭代器:

QMap<QString, QString>::const_iterator i;
for (i = myQMap->constBegin(); i != myQMap->constEnd(); ++i)
{
    a.append(i.key().toDouble());
    x.append(i.value().toDouble());
}

话虽如此,当您可以按如下方式使用 foreach 时,我不确定您为什么要手动执行此迭代器逻辑:

foreach (const QPair<QString, QString> &myPair, myQMap)
{
    a.append(myPair.first.toDouble());
    x.append(myPair.second.toDouble());
}

免责声明:我没有尝试编译此代码,但它应该演示这个概念。

于 2014-05-17T01:58:45.223 回答