Ricerca…


Osservazioni

Qt fornisce le proprie classi di contenitori template. Sono tutti implicitamente condivisi. Forniscono due tipi di iteratori (stile Java e stile STL).

I contenitori sequenziali Qt includono: QVector, QList, QLinkedList, QStack, QQueue.

I contenitori associativi Qt includono: QMap, QMultiMap, QHash, QMultiHash, QSet.

QStack di utilizzo

QStack<T> è una classe Qt di template che fornisce stack. Il suo analogo in STL è std::stack . È l'ultimo, la prima struttura (LIFO).

QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
    cout << stack.pop() << endl;
}

Produrrà: Terzo, Secondo, Primo.

QStack eredita da QVector quindi la sua implementazione è abbastanza diversa da STL. In STL std::stack è implementato come wrapper da digitare passato come argomento template (deque di default). Le operazioni principali ancora sono le stesse per QStack e per std::stack .

Uso di QVector

QVector<T> fornisce una classe template array dinamica. Fornisce prestazioni migliori nella maggior parte dei casi rispetto a QList<T> quindi dovrebbe essere la prima scelta.

Può essere inizializzato in vari modi:

QVector<int> vect;
vect << 1 << 2 << 3;

QVector<int> v {1, 2, 3, 4};

L'ultimo include l'elenco di inizializzazione.

QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");

Puoi ottenere l'elemento i-esimo del vettore in questo modo:

v[i] o at[i]

Assicurati che i sia una posizione valida, anche at(i) non effettua un controllo, questa è una differenza rispetto a std::vector .

Uso di QLinkedList

In Qt dovresti usare QLinkedList nel caso sia necessario implementare l' elenco collegato .

È veloce aggiungere, anteporre, inserire elementi in QLinkedList - O (1), ma la ricerca dell'indice è più lenta che in QList o QVector - O (n). È normale prendere in considerazione che devi scorrere i nodi per trovare qualcosa nella lista collegata.

La tabella completa della compexity algoritmica può essere trovata qui .

Solo per inserire alcuni elementi in QLinkedList è possibile utilizzare l'operatore <<() :

QLinkedList<QString> list;
list << "string1" << "string2" << "string3";

Per inserire elementi nel mezzo di QLinkedList o modificare tutti o alcuni dei suoi elementi è possibile utilizzare gli stili iteratori stile Java o STL. Ecco un semplice esempio di come moltiplichiamo tutti gli elementi di QLinkedList per 2:

QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
    *it *= 2;
}

QList

La classe QList è una classe template che fornisce elenchi. Memorizza gli articoli in un elenco che fornisce accesso rapido basato su indice e inserzioni e rimozioni basate su indici.

Per inserire elementi nell'elenco, puoi utilizzare l' operator<<() , insert() , append() o prepend() . Per esempio:

operator<<()

QList<QString> list;
list << "one" << "two" << "three";

insert()

QList<QString> list;
list << "alpha" << "beta" << "delta";
list.insert(2, "gamma");

append()

QList<QString> list;
list.append("one");
list.append("two");
list.append("three");

prepend()

QList<QString> list;
list.prepend("one");
list.prepend("two");
list.prepend("three");

Per accedere all'elemento in una particolare posizione di indice, è possibile utilizzare l' operator[]() o at() . at() può essere più veloce operator[]() , non causa mai una copia profonda del contenitore e dovrebbe funzionare in tempo costante. Nessuno dei due controlla gli argomenti. Esempi:

if (list[0] == "mystring")
    cout << "mystring found" << endl;

O

if (list.at(i) == "mystring")
    cout << "mystring found at position " << i << endl;

Per rimuovere elementi, esistono funzioni come removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() , removeLast() o removeOne() . Esempi:

takeFirst()

// takeFirst() removes the first item in the list and returns it
QList<QWidget *> list;
...
while (!list.isEmpty())
    delete list.takeFirst();

removeOne()

// removeOne() removes the first occurrence of value in the list
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeOne("sun");

Per trovare tutte le occorrenze di un determinato valore in un elenco, è possibile utilizzare indexOf() o lastIndexOf() . Esempio:

indexOf()

int i = list.indexOf("mystring");
if (i != -1)
    cout << "First occurrence of mystring is at position " << i << endl;


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow