Qt
Klasy kontenerów Qt
Szukaj…
Uwagi
Qt zapewnia własne klasy kontenerów szablonów. Wszystkie są domyślnie udostępniane. Zapewniają dwa rodzaje iteratorów (styl Java i styl STL).
Kolejne kontenery Qt obejmują: QVector, QList, QLinkedList, QStack, QQueue.
Kontenery asocjacyjne Qt obejmują: QMap, QMultiMap, QHash, QMultiHash, QSet.
Wykorzystanie QStack
QStack<T> to szablonowa klasa Qt zapewniająca stos. Jego analogiem w STL jest std::stack . Jest to ostatnia, pierwsza struktura (LIFO).
QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
cout << stack.pop() << endl;
}
Wyjdzie: trzeci, drugi, pierwszy.
QStack dziedziczy QVector więc jego realizacja jest zupełnie inny od STL. W STL std::stack jest zaimplementowany jako opakowanie do przekazania przekazywane jako argument szablonu (domyślnie deque). Nadal główne operacje są takie same dla QStack i dla std::stack .
Wykorzystanie QVector
QVector<T> zapewnia klasę szablonów dynamicznych tablic. Zapewnia lepszą wydajność w większości przypadków niż QList<T> więc powinien być pierwszym wyborem.
Można go zainicjować na różne sposoby:
QVector<int> vect;
vect << 1 << 2 << 3;
QVector<int> v {1, 2, 3, 4};
Najnowsza obejmuje listę inicjalizacji.
QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");
W ten sposób możesz uzyskać i-ty element wektora:
v[i] lub at[i]
Upewnij się, że i jest prawidłową pozycją, nawet at(i) nie sprawdza, to różnica od std::vector .
Wykorzystanie QLinkedList
W Qt powinieneś użyć QLinkedList na wypadek, gdybyś musiał zaimplementować połączoną listę .
Szybkie dodawanie, dodawanie, wstawianie elementów do QLinkedList - O (1) jest szybkie, ale wyszukiwanie indeksu jest wolniejsze niż w QList lub QVector - O (n). Jest to normalne, biorąc pod uwagę, że musisz iterować przez węzły, aby znaleźć coś na połączonej liście.
Pełna algorytmiczna tabela współrzędności znajduje się tutaj .
Aby wstawić niektóre elementy do QLinkedList , możesz użyć operatora <<() :
QLinkedList<QString> list;
list << "string1" << "string2" << "string3";
Aby wstawić elementy w środku QLinkedList lub zmodyfikować wszystkie lub niektóre jego elementy, możesz użyć iteratorów w stylu Java lub STL. Oto prosty przykład, w jaki sposób pomnożymy wszystkie elementy QLinkedList przez 2:
QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
*it *= 2;
}
QList
Klasa QList to klasa szablonów zapewniająca listy. Przechowuje elementy na liście, która zapewnia szybki dostęp w oparciu o indeks oraz wstawianie i usuwanie w oparciu o indeks.
Aby wstawić elementy do listy, możesz użyć operator<<() , insert() , append() lub prepend() . Na przykład:
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");
Aby uzyskać dostęp do elementu w określonej pozycji indeksu, możesz użyć operator[]() lub at() . at() może być szybszy niż operator[]() , nigdy nie powoduje głębokiej kopii kontenera i powinien działać w stałym czasie. Żadne z nich nie sprawdza argumentów. Przykłady:
if (list[0] == "mystring")
cout << "mystring found" << endl;
Lub
if (list.at(i) == "mystring")
cout << "mystring found at position " << i << endl;
Aby usunąć elementy, istnieją funkcje takie jak removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() , removeLast() lub removeOne() . Przykłady:
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");
Aby znaleźć wszystkie wystąpienia określonej wartości na liście, możesz użyć indexOf() lub lastIndexOf() . Przykład:
indexOf()
int i = list.indexOf("mystring");
if (i != -1)
cout << "First occurrence of mystring is at position " << i << endl;