2

-要素にいくつかの要素がありQMap<double, double> aます。ここで、 のいくつかの値のベクトルを取得したいと考えていますa。最も簡単なアプローチは(私にとって)次のとおりです。

int length = x1-x0;
QVector<double> retVec;
for(int i = x0; i < length; i++)
{
    retVec.push_back(a.values(i));
}

コピーする要素の停止位置および開始位置として および を指定しますx1x0しかし、この for ループを使用する代わりに、より高速な方法はありますか?

編集:「より速い」とは、入力が速いことと(指摘されているように不可能です)実行が速いことの両方を意味します。指摘されているvalues(i)ように、期待どおりに動作しないため、better_working の代替品が見つかるまで疑似コードとしてここに残します。

4

2 に答える 2

2

多分これはうまくいきます:

QVector<double>::fromList(a.values().mid(x0, length));

アイデアは、すべての値を のリストとして取得し、double関心のあるサブリストを抽出し、既存の の静的メソッドを使用してそのリストからベクトルを作成することですQVector

編集

コメントと更新された質問で示唆されているように、入力は遅くなりますが、より高速なソリューションに従います。

QVector<double> v{length};
auto it = a.cbegin()+x0;
for(auto last = it+length; it != last; it++) {
    v.push_back(it.value());
}

キーリストの実際の長さを処理することを想定しているため、x0有効であり、ガードも追加する価値はありません。lengtha.cbegin()+x0it != a.cend()

于 2015-11-14T10:07:56.870 に答える