我正在尝试将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());
}
}
答案 0 :(得分: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());
}
免责声明:我没有尝试编译此代码,但它应该证明这个概念。