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

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

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

MSVC вСрсий 4-6

К соТалСнию, Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL, входящСй Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ поставки вСрсий 4-6, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ для MSVC вСрсии 4, Π° этот компилятор, ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ шаблонов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ MSCV4 ΠΊ MSVC6 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° этих шаблонов Π±Ρ‹Π»Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² компилятор, Π½ΠΎ вслСдствиС судСбных Π΄Π΅Π», косвСнно Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π²ΡˆΠΈΡ… Ρ„ΠΈΡ€ΠΌΡƒ Microsoft, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡΡ‚Π°Π²Π°Π»Π°ΡΡŒ практичСски Π² Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΌ состоянии.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рСализация STL, поставляСмая с MSVC4-6, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ для компилятора Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ шаблонов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов, Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ эти ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈΡΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, шаблон insert Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

void insert(iterator position,// "iterator" - Ρ‚ΠΈΠΏ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

iterator first, iterator last): // для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π­Ρ‚Π° ограничСнная Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ позволяла Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½ΡƒΡŽ вставку ΠΈΠ· vector<Widget> Π² vector<Widget> ΠΈΠ»ΠΈ ΠΈΠ· list<int> Π² list<int>, Π½ΠΎ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вставка ΠΈΠ· vector<Widget> Π² list<Widget> ΠΈΠ»ΠΈ ΠΈΠ· set<int> Π² deque<int>) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈΡΡŒ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π°ΡΡŒ Π΄Π°ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŒΠ½Π°Ρ вставка (Π° Ρ‚Π°ΠΊΠΆΠ΅ конструированиС ΠΈΠ»ΠΈ assign) ΠΈΠ· vector<long> Π² vector<int>, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ vector<long>:: iterator ΠΈ vector<int>:: iterator относятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ компиляторами, Π½Π΅ компилируСтся Π² MSVC4-6:

istream_iterator<Widget> begin(cin),end;

vector<Widget> vw(begin.end);

list<Widget> lw;

lw.assign(vw.rbegin(),vw.rend());// ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ lw содСрТимоС vw

// (Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС);

// Π½Π΅ компилируСтся Π² MSVC4-6!

SpeciΠ°lContainer<Widget> scw:

scw.insert(scw.end(),lw.begin(),lw.end()); // Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† sew

// копию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Widget ΠΈΠ· lw:

// Π½Π΅ компилируСтся Π² MSVC4-6!

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² срСдС MSVC4-6? Π­Ρ‚ΠΎ зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ вСрсии MSVC ΠΈ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π»ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL, ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ вмСстС с компилятором.

ΠžΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для MSVC4-5

Π•Ρ‰Π΅ Ρ€Π°Π· посмотрим Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ компилируСтся для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL ΠΈΠ· поставки MSVC4-6:

vector<Widget> vw(begin,end);// ΠžΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ STL

// ΠΈΠ· поставки MSVC4-6

list<Widget> lw;

lw.assign(vw.rbegin(),vw.rend());// Π’ΠΎ ΠΆΠ΅

SpeciΠ°lContainer<Widget> scw;

scw.insert(scw.end(),lw.begin(),lw.end()); // Π’ΠΎ ΠΆΠ΅

// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ begin ΠΈ end

// для чтСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Widget

// ΠΈΠ· cn (см. совСт 6).

// ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Widget

// ΠΈΠ· cin Π² vw (см. совСт 6)

// Π½Π΅ компилируСтся Π² MSVC4-6!

НСсмотря Π½Π° внСшниС различия, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΡ‚Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ компилятором ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅: ΠΈΠ·-Π·Π° отсутствия шаблонов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ класса Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL. БоотвСтствСнно ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всСх случаях оказываСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅: Π·Π°ΠΌΠ΅Π½Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ сору с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ вставки (см. совСт 30). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π½Π΅Π΅:

istream_iterator<Widget> begin(cin).end:

vector<Widget> vw(begin,end); //Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ vw конструктором

copy(begin,end,back_inserter(vw));//ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

//Π² Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Widget ΠΈΠ· cin

list<Widget> lw;

lw.clear(); //Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· lw старыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

copy(vw.rbegin(),vw.rend(),//ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· vw

back_inserter(lw))://(Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС)

SpecialContainer<Widget> scw;

copy(lw.begin().lw.end().// Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Widget

inserter(scw.scw.end()));// ΠΈΠ· lw Π² ΠΊΠΎΠ½Π΅Ρ† sew

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

ΠžΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для MSVC6

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

Π’ совСтС 50 ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ свободно распространяСмыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL ΠΎΡ‚ SGI ΠΈ STLport; Π² списках ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… компиляторов ΠΎΠ±Π΅ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ упоминаСтся MSVC6. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ приобрСсти Π½ΠΎΠ²Π΅ΠΉΡˆΡƒΡŽ MSVC-ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL ΠΎΡ‚ Dinkumware. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ свои достоинства ΠΈ нСдостатки.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SGI ΠΈ STLport Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ бСсплатно, поэтому какая-Π»ΠΈΠ±ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π² этих случаях попросту отсутствуСт. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SGI ΠΈ STLport рассчитаны Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ компиляторами, Π²Π°ΠΌ придСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΡ… для обСспСчСния максимального быстродСйствия Π² MSVC6. Π’ частности, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ шаблонов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов β€” ΠΈΠ·-Π·Π° совмСстимости с большим количСством Ρ€Π°Π·Π½Ρ‹Ρ… компиляторов Π² SGI ΠΈ/ΠΈΠ»ΠΈ STLport эта ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ придСтся ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ MSVC6 (особСнно DLL), ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° использованиСм ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… вСрсий для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ Ρ‚. Π΄.

Если ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ вас ΠΏΡƒΠ³Π°ΡŽΡ‚ ΠΈΠ»ΠΈ Π²Ρ‹ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΠ΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ «бСсплатныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обходятся слишком Π΄ΠΎΡ€ΠΎΠ³ΠΎΒ», рассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STL для MSVC6 ΠΎΡ‚ Dinkumware. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ с расчСтом Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ простоту Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈ Π½Π° соотвСтствиС Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρƒ. РСализация STL ΠΈΠ· MSVC6 Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Dinkumware, поэтому Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ новая рСализация STL Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ замСняСт ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π». Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ рСализациях STL ΠΎΡ‚ Dunkumware ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° сайт ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ http://www.dunkumware.com.

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹ остановитС свой Π²Ρ‹Π±ΠΎΡ€, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Ρ‡Ρ‚ΠΎ большСС, Ρ‡Π΅ΠΌ STL с шаблонами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов. Π’ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… рСализациях Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ соотвСтствия Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρƒ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях β€” скаТСм, отсутствиС объявлСния push_back Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ string. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² вашСм распоряТСнии окаТутся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ STL, Π² Ρ‚ΠΎΠΌ числС Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (см. совСт 25) ΠΈ односвязныС списки (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ slist). Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SGI ΠΈ STLport Ρ‚Π°ΠΊΠΆΠ΅ содСрТат мноТСство нСстандартных классов Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ select1st ΠΈ select2nd (см. совСт 50).

Но Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ STL ΠΈΠ· поставки MSVC6, сайт Dunkumware всС ΠΆΠ΅ стоит ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ. На Π½Π΅ΠΌ пСрСчислСны извСстныС ошибки Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MSVC6 ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для сокращСния Π΅Π΅ нСдостатков. НС стоит ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” Π΄Π΅Π»ΠΎ вСсьма рискованноС. Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½Π΅ Π²ΠΈΠ½ΠΈΡ‚Π΅ Π² Π½ΠΈΡ… мСня.


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

1

Π’ срСдС программистов Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ (Π°Π½Π³Π». mutex) встрСчаСтся Ρ‚Π°ΠΊΠΆΠ΅ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ «мутСкс». β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.

2

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Π½Π΅ всС 24 пСрСстановки равновСроятны, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ 1/24 Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, остаСтся бСсспорный Ρ„Π°ΠΊΡ‚: ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ 24 Ρ€Π°Π·Π½Ρ‹Π΅ пСрСстановки, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ….

3

Π’Π΅Ρ€ΠΌΠΈΠ½ употрСбляСтся Π² статистикС. β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.

4

Π“Π°ΠΌΠΌΠ° Π­., Π₯Π΅Π»ΠΌ Π ., ДТонсон Π ., ВлиссидСс Π”ΠΆ. Β«ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования» β€” БПб.: ΠŸΠΈΡ‚Π΅Ρ€, 2001.

5

Π‘ΠΌ. ΡΡ‚Π°Ρ‚ΡŒΡŽ АлСксандрСску A. (Andrei Alexandrescu) Π² майском Π½ΠΎΠΌΠ΅Ρ€Π΅ Β«Π‘++ ReportΒ» Π·Π° 2000 Π³. [19].

6

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² шаблонС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ use_facet ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шаблона присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΈΠΏΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Π½ΠΎ Π½Π΅ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ языковоС срСдство, Π½Π°Π·Ρ‹Π²Π°-СмоСявяьш Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² шаблона, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ поддСрТиваСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ компиляторами Π‘++. Если ваш компилятор ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ ΠΈΡ… числу, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π°Π²Ρ‚ΠΎΡ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ прСдусмотрСли ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ use_facet Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом.