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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС STLΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 57

Автор Π‘ΠΊΠΎΡ‚Ρ‚ ΠœΠ΅ΠΉΠ΅Ρ€Ρ

ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ STLport Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ эту Π·Π°Π΄Π°Ρ‡Ρƒ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° transform выдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС (прСдполагаСтся, Ρ‡Ρ‚ΠΎ рСализация STLport установлСна Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ C:\STLport):

C:\STLport\stlport\stl\debug\_iterator.h:265 STL assertion failure: _Dereferenceable(*this)

На этом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² случаС ошибки ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ STLport Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ abort. Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вмСсто этого ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, STLport ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ Π½Π° этот Ρ€Π΅ΠΆΠΈΠΌ.

ЧСстно говоря, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС ΠΌΠ΅Π½Π΅Π΅ понятно, Ρ‡Π΅ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Π° имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ строки относятся ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ условия STL, Π° Π½Π΅ ΠΊ строкС с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ transform, Π½ΠΎ это всС ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° transform ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ… Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ структур Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ STLport остаСтся лишь Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΏΠΎ содСрТимому стСка ΠΊ написанному Π²Π°ΠΌΠΈ ΠΊΠΎΠ΄Ρƒ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π‘Ρ‚Ρ€ΠΎΠΊΠ°, содСрТащая ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находится достаточно Π»Π΅Π³ΠΊΠΎ.

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

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

β€’

Π‘Π°ΠΉΡ‚ Boost

Π’ 1997 Π³ΠΎΠ΄Ρƒ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ процСсс, ΠΏΡ€ΠΈΠ²Π΅Π΄ΡˆΠΈΠΉ ΠΊ появлСнию ΠœΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ стандарта Π‘++. МногиС участники Π±Ρ‹Π»ΠΈ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ возмоТности, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ выступали, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π±ΠΎΡ€. НСкоторыС ΠΈΠ· этих участников Π±Ρ‹Π»ΠΈ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ самого ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚Π°, поэтому ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ основу для дополнСния стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ врСмя Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° стандартизации. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΈΡ… усилий стал сайт Boost, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ·Π²Π°Π½ Β«ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ бСсплатныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘++. ОсновноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся пСрСносимым Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρƒ Π‘++Β». Π—Π° этой Ρ†Π΅Π»ΡŒΡŽ кроСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΡ‚ΠΈΠ²:

«По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² "ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ", возрастаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ Π΅Π΅ для Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ стандартизации. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° сайт Boost.org являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов создания "повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ"...Β».

Π˜Π½Π°Ρ‡Π΅ говоря, Boost прСдлагаСтся Π² качСствС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ»Π΅Π²Π΅Π»Ρ‹ ΠΎΡ‚ Π·Π΅Ρ€Π΅Π½ Π² области ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘++. Π’ΠΏΠΎΠ»Π½Π΅ достойная миссия, Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ нашСй благодарности.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, находящихся Π½Π° сайтС Boost. Π― Π½Π΅ стану ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ здСсь хотя Π±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° сайтС навСрняка появятся Π½ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ STL особый интСрСс ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ содСрТит шаблон shared_ptr, ΡƒΠΌΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ с подсчСтом ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ указатСля auto_ptr ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… STL (см. совСт 8). Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΠΌΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит шаблон shared_array, ΡƒΠΌΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ с подсчСтом ссылок для Ρ€Π°Π±ΠΎΡ‚Ρ‹ динамичСскими массивами, Π½ΠΎ Π² совСтС 13 вмСсто динамичСских массивов рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ vector ΠΈ string; надСюсь, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ покаТутся Π²Π°ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Поклонники STL Ρ‚Π°ΠΊΠΆΠ΅ оцСнят Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ ассортимСнт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, содСрТащих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства. Π’ этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Π·Π°Π½ΠΎΠ²ΠΎ спроСктированы ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π·Π°Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² основу ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² STL, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π±Ρ‹Π»ΠΈ сняты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ искусствСнныС ограничСния, ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ стандартных Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π’ частности, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ bind2nd с функциями mem_fun ΠΈ mem_fun_ref (см. совСт 41) для привязки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса выясняСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ссылкС ΠΊΠΎΠ΄, скорСС всСго, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Аналогичный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ достигаСтся использованиСм not1 ΠΈ not2 с ptr_fun ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎ ссылкС. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² ΠΎΠ±ΠΎΠΈΡ… случаях Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² процСссС спСциализации шаблона ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ STL Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ «ссылку Π½Π° ссылку», Π½ΠΎ Π² Π‘++ такая конструкция Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° (Π² настоящСС врСмя ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ стандартизации рассматриваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ «ссылки Π½Π° ссылку»:

class Widget {

public:

int readStream(istream& stream);// Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ readStream

// ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ пСрСдаСтся

}; //ΠΏΠΎ ссылкС

vector<Widget*> vw;

for_each( //Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ STL

vw.begin(),vw.end(), //ΠΏΡ€ΠΈ этом Π²Ρ‹Π·ΠΎΠ²Π΅

bind2nd(mem_fun(&Widget::readStream),cin) //пытаСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

);//ссылку Π½Π° ссылку.

//Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π½Π΅ компилируСтся!

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Boost Ρ€Π΅ΡˆΠ°ΡŽΡ‚ эту ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Если Π²Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ STL ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅, поскорСС посСтитС сайт Boost. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вас ΠΏΡƒΠ³Π°ΡŽΡ‚ ΠΈ Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для умиротворСния малочислСнных Π°ΠΏΠΎΠ»ΠΎΠ³Π΅Ρ‚ΠΎΠ² Lisp, Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π‘++, всС Ρ€Π°Π²Π½ΠΎ посСтитС сайт Boost. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Boost Π²Π°ΠΆΠ½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, находящСйся Π½Π° сайтС.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

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

АдрСса URL Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹, поэтому я Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя сомнСвался, стоит Π»ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли URL станСт Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ мСстонахоТдСниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ адрСсу.

Книги, написанныС ΠΌΠ½ΠΎΠΉ

[1] Scott Meyers, Β«Effective Π‘++: 50 Specific Ways to Improve Your Programs and DesignsΒ» (second edition), Addison-Wesley, 1998, ISBN 0-201-92488-9. Π’Π°ΠΊΠΆΠ΅ присутствуСт Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС Β«Effective Π‘++Β» (см. Π΄Π°Π»Π΅Π΅).

[2] Scott Meyers, Β«More Effective Π‘++: 35 New Ways to Improve Your Programs Π°Ρ†d DesignsΒ» (second edition), Addison-Wesley, 1996, ISBN 0-201-63371-Π₯. Π’Π°ΠΊΠΆΠ΅ присутствуСт Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС Β«Effective Π‘++Β» (см. Π΄Π°Π»Π΅Π΅).

β€’ Scott Meyers, Β«Effective Π‘++ CD: 85 Specific Ways to Improve Your Programs and DesignsΒ» (second edition), Addison-Wesley, 1999, ISBN 0-201-31015-5. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΎΠ±Π΅ΠΈΡ… ΠΊΠ½ΠΈΠ³, нСсколько ΠΆΡƒΡ€Π½Π°Π»ΡŒΠ½Ρ‹Ρ… статСй ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ ΠΈ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΎΠ²ΠΈΠ½ΠΊΠΈ ΠΈΠ· области элСктронных ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ. Π—Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диском ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ адрСсу: http://meyerscd.awl.com/. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсам: http://zing.ncsl.nist.goc/hfweb/proceedings/meyers-jones/ΠΈ http://www.rm'crosoft.com/Mind/1099/browsing/browsing.htm.

Книги, написанныС Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ

[3] Nicolai М. Josuttis, Β«The Π‘++ Standard Library: A Tutorial and ReferenceΒ», Addison-Wesley, 1999, ISBN 0-201-37926-0. НСзамСнимая ΠΊΠ½ΠΈΠ³Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ программиста Π‘++.

[4] Matthew Н. Austern, Β«Generic Programming and the STLΒ», Addison-Wesley, 1999, ISBN 0-201-30956-4. ЀактичСски прСдставляСт собой ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² web-сайта SGI STL, http://www.sgi.com/tech/stl.

[5] ISO/IEC, Β«International Standard, Programming Languages β€” Π‘++Β», ISO/IEC 14882:1998(E), 1998. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с описаниСм Π‘++. РаспространяСтся ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ANSI Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PDF Π·Π° $18 ΠΏΠΎ адрСсу http://webstore. ansi.org/ansidocstore/default.asp.

[6] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Β«Design Patterns: Elements of Reusable Object-Oriented SoftwareΒ», Addison-Wesley, 1995, ISBN 0-201 -63361-2[4]. Π’Π°ΠΊΠΆΠ΅ распространяСтся Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС Β«Design Patterns CDΒ», Addison-Wesley, 1998, ISBN 0-201-63498-8. НаиболСС Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ΅ руководство ΠΏΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΠΌ проСктирования. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ программист Π‘++ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ описанныС ΠΈΠ΄ΠΈΠΎΠΌΡ‹ ΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ эту ΠΊΠ½ΠΈΠ³Ρƒ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск.

[7] Bjarne Stroustrup, Β«The Π‘++ Programming LanguageΒ» (third edition), Addison-Wesley, 1997, ISBN 0-201-88954-4. Идиома Β«Π·Π°ΠΊΠ²Π°Ρ‚Π° рСсурсов ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ», упоминаСмая Π² совСтС 12, рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 14.4.1 этой ΠΊΠ½ΠΈΠ³ΠΈ, Π° ΠΊΠΎΠ΄ ΠΈΠ· совСта 36 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° с. 530.

[8] Herb Sutter, Β«Exceptional Π‘++: 47 Engineering Puzzles, Programming Problems and SolutionsΒ», Addison-Wesley, 2000, ISBN 0-201-61562-2. ДостойноС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠΎΠ΅ΠΉ сСрии Β«Effective...Β». Π― Π±Ρ‹ высоко ΠΎΡ†Π΅Π½ΠΈΠ» эту ΠΊΠ½ΠΈΠ³Ρƒ Π² любом случаС, Π΄Π°ΠΆΠ΅ Ссли Π±Ρ‹ Π₯Π΅Ρ€Π± Π½Π΅ попросил мСня Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊ Π½Π΅ΠΉ прСдисловиС.

[9] Herb Sutter, Β«More Exceptional Π‘++: 40 More Engineering Puzzles, Programming Problems and SolutionsΒ», Addison-Wesley, 2001, ISBN 0-201-70434-X. Будя ΠΏΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ вСрсии, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π²ΠΈΠ΄Π΅Π», эта ΠΊΠ½ΠΈΠ³Π° Π½ΠΈΡ‡ΡƒΡ‚ΡŒ Π½Π΅ Ρ…ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ.

[10] Dov Bulka, David Mayhew, Β«Efficient Π‘++: Performance Programming TechniquesΒ», Addison-Wesley, 2000, ISBN 0-201-37950-3. ЕдинствСнная ΠΈ поэтому Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΊΠ½ΠΈΠ³Π°, посвящСнная вопросам эффСктивности Π² Π‘++.

[И] Matt Austern, Β«How to Do Case-Insensitive String ComparisonΒ», Π‘++ Report, ΠΌΠ°ΠΉ 2000 Π³. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° воспроизводится Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А настоящСй ΠΊΠ½ΠΈΠ³ΠΈ.