Domanda

Ho un QVector di QVector.E voglio raccogliere tutti gli elementi in tutti i qvectors per formare un nuovo qvector.

Attualmente uso il codice come questo

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

Ma sembra che il operator+= stia effettivamente appendendo ogni elemento al QVector.Quindi c'è un utilizzo più efficace di generatori di generatori di generazione o un tipo migliore adatto, sostituire QVector?

È stato utile?

Soluzione

Se tu davvero devi, allora farei qualcosa come:

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];
.

Ma si prega di notare che questo suona un po 'come l'ottimizzazione prematura. Come La documentazione sottolinea:

.

QVector tenta di ridurre il numero di riallocazioni prefigendo fino a due volte più memoria delle esigenze effettive dei dati.

Quindi non fare questo genere di cose a meno che tu non sia davvero sicuro che migliorerà la tua performance. Tienilo semplice (come il tuo modo attuale di farlo).

Modifica in risposta al tuo requisito aggiuntivo di O (1): Bene, se stai inserendo a caso è un elenco collegato ma se Stai solo aggiungendo (come è tutto ciò che hai menzionato) hai già ammortizzato o (1) con il qvector. Dai un'occhiata a La documentazione per i contenitori QT .

Altri suggerimenti

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

Loop esterno: Togli ogni vettore dai vettori Loop interno: estrai ogni elemento nel vettore I'th e spingere in raccolta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top