Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 63

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

Qt ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ QVector<T>, QLinkedList<T> ΠΈ QList<T>, Ρ‚Π°ΠΊ ΠΈ ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ QMap<K, T> ΠΈ QHash<K, T>. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ элСмСнты Π² Π½ΠΈΡ… хранятся ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… хранятся ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡β€”Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Qt Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π°Π΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. НапримСр, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ qSort() сортируСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, a qBinaryFind() выполняСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Π² упорядочСнном ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ STL.

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ STL ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° STL ΡƒΠΆΠ΅ установлСна Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Qt ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ. Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов STL достаточно Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Π²Π΅Π±-сайта STL ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«SGIΒ»: http://www.sgi.com/tech/stl/.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим классы QString, QByteArray ΠΈ QVariant, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. QString прСдставляСт собой 16-Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ строку символов Π² ΠΊΠΎΠ΄Π΅ Unicode, которая ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ интСрфСйсС Qt. QByteArray являСтся массивом 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… символов Ρ‚ΠΈΠΏΠ° char, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для хранСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. QVariant ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ² Π‘++ ΠΈ Qt.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

Π’Π΅ΠΊΡ‚ΠΎΡ€ QVector<T> прСдставляСт собой структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ элСмСнты содСрТатся Π² сосСдних участках ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π’Π΅ΠΊΡ‚ΠΎΡ€ отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ массива Π‘++ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚ свой собствСнный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π° выполняСтся достаточно эффСктивно, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ вставка Π² Π΅Π³ΠΎ сСрСдину ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСэффСктивны.

Рис. 11.1. Π’Π΅ΠΊΡ‚ΠΎΡ€ чисСл Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности.

Если Π½Π°ΠΌ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π΅Π³ΠΎ элСмСнтов, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ [ ] для заполнСния Π΅Π³ΠΎ элСмСнтами; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈΠ±ΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

QVector<double> vect(3);

vect[0] = 1.0;

vect[1] = 0.540302;

vect[2] = -0.416147;

НиТС Ρ‚Π° ΠΆΠ΅ самая Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ объявлСния пустого Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ append(), которая добавляСт элСмСнты Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

QVector<double> vect;

vect.append(1.0);

vect.append(0.540302);

vect.append(-0.416147);

ВмСсто append() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <<:

vect << 1.0 << 0.540302 << -0.416147;

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» просмотра элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° [ ] ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ count():

double sum = 0.0;

for (int i = 0; i < vect.count(); ++i)

sum += vect[i];

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ присвоСно ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ стандартного конструктора класса элСмСнта. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Вставка элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ Π² сСрСдину Π²Π΅ΠΊΡ‚ΠΎΡ€Π° QVector<T>, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· этих ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСэффСктивны для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Qt ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ связанный список QLinkedList<T> β€” структуру Π΄Π°Π½Π½Ρ‹Ρ…, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π΅ Π² сосСдних участках памяти. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², связанныС списки Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ элСмСнтам, Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ «константноС врСмя» выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вставки ΠΈ удалСния.

Рис. 11.2. Бвязанный список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° double.

БвязанныС списки Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ [ ], поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ всСм элСмСнтам. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнтов. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° выполняСтся вставка строки Β«Tote HosenΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ Β«ClashΒ» ΠΈ Β«RamonesΒ»:

QLinkedList<QString> list;

list.append("Clash");

list.append("Ramones");

QLinkedList<QString>::iterator i = list.find("Ramones");

list.insert(i, "Tote Hosen");

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΠΎΠ·ΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ QList<T> являСтся «массивом—списком», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сочСтаСт Π² ΠΎΠ΄Π½ΠΎΠΌ классС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ прСимущСства QVector<T> ΠΈ QLinkedList<T>. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ, ΠΈ Π΅Π³ΠΎ интСрфСйс основан Π½Π° индСксировании ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ примСняСмому Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ QVector. Вставка Π² ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ послСднСго элСмСнта списка QList<T> выполняСтся ΠΎΡ‡Π΅Π½ΡŒ быстро, Π° вставка Π² сСрСдину выполняСтся быстро для списков, содСрТащих Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ тысячи элСмСнтов. Если Π½Π΅ трСбуСтся Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² сСрСдину Π±ΠΎΠ»ΡŒΡˆΠΈΡ… списков ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты списка Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ адрСса памяти, Ρ‚ΠΎ QList<T> ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния.

Класс QStringList являСтся подклассом QList<QString>, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ интСрфСйсС Qt. ΠšΡ€ΠΎΠΌΠ΅ наслСдуСмых ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… возмоТности класса ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ строк. Класс QStringList Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ этой Π³Π»Π°Π²Ρ‹.

QStack<T> ΠΈ QQueue<T> β€” Π΅Ρ‰Π΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… подклассов: QStack<T> β€” это Π²Π΅ΠΊΡ‚ΠΎΡ€, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ прСдусмотрСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push(), pop() ΠΈ top(). QQueue<T> β€” это список, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ прСдусмотрСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enqueue(), dequeue() ΠΈ head().

Π’ΠΎ всСх Π΄ΠΎ сих ΠΏΠΎΡ€ рассмотрСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Ρ‚ΠΈΠΏ элСмСнта T ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int ΠΈΠ»ΠΈ double), ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ»ΠΈ классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ стандартный конструктор (Ρ‚.Π΅. конструктор Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²), конструктор копирования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания. К Ρ‚Π°ΠΊΠΈΠΌ классам относятся QByteArray, QDateTime, QRegExp, QString ΠΈ QVariant. Π­Ρ‚ΠΈΠΌ свойством Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ классы Qt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ QObject, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послСдний Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ конструктора копирования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это Π½Π΅ составляСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QObject.

Π’ΠΈΠΏ T Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ; Π² этом случаС слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ рядом стоящиС ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС компилятор Π±ΡƒΠ΄Π΅Ρ‚ сбит с Ρ‚ΠΎΠ»ΠΊΡƒ, воспринимая >> ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. НапримСр:

QList<QVector<double> > list;

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ упомянутых Ρ‚ΠΈΠΏΠΎΠ² Π² качСствС Ρ‚ΠΈΠΏΠ° элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ любой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ описанным Ρ€Π°Π½Π΅Π΅ критСриям. НиТС даСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса:

01 class Movie

02 {

03 public:

04 Movie(const QString &title = "", int duration = 0);

05 void setTitle(const QString &title) { myTitle = title; }

06 QString title() const { return myTitle; }

07 void setDuration(int duration) { myDuration = duration; }

08 QString duration() const { return myDuration; }

09 private:

10 QString myTitle;

11 int myDuration;

12 };

Π­Ρ‚ΠΎΡ‚ класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ (хотя ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²). Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ конструктор копирования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π‘++ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ этом классС достаточно ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΅Π³ΠΎ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ, поэтому Π½Π°ΠΌ Π½Π΅Ρ‚ нСобходимости Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ свои собствСнныС конструктор копирования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания.

Qt ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ элСмСнтам ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² стилС Java ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² стилС STL. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π² стилС Java Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² стилС STL Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Qt ΠΈ STL.

Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ классом—контСйнСром ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² стилС Java: ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°ΠΊ для чтСния, Ρ‚Π°ΠΊ ΠΈ для записи. Классами ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ QVectorIterator<T>, QLinkedListIterator<T> ΠΈ QListIterator<T>. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ чтСния—записи ΠΈΠΌΠ΅ΡŽΡ‚ слово Mutable (ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹ΠΉ) Π² ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, QMutableVectorIterator<T>). Π’ дальнСйшСм ΠΌΡ‹ основноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ списка QList; ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ связанных списков ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс.