Qt
Qt-behållarklasser
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;