Zoeken…


Opmerkingen

Qt biedt zijn eigen sjablooncontainerklassen. Ze worden allemaal impliciet gedeeld. Ze bieden twee soorten iterators (Java-stijl en STL-stijl.)

Qt sequentiële containers zijn onder meer: QVector, QList, QLinkedList, QStack, QQueue.

Qt associatieve containers omvatten: QMap, QMultiMap, QHash, QMultiHash, QSet.

QStack gebruik

QStack<T> is een sjabloon Qt-klasse die stapel biedt. De analoge in STL is std::stack . Het is last in, first out structuur (LIFO).

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

Het zal uitvoeren: derde, tweede, eerste.

QStack neemt over van QVector dus de implementatie is heel anders dan STL. In STL wordt std::stack geïmplementeerd als een wrapper om te worden doorgegeven als een sjabloonargument (standaard deque). De hoofdbewerkingen zijn nog steeds hetzelfde voor QStack en voor std::stack .

QVector gebruik

QVector<T> biedt dynamische array-sjabloonklasse. Het biedt in de meeste gevallen betere prestaties dan QList<T> dus het zou de eerste keuze moeten zijn.

Het kan op verschillende manieren worden geïnitialiseerd:

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

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

De nieuwste bevat initialisatielijst.

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

Je kunt het i-de element vector op deze manier krijgen:

v[i] of at[i]

Zorg ervoor dat i een geldige positie is, zelfs at(i) maakt geen vinkje, dit is een verschil met std::vector .

QLinkedList gebruik

In Qt moet u QLinkedList gebruiken voor het geval u een gelinkte lijst moet implementeren.

Het is snel om elementen toe te voegen, voor te zetten, in te voegen in QLinkedList - O (1), maar het opzoeken van de index is langzamer dan in QList of QVector - O (n). Dit is normaal als je er rekening mee houdt dat je door knooppunten moet itereren om iets in een gekoppelde lijst te vinden.

Volledige algoritmische compexity tafel kan worden gevonden hier .

Om enkele elementen in QLinkedList in te QLinkedList , kunt u operator <<() :

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

Om elementen in het midden van QLinkedList in te voegen of alle of enkele elementen ervan te wijzigen, kunt u iterators in Java-stijl of STL-stijl gebruiken. Hier is een eenvoudig voorbeeld hoe we alle elementen van QLinkedList met 2 vermenigvuldigen:

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

QList

De klasse QList is een sjabloonklasse die lijsten biedt. Het slaat items op in een lijst die snelle indexgebaseerde toegang en indexgebaseerde invoegingen en verwijderingen biedt.

Om items in de lijst in te voegen, kunt u operator<<() , insert() , append() of prepend() . Bijvoorbeeld:

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

Om toegang te krijgen tot het item op een bepaalde indexpositie, kunt u operator[]() of at() . at() kan sneller zijn dan operator[]() , het veroorzaakt nooit een diepe kopie van de container en zou constant moeten werken. Geen van beiden voert argumentcontrole uit. Voorbeelden:

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

Of

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

Om items te verwijderen, zijn er functies zoals removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() , removeLast() of removeOne() . Voorbeelden:

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

Als u alle exemplaren van een bepaalde waarde in een lijst wilt vinden, kunt u indexOf() of lastIndexOf() . Voorbeeld:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow