質問

QVectorのQVectorを持っています。そして、すべてのQVectorのすべての要素を収集して新しいQVectorを形成したいです。

現在こののようなコードを使用しています

QVector<QVector<T> > vectors;
// ...
QVector<T> collected;
for (int i = 0; i < vectors.size(); ++i) {
     collected += vectors[i];
}
.

しかし、operator+=は実際に各要素をQVectorに追加しているようです。それで、QVectorまたはより良い適切なタイプのより効力的な使用方法は、QVectorを置き換えますか?

役に立ちましたか?

解決

あなたが本当にが必要な場合は、次のようにします。

QVector< QVector<T> > vectors = QVector< QVector<T> >();

int totalSize = 0;
for (int i = 0; i < vectors.size(); ++i)
    totalSize += vectors.at(i).size();

QVector<T> collected;
collected.reserve(totalSize);

for (int i = 0; i < vectors.size(); ++i)
    collected << vectors[i];
.

しかし、これは少し時期尚早の最適化のように聞こえることに注意してください。 ドキュメントを指摘しています:

QVectorは、実際のデータの必要な最大2倍のメモリを事前に配置することで、再割り当ての数を減らすようにします。

だからあなたが本当にあなたのパフォーマンスを向上させることができる限りこのようなことをしないでください。それを簡単に保ちます(あなたの現在の方法のように)

o(1)の追加要件に応じて編集: あなたがランダムに挿入しているなら、それはリンクリストあなたは(それがあなたが言及したのと同じ) Qtコンテナのドキュメント。

他のヒント

for (int i = 0; i < vectors.size(); ++i) {
    for(int k=0;k<vectors[i].size();k++){
        collected.push_back(vectors[i][k]);
    }
}
.

外部ループ:ベクトルから各ベクトルを取り出す
内部ループ:iThベクトルの各要素を取り出して、収集したを押してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top