Qt ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°: ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ Java ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ STL. ΠΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ Π² ΡΡΠΈΠ»Π΅ Java Π»Π΅Π³ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ STL Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠ΅ ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ Qt ΠΈ STL.
Π‘ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌβΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ Java: ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ²Π»ΡΡΡΡΡ QVectorIterator<T>, QLinkedListIterator<T> ΠΈ QListIterator<T>. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ΅Π½ΠΈΡβΠ·Π°ΠΏΠΈΡΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ»ΠΎΠ²ΠΎ Mutable (ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΡΠΉ) Π² ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, QMutableVectorIterator<T>). Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ΄Π΅Π»ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΡΠΏΠΈΡΠΊΠ° QList; ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈ Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
Π ΠΈΡ. 11.3. ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ Java.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ Java Π½Π΅ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ, ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ» Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
QList<double> list;
β¦
QListIterator<double> i(list);
while (i.hasNext()) {
do_something(i.next());
}
ΠΡΠ΅ΡΠ°ΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ, Π΄Π»Ρ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ hasNext() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°. Π€ΡΠ½ΠΊΡΠΈΡ next() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π² ΡΠ»Π΅Π΄ΡΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
ΠΡΠΎΡ ΠΎΠ΄ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Ρ ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ toBack() Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
QListIterator<double> i(list);
i.toBack();
while (i.hasPrevious()) {
do_something(i.previous());
}
Π€ΡΠ½ΠΊΡΠΈΡ hasPrevious() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ»Π΅Π²Π° ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°; ΡΡΠ½ΠΊΡΠΈΡ previous() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ»Π΅Π²Π° ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π½Π°Π·Π°Π΄ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π΄ΡΡΠ³ΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ next() ΠΈ previous(): ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π» ΠΈΡΠ΅ΡΠ°ΡΠΎΡ.
Π ΠΈΡ. 11.4. ΠΠ»ΠΈΡΠ½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ previous() ΠΈ next() Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ Java.
ΠΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ Π·Π°ΠΏΠΈΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ (mutable iterators) ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Ρ ΠΎΠ΄Π΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ². Π ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΡΠΈΠΊΠ»Π΅ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°:
QMutableListIterator<double> i(list);
while (i.hasNext()) {
if (i.next() < 0.0)
i.remove();
}
Π€ΡΠ½ΠΊΡΠΈΡ remove() Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. ΠΠ½Π° ΡΠ°ΠΊ ΠΆΠ΅ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΏΡΠΈ ΠΏΡΠΎΡ ΠΎΠ΄Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ:
QMutableListIterator<double> i(list);
i.toBack();
while (i.hasPrevious()) {
if (i.previous() < 0.0)
i.remove();
}
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ Π·Π°ΠΏΠΈΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ Java ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ setValue(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΠΈΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ:
QMutableListIterator<double> i(list);
while (i.hasNext()) {
int val = i.next();
if (val < 0.0)
i.setValue(-val);
}
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ insert(). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΎΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π° Π½ΠΈΠΌ.
ΠΡΠΎΠΌΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ Java ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² C<T> ΠΈΠΌΠ΅Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ STL Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²: Π‘<Π’>::iterator ΠΈ C<T>::const_iterator. ΠΠ½ΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ const_iterator Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° begin() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π² ΡΡΠΈΠ»Π΅ STL, ΡΡΡΠ»Π°ΡΡΠΈΠΉΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, list[0]), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° end() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΡΡΠ»Π°ΡΡΠΈΠΉΡΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Β«ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Β» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, list[5] Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 5). ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΡΡΠΎΠΉ, ΡΡΠ½ΠΊΡΠΈΠΈ begin() ΠΈ end() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, Ρ ΠΎΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ isEmpty().
Π ΠΈΡ. 11.5. ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ STL.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ STL ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π‘++. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ++ ΠΈ ββ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ½Π°ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ * Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ»Ρ Π²Π΅ΠΊΡΠΎΡΠ° vector<T> ΡΠΈΠΏΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² iterator ΠΈ const_iterator ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ typedef Π΄Π»Ρ Π’ * ΠΈ const T *. (Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ QVector<T> Ρ ΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ.)
Π ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ QList<double> Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ:
QList<double>::iterator i = list.begin();
while (i ! = list.end()) {
*i = qAbs(*i);
++i;
}
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Qt Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π² ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π² ΡΡΠΈΠ»Π΅ STL, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π² ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΡ ΠΊΠΎΠΏΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π² ΡΠΈΠΊΠ»Π΅ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠ° QList<int>, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QSplitter::sizes():
QList<int> list = splitter->sizes();
QList<int>::const_iterator i = list.begin();
while (i != list.end()) {
do_something(*i);
++i;
}
ΠΠΈΠΆΠ΅ Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
// ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄
QList<int>::const_iterator i = splitter->sizes().begin();
while (i != splitter->sizes().end()) {
do_something(*i);
++i;
}
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ QSplitter::sizes() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ QList<int> ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΡΠ²ΠΎΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅. ΠΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π‘++ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΠΈΡ Π΅Π³ΠΎ Π΅ΡΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΡΡΠ°Π²Π»ΡΡ Π½Π°ΠΌ Β«ΠΏΠΎΠ²ΠΈΡΡΠΈΠΉΒ» ΠΈΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠ΅Π»ΠΎ Π΅ΡΠ΅ ΡΡΡΠ³ΡΠ±Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠΈΠΊΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ QSplitter::sizes() Π΄ΠΎΠ»ΠΆΠ½Π° Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ·-Π·Π° Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ splitter->sizes().end(). ΠΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΡΡΠΈΠ»Π΅ STL, Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π² ΡΠΈΠΊΠ»Π΅ ΠΊΠΎΠΏΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΡΠΈΠ»Π΅ Java, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΏΠΈΡ. ΠΡΠ΅ΡΠ°ΡΠΎΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡ ΠΊΠΎΠΏΠΈΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ Π½Π°Ρ, Π³Π°ΡΠ°Π½ΡΠΈΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΠΌΠΎΡΡ Π² ΡΠΈΠΊΠ»Π΅ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
QListIterator<int> i(splitter->sizes());
while (i.hasNext()) {
do_something(i.next());
}
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΠΈΠ·-Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΈΡ (implicit sharing). ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ QtβΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. Π’ΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ β ΠΈ Π²ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΎΡΡΠΎΠΌΡ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°ΡΡ Β«ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈΒ» (copy on write).
ΠΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Π΄ΡΠΌΠ°ΡΡ ΠΎ Π½Π΅ΠΉ; ΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ Π½Π°Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡΠΈΠ»Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
01 QVector<double> sineTable()
02 {
03 QVector<double> vect(360);
04 for (int i = 0; i <360; ++i)
05 vect[i] = sin(i / (2 * M_PI));
06 return vect;
07 }
ΠΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
QVector<double> table = sineTable();
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, STL ΡΠΊΠ»ΠΎΠ½ΡΠ΅Ρ Π½Π°Ρ ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ° Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΠ·-Π·Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΠΈΠΌΠΎΠ³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: