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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ программирования Π½Π° Π‘++. 101 ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈ рСкомСндация». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€

c.erase(remove(c.begin(), c.end(), value), c.end());

Если ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ remove ΠΈΠ»ΠΈ remove_if, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Описанная ΠΈΠ΄ΠΈΠΎΠΌΠ° "горячСй усадки" Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с рСализациями std::string с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ записи. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² s.reserve(0) ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€ΡŽΠΊ, ΠΊΠ°ΠΊ string(s.begin(), s.end()).swap(s);, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ использован конструктор Π½Π° основС Π΄Π²ΡƒΡ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ излишнюю Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ. (Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ std::string Π½Π΅ использовали Ρ‚Π°ΠΊΠΎΠΉ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ записи; см. [Sutter02].)

Бсылки

[Josuttis99] Β§6.2.1 β€’ [Meyers01] Β§17, Β§32, Β§44 β€’ [Sutter00] Β§7 β€’ [Sutter02] Β§7, Β§16

STL: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ†ΠΈΠΊΠ»Π°ΠΌ.

β€” Π‘ΡŒΡΡ€Π½ Бтрауструп (Bjarne Stroustrup), [Stroustrup00] Β§18.12

Алгоритмы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ†ΠΈΠΊΠ»Ρ‹ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ². Алгоритмы β€” это "ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹" Ρ†ΠΈΠΊΠ»ΠΎΠ², с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сСмантики ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с простыми for ΠΈ do. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π°Ρ‡Π°Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹; ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΡ… ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π² своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ считаСм Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 83 β€” "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL".

83. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL

РСзюмС

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅ всСго (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 6). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL[4], Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½Π° имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΡˆΠΈΡ… компиляторов, ΠΈ Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с указатСлями, Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚Π°ΠΊΡƒΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈ этом ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ компилируСтся, Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ (Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС) ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ (Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ). Π”Π°ΠΆΠ΅ Ссли ваш компилятор Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ошибки, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° "Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ": ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты β€” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠΌΠΈ.

Ряд ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с STL часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ программисты.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’ особСнности Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅.

β€’ ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° индСкса, выходящСго Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. НапримСр, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 113-ΠΌΡƒ элСмСнту 100-элСмСнтного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ "Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°" ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ являСтся Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ. НапримСр, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π²ΡƒΡ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

β€’ ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, позиция, пСрСдаваСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert), Π½ΠΎ с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ упорядочСния. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° для упорядочСния ассоциативного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ Π² качСствС критСрия сравнСния Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ сортировки (см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² [Meyers01]). Если Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ вСрсии STL, Ρ‚Π°ΠΊΠΈΠ΅ ошибки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ останов.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ STL автоматичСски ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈ систСмной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, хранящСйся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…. НапримСр, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ обращаСтся, Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ всС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ использованиС ΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выполнСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Но Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ отслСТивания ошибок стоит Ρ‚ΠΎΠ³ΠΎ β€” ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (вспомнитС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 8; Π½Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² нСобходимости Ρ‚Π°ΠΊΠΎΠ³ΠΎ шага нСпосрСдствСнными измСрСниями).

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ вСрсии, ΠΈ Π΄Π°ΠΆΠ΅ Ссли Ρƒ вас имССтся провСрочная рСализация STL Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π°ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ протСстируйтС Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΎΠΌ тСстов с использованиСм ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL. Π’Ρ‹ Π½Π΅ ΠΏΠΎΠΆΠ°Π»Π΅Π΅Ρ‚Π΅ ΠΎΠ± этом.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ИспользованиС Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠžΡ‡Π΅Π½ΡŒ просто Π·Π°Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ стали Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹, ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 99). Рассмотрим ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ· [Meyers01], Π³Π΄Π΅ происходит вставка элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ deque:

deque<double>::iterator current = d.begin();

for (size_t i =0; i < max; ++i )

 d.insert(current++, data[i] + 41); // Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ?

Быстро ΠΎΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ β€” ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π»ΠΈ Π²Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚? Π£ вас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ сСкунды!

ВрСмя Π²Ρ‹ΡˆΠ»ΠΎ! Если Π²Ρ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π·Π° ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ врСмя, Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ β€” это достаточно тонкая ΠΈ понятная ошибка. ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Π°Ρ вСрсия STL ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π΄Π°Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ придСтся ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° свой Π½Π΅Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ взгляд. (Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Π°Ρ вСрсия Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ 84.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ИспользованиС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² прСдставляСт собой ΠΏΠ°Ρ€Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² first ΠΈ last, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΈ элСмСнт, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° послСдним элСмСнтом Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ last Π±Ρ‹Π» достиТим ΠΈΠ· first ΠΏΡƒΡ‚Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° first. Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹ Π΄Π²Π° распространСнных Π²ΠΈΠ΄Π° ошибки, ΠΊΠΎΠ³Π΄Π° происходит ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Π½Π΅ являСтся. ΠŸΠ΅Ρ€Π²Π°Ρ ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ first Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ second:

for_each(c.end(),с.begin(),Something); // Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ своСго Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ for_each Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ first Π½Π° равСнство ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ second, ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π°Π²Π½Ρ‹, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ first. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, сколько Π±Ρ‹ Ρ€Π°Π· Π½Π΅ Π±Ρ‹Π» ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ first, Π΅ΠΌΡƒ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ second, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» ΠΏΠΎ сути оказываСтся бСсконСчным. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ·-Π·Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ памяти. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, выйдя Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ слишком отличаСтся ΠΎΡ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… Π½Π°ΠΌ послСдствий пСрСполнСния буфСра…

Вторая распространСнная ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹:

for_each(c.begin(),d.end(),Something); // Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ошибки Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ. Однако ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ вСрсии STL помнят ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бсылки

[Dinkumware-Safe] β€’ [Horstmann95] β€’ [Josuttis99] Β§5.11.1 β€’ [Metrowerks] β€’ [Meyers01] Β§21, Β§50 β€’ [STLport-Debug] β€’ [Stroustrup00] Β§18.3.1, Β§19.3.1

84. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ†ΠΈΠΊΠ»Π°ΠΌ

РСзюмС

Π Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ ΠΎΡ‡Π΅Π½ΡŒ простых случаях написанныС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ простым ΠΈ эффСктивным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ‹Π·ΠΎΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° вмСсто ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π»Π΅Π³Ρ‡Π΅ сопровоТдаСмым, ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹ΠΌ ошибкам ΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ эффСктивным.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ написании собствСнного Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ инкапсулируСт всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ объСдинСния связыватСлСй ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ простых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, bind2nd, plus), Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сниТаСт ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± использовании лямбда-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ [Boost], которая Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ STL, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΊ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ количСству явных Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‡Π΅ΠΌ Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Π΅Π· примСнСния STL благодаря Π·Π°ΠΌΠ΅Π½Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² высокоуровнСвыми абстрактными опСрациями с сущСствСнно большСй сСмантикой. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ с использованиСм STL, слСдуСт Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ Π² катСгориях "ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт", Π° "ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ элСмСнтов".