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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 141

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π£ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ вторая (Π½Π΅ пСрСгруТСнная) вСрсия, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ (см. Ρ€Π°Π·Π΄Π΅Π» 10.3.1) вмСсто значСния. ΠŸΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ суффикс _if:

find(beg, end, val); // Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ экзСмпляр val Π² исходном Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅

find_if(beg, end, pred); // Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ экзСмпляр, для

                         // ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ pred Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true

Оба Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° находят Π² исходном Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ экзСмпляр Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта. Алгоритм find() ΠΈΡ‰Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ find_if() β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ pred Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля.

Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π΅ вСрсии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Π±Ρ‹Π»Π° Π±Ρ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° лишь Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… нСоднозначностСй, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ вСрсии этих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈ Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ вСрсиями

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ элСмСнты Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² исходный Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ для записи ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π² ΠΈΠΌΠ΅Π½ΠΈ суффикс _copy (см. Ρ€Π°Π·Π΄Π΅Π» 10.2.2):

reverse(beg, end); // ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ порядок элСмСнтов Π² исходном Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅

reverse_copy(beg, end, dest); // ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²

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

НСкоторыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈ вСрсии _copy, ΠΈ _if. Π­Ρ‚ΠΈ вСрсии ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ назначСния, ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚:

// удаляСт Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΠΈΠ· v1

remove_if(v1.begin(), v1.end(),

          [](int i) { return i % 2; });

// ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΠΈΠ· v1 Π² v2; v1 Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½

remove_copy_if(v1.begin(), v1.end(), back_inserter(v2),

               [](int i) { return i % 2; });

Для опрСдСлСния нСчСтности элСмСнта ΠΎΠ±Π° Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (см. Ρ€Π°Π·Π΄Π΅Π» 10.3.2). Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· самой исходной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ (Ρ‡Π΅Ρ‚Π½Ρ‹Π΅) элСмСнты ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· исходного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ v2.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 10.5.3

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.41. Π˜ΡΡ…ΠΎΠ΄Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ дСйствия, выполняСмыС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²:

replace(beg, end, old_val, new_val);

replace_if(beg, end, pred, new_val);

replace_copy(beg, end, dest, old_val, new_val);

replace_copy_if(beg, end, dest, pred, new_val);

10.6. Алгоритмы, спСцифичСскиС для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ list ΠΈ forward_list ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ нСсколько Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² качСствС Ρ‡Π»Π΅Π½ΠΎΠ². Π’ частности, Ρ‚ΠΈΠΏ list ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ собствСнныС вСрсии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² sort(), merge(), remove(), reverse() ΠΈ unique(). ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Π°Ρ вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° sort() Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ list ΠΈ forward_list, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΈ прямыС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ соотвСтствСнно.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ вСрсии Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², опрСдСляСмых Ρ‚ΠΈΠΏΠΎΠΌ list, Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ со списками, Π½ΠΎ Ρ†Π΅Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ элСмСнты Π² исходной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Бписок ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ" свои элСмСнты, помСняв ссылки Π½Π° элСмСнты, Π° Π½Π΅ пСрСмСщая значСния этих элСмСнтов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ спСцифичСскиС для списка вСрсии этих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ вСрсии.

Π­Ρ‚ΠΈ спСцифичСскиС для списка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 10.6. Π’ Π½Π΅ΠΉ Π½Π΅Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ эффСктивно ΠΊΠ°ΠΊ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² list ΠΈ forward_list.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹-Ρ‡Π»Π΅Π½Ρ‹ классов list ΠΈ forward_list, Π° Π½Π΅ ΠΈΡ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ вСрсии.


Π’Π°Π±Π»ΠΈΡ†Π° 10.6. Алгоритмы-Ρ‡Π»Π΅Π½Ρ‹ классов list ΠΈ forward_list 

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ void. lst.merge(lst2) lst.merge(lst2, comp) ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ элСмСнты списков lst2 ΠΈ lst. Оба списка Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ отсортированы. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· списка lst2 ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, ΠΈ послС объСдинСния список lst2 оказываСтся пустым. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ void. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” указанная функция сравнСния lst.remove(val) lst.remove_if(pred) ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lst.erase() удаляСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΈΠ»ΠΈ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля lst.reverse() ΠœΠ΅Π½ΡΠ΅Ρ‚ порядок элСмСнтов списка lst Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ lst.sort() lst.sort(comp) Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты списка lst, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ < ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния lst.unique() lst.unique(pred) ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lst.erase() удаляСт располоТСнныС рядом элСмСнты с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ значСниями. Вторая вСрсия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Алгоритм-Ρ‡Π»Π΅Π½ splice()

Π’ΠΈΠΏΡ‹ списков ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ splice(), описанный Π² Ρ‚Π°Π±Π». 10.7. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ спСцифичСн для списочных структур Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, обобщСнная вСрсия этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ Π½ΡƒΠΆΠ½Π°.


Π’Π°Π±Π»ΠΈΡ†Π° 10.7. АргумСнты Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°-Ρ‡Π»Π΅Π½Π° splice() классов list ΠΈ forward_list

lst.splice(Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹) ΠΈΠ»ΠΈ flst.splice_after(Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹) (p, lst2) p β€” ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° элСмСнт списка lst ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π΄ элСмСнтом списка flst. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ всС элСмСнты ΠΈΠ· списка lst2 Π² список lst нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ p ΠΈΠ»ΠΈ нСпосрСдствСнно послС Π² спискС flst. УдаляСт элСмСнты ΠΈΠ· списка lst2. Бписок lst2 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ lst (ΠΈΠ»ΠΈ flst), ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ списком (p, lst2, p2) p2 β€” допустимый ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² спискС lst2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ элСмСнт, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ p2, Π² список lst ΠΈΠ»ΠΈ элСмСнт послС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ p2 Π² спискС flst. Бписок lst2 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ списком, Ρ‡Ρ‚ΠΎ ΠΈ lst ΠΈΠ»ΠΈ flst (p, lst2, b, Π΅) b ΠΈ Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ допустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² спискС lst2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ элСмСнты Π² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ· списка lst2. Бписки lst2 ΠΈ lst (ΠΈΠ»ΠΈ flst) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ списком, Π½ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ p Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° элСмСнт Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ БпСцифичСскиС для списка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ спСцифичСских для списков Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ (Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹) ΠΈΡ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌ. Но ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ спСцифичСскими ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ вСрсиями Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ спСцифичСскиС вСрсии ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НапримСр, спСцифичСская вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° remove() удаляСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ элСмСнты. БпСцифичСская вСрсия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° unique() удаляСт Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ элСмСнта.

Аналогично Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ merge() ΠΈ splice() дСструктивны ΠΊ своим Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ. НапримСр, обобщСнная вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ merge() Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ назначСния; Π΄Π²Π΅ исходных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ останутся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹. БпСцифичСская для списка функция merge() Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ список β€” элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΈΠ· списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… объСдинСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ merge(). ПослС объСдинСния элСмСнты ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ… списков ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΡƒΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΌΡƒ списку.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 10.6

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.42. ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡƒΡΡ‚Ρ€Π°Π½ΡΠ²ΡˆΡƒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ слова, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 10.2.3, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ использовался список, Π° Π½Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€.

РСзюмС

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