QVector和QMap。程序崩溃,这个代码无效吗?

时间:2014-05-17 00:01:10

标签: c++ qt qtcore qmap qvector

我正在尝试将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());
    }
}

1 个答案:

答案 0 :(得分:1)

在你没有推进迭代器实例的意义上,你的循环似乎是“无穷无尽的”。这意味着,您很快会附加30个项目,ax向量容器将会饱和,然后您将进一步追加...您无法在没有任何问题的情况下执行此操作。

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

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());
}

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