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;