Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3371 razy

Omawiana wcześniej klasa QStringList bazuje zasadniczo na klasie QList, która jest klasą szablonową przeznaczoną do przechowywania zmiennych wybranego typu. Żeby skorzystać z tej klasy konieczne jest załączenie pliku QList.

Dodawanie elementów do obiektu klasy QList

Dodanie kolejnych elementów można przeprowadzić na kilka różnych sposobów, jednym z nich jest przypisanie w stylu C++ 11:

QList<int> list = {10, 20}; qDebug() << list;

Można również dodawać na różne sposoby kolejne elementy do takiej listy:

QList<int> list = {10, 20}; qDebug() << list; list.append(30); list.append({40, 50}); qDebug() << list; list.prepend(60); qDebug() << list; list << 70 << 80; qDebug() << list; list += 90; list += {100, 110}; qDebug() << list; list.push_back(120); list.push_front(130); qDebug() << list; list.insert(list.begin() + 2, 130); qDebug() << list;

Wynik działania powyższego kodu:

(10, 20)
(10, 20, 30, 40, 50)
(60, 10, 20, 30, 40, 50)
(60, 10, 20, 30, 40, 50, 70, 80)
(60, 10, 20, 30, 40, 50, 70, 80, 90, 100, 110)
(130, 60, 10, 20, 30, 40, 50, 70, 80, 90, 100, 110, 120)
(130, 60, 10, 130, 20, 30, 40, 50, 70, 80, 90, 100, 110, 120)

Pozyskiwanie informacji o liczbie elementów zawartych w liście

Istnieją dwie metody length i size, które zwracają liczbę elementów zawartych w obiekcie klasy QList.

Iterowanie po elementach listy

Iterowanie można wykonać na kilka sposobów. Pierwszy z nich wykorzystuje indeksowanie:

QList<int> list = {10, 20, 30}; for(int i = 0; i < list.length(); i++){ qDebug() << list.at(i); }

Można też iterować wykorzystując wskaźniki:

QList<int> list = {10, 20, 30}; for(QList<int>::iterator i = list.begin(); i < list.end(); i++){ qDebug() << *i; }

Jeżeli dodana została obsługa standardu C++ 11 można sobie ułatwić życie iterując w następujący sposób:

QList<int> list = {10, 20, 30}; for(auto element: list){ qDebug() << element; }

I w końcu można iterować po elementach listy w stylu Javy:

QList<int> list = {10, 20, 30}; QListIterator<int> javaStyleIterator(list); while (javaStyleIterator.hasNext()) qDebug() << javaStyleIterator.next();

Sprawdzanie, czy na liście znajduje się podany element

Za pomocą metody contains można sprawdzić, czy na liście znajduje się podany element. Oto przykład:

QList<int> list = {10, 20, 30}; if(list.contains(10)){ qDebug() << "Lista zawiera co najmniej jeden element rowny 10"; }

Znalezienie indeksu pierwszego lub ostatniego wystąpienia danej wartości w liście

By znaleźć ostatni lub pierwszy indeks, pod którym znajduje się szukana wartość należy skorzystać z metody indexOf lub lastIndexOf w następujący sposób:

QList<int> list = {10, 20, 30}; int index = list.indexOf(20); if(index != -1){ qDebug() << index; }

Usuwanie elementów z listy

Istnieje szereg metod, które umożliwiają usuwanie elementów z listy QList. Oto przykład ich użycia:

QList<int> data = {100, 200, 300, 400, 500, 600, 600, 700, 100}; qDebug() << data; data.removeAll(600); // usuwam wszystkie wartości równe 600 qDebug() << data; data.removeFirst(); // usuwam pierwszy element qDebug() << data; data.removeLast(); // usuwam ostatni element qDebug() << data; data.removeAt(2); // usuwam 3 element (indeksowanie od 0) qDebug() << data;

Wynik działania powyższego kodu:

(100, 200, 300, 400, 500, 600, 600, 700, 100)
(100, 200, 300, 400, 500, 700, 100)
(200, 300, 400, 500, 700, 100)
(200, 300, 400, 500, 700)
(200, 300, 500, 700)

Zdejmowanie pierwszego i ostatniego elementu listy

Metody takeFirst i takeLast umożliwiają zdjęcie pierwszego i ostatniego elementu listy z jednoczesnym jego zwróceniem.

QList<int> data = {100, 200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700, 800}; qDebug() << data; qDebug() << "Get first one: " << data.takeFirst(); qDebug() << "After remove first one: " << data; qDebug() << "Get last one: " << data.takeLast(); qDebug() << "After remove last one: " << data; qDebug() << "Get 3rd one: " << data.takeAt(2); qDebug() << "After remove 3rd one: " << data;

Wynik działania powyższego kodu:

(100, 200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700, 800)
Get first one:  100
After remove first one:  (200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700, 800)
Get last one:  800
After remove last one:  (200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700)
Get 3rd one:  400
After remove 3rd one:  (200, 300, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700)

Wyciąganie części elementów z wnętrza listy

Metoda mid umożliwia wyciągnięcie dowolnej liczby elementów z wnętrza listy. Oto przykład:

QList<int> data = {100, 200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700, 800}; QList<int> subData = data.mid(3, 5); qDebug() << data; qDebug() << subData;

Wynik działania powyższego kodu:

(100, 200, 300, 400, 500, 600, 600, 700, 100, 300, 400, 500, 600, 700, 800)
(400, 500, 600, 600, 700)

Przenoszenie elementu listy

Metoda move umożliwia przeniesienie elementu o podanym indeksie na inną pozycję:

QList<int> data = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}; qDebug() << data; data.move(5, 10); qDebug() << data;

Wynik działania powyższego kodu:

(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)

Łączenie dwóch list

Łączenie dwóch list umożliwia operator dodawania z podstawianiem += oraz dodawania +. Oto przykład:

QList<int> data = {0, 1, 2}; QList<int> data2 = {3, 4, 5, 6}; qDebug() << data + data2; data2 += data; qDebug() << data2;

Wynik działania powyższego kodu:

(0, 1, 2, 3, 4, 5, 6)
(3, 4, 5, 6, 0, 1, 2)

Zamiana elementów list miejscami

Jeżeli zachodzi konieczność zamiany miejscami elementów dwóch list, to najszybszą metodą wykonania tego zadania jest użycie metody swap w następujący sposób:

QList<int> data = {0, 1, 2}; QList<int> data2 = {3, 4, 5, 6}; qDebug() << "Before swap: data =" << data << "data2 =" << data2; data.swap(data2); qDebug() << "After swap: data =" << data << "data2 =" << data2;

Wynik działania powyższego kodu:

Before swap: data = (0, 1, 2) data2 = (3, 4, 5, 6)
After swap: data = (3, 4, 5, 6) data2 = (0, 1, 2)
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qlist.html - strona dokumentacji opisująca klasę QList
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.