Sök…


Anmärkningar

Qt tillhandahåller sina egna mallar för klasser. De är alla implicit delade. De tillhandahåller två typer av iteratorer (Java-stil och STL-stil.)

Qt-sekvensbehållare inkluderar: QVector, QList, QLinkedList, QStack, QQueue.

Qt-associerande behållare inkluderar: QMap, QMultiMap, QHash, QMultiHash, QSet.

QStack-användning

QStack<T> är en mall Qt-klass som ger stack. Dess analog i STL är std::stack . Det är sist i, först ut struktur (LIFO).

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

Det kommer att matas ut: Tredje, andra, första.

QStack ärver från QVector så dess implementering är helt annorlunda från STL. I STL implementeras std::stack som ett omslag för att skriva som skickas som ett mallargument (tapp som standard). QStack fortfarande desamma för QStack och för std::stack .

QVector-användning

QVector<T> tillhandahåller en dynamisk matrismallklass. Det ger bättre prestanda i de flesta fall än QList<T> så det bör vara första valet.

Det kan initialiseras på olika sätt:

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

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

Det senaste innebär initialiseringslista.

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

Du kan få det i-th vektorelementet på detta sätt:

v[i] eller at[i]

Se till att i har en giltig position, även at(i) inte gör en kontroll, detta är en skillnad från std::vector .

QLinkedList-användning

I Qt bör du använda QLinkedList om du behöver implementera länkad lista .

Det är snabbt att lägga till, beroende, infoga element i QLinkedList - O (1), men indexuppslaget är långsammare än i QList eller QVector - O (n). Detta är normalt att ta hänsyn till att du måste upprepa igenom noder för att hitta något i länkad lista.

Fullständig algoritmisk kompexitetstabell finns här .

Bara för att infoga några element i QLinkedList du använda operatören <<() :

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

För att infoga element i mitten av QLinkedList eller ändra alla eller några av dess element kan du använda Java-stil eller STL-iteratorer. Här är ett enkelt exempel på hur vi multiplicerar alla element i QLinkedList med 2:

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

QList

QList är en mallklass som innehåller listor. Det lagrar objekt i en lista som ger snabb indexbaserad åtkomst och indexbaserade infogningar och borttagningar.

För att infoga objekt i listan kan du använda operator<<() , insert() , append() eller prepend() . Till exempel:

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");

För att komma åt objektet vid en viss indexposition kan du använda operator[]() eller at() . at() kan vara snabbare än operator[]() , det orsakar aldrig djup kopia av behållaren och bör fungera i konstant tid. Ingen av dem gör argumentkontroll. Exempel:

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

Eller

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

För att ta bort objekt finns det funktioner som removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() , removeLast() eller removeOne() . Exempel:

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");

För att hitta alla förekomster av ett visst värde i en lista kan du använda indexOf() eller lastIndexOf() . Exempel:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow