Π Π°Π±ΠΎΡ‚Π° с массивами Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых Π·Π°Π΄Π°Ρ‡, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива? Однако Π½Π΅Π·Π½Π°Π½ΠΈΠ΅ нюансов ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам Π² Π»ΠΎΠ³ΠΈΠΊΠ΅, падСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΡ€Π°Ρ…Ρƒ систСмы ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ способы удалСния элСмСнтов, ΠΈΡ… ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ программисты.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ 1Π‘ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅Ρ‚ классичСского "ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ" ΠΌΠ΅Ρ‚ΠΎΠ΄Π° удалСния, ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. Π’Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° массива (ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, ассоциативный, фиксированный), Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ контСкста использования. НапримСр, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· массива с 10 записями ΠΈ ΠΈΠ· массива с 10 000 записями Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. ΠœΡ‹ рассмотрим всС сцСнарии β€” ΠΎΡ‚ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Π΄ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для высоких Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ логичСским ошибкам, Π½ΠΎ ΠΈ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти Π² управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ…, особСнно Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ динамичСских массивах Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном взаимодСйствии. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ практичСскими ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈ прСдупрСТдСниями ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… камнях.

1. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ удалСния: Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(), Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ() ΠΈ ΠΈΡ… отличия

Начнём с Π΄Π²ΡƒΡ… самых распространённых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3: Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(). На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΎΠ½ΠΈ каТутся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Π½ΠΎ Π½Π° Π΄Π΅Π»Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ критичСскиС различия Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) удаляСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния Π² массивС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π² массивС Π΅ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Ρ‘Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ попавшийся элСмСнт. НапримСр:

Массив = Новый Массив();

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А");

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘");

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А"); // Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ("А");

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ["Π‘", "А"] β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ "А"

Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(ИндСкс) удаляСт элСмСнт ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² массивС, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ большС контроля. Однако здСсь Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ смСщСнии индСксов послС удалСния: Ссли Π²Ρ‹ удаляСтС элСмСнт Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ пропуск элСмСнтов ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива.

  • πŸ”Ή Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для удалСния ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½ΠΎ нСэффСктивСн ΠΏΡ€ΠΈ дублях.
  • πŸ”Ή Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ() β€” Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ аккуратности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ†ΠΈΠΊΠ»Π°Ρ….
  • πŸ”Ή Оба ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ исходный массив, Π½Π΅ создавая копию.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ() Π² Ρ†ΠΈΠΊΠ»Π΅ Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ошибка "ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°", Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ тСряСт ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ с массивом. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Для ΠΎΡ‚ послСднСго элСмСнта ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ.
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ удалСния Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π£Π΄Π°Π»ΠΈΡ‚ΡŒ()
Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ()
Боздаю Π½ΠΎΠ²Ρ‹ΠΉ массив Π±Π΅Π· элСмСнта
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ структуру вмСсто массива

2. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ значСния: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Найти() + Ρ†ΠΈΠΊΠ» Π½Π΅ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Если Π² массивС Π΅ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ значСния, ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ΠΈΡ… вхоТдСния, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Найти() + Ρ†ΠΈΠΊΠ». Однако этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Π°ΠΈΡ‚ Π² сСбС нСсколько ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ:

  1. ΠœΠ΅Ρ‚ΠΎΠ΄ Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта, Π½ΠΎ послС удалСния индСксы ΡΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ, ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вхоТдСния "ΡƒΠ΅Π·ΠΆΠ°ΡŽΡ‚".
  2. ΠŸΡ€ΠΈ большом количСствС Π΄ΡƒΠ±Π»Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π² гСомСтричСской прогрСссии ΠΈΠ·-Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

Массив = Новый Массив();

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А"); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘"); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А"); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А");

ИндСкс = Массив.Найти("А");

Пока ИндСкс <> НСопрСдСлСно Π¦ΠΈΠΊΠ»

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(ИндСкс);

ИндСкс = Массив.Найти("А"); // Ошибка: послС удалСния индСксы ΡΠ΄Π²ΠΈΠ½ΡƒΠ»ΠΈΡΡŒ!

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив Π±Π΅Π· Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… элСмСнтов:

ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив();

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <> "А" Π’ΠΎΠ³Π΄Π°

ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

Если Π²Π°ΠΌ часто приходится ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈ, рассмотритС использованиС Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ БоотвСтствия вмСсто массива β€” ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ.

3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ: Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΎΠ²

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ удалСния всСх ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл:

Массив = Новый Массив();

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(10); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(-5); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(0); Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(-3);

ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Массив.Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ(Ѐункция(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ >= 0; ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ);

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: [10, 0]

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸš€ Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ β€” ΠΊΠΎΠ΄ становится Ρ‡ΠΈΡ‰Π΅ ΠΈ понятнСС.
  • πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ β€” Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со смСщСниСм индСксов.
  • ⚑ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” внутрСнняя оптимизация ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠœΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ() доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.14+. Для Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ массива.
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты
Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния Высокая НС удаляСт Π΄ΡƒΠ±Π»ΠΈ
Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ() Π’ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ БрСдняя Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ индСксов Π² Ρ†ΠΈΠΊΠ»Π°Ρ…
Π¦ΠΈΠΊΠ» + Π½ΠΎΠ²Ρ‹ΠΉ массив Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Низкая (для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов) Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ расход памяти
Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ() Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Высокая Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

4. Π Π°Π±ΠΎΡ‚Π° с фиксированными массивами: ΠΏΠΎΡ‡Π΅ΠΌΡƒ нСльзя просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт

ЀиксированныС массивы (созданныС Ρ‡Π΅Ρ€Π΅Π· Новый Массив(Π Π°Π·ΠΌΠ΅Ρ€)) ΠΈΠΌΠ΅ΡŽΡ‚ Тёстко Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт стандартными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС. Π’ этом случаС Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

  1. Π—Π°ΠΌΠ΅Π½Π° Π½Π° "пустоС" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, НСопрСдСлСно ΠΈΠ»ΠΈ Null).
  2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ динамичСского массива с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Ρ… элСмСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ:

ЀиксМассив = Новый Массив(5); // Ѐиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€

ЀиксМассив[0] = 10;

ЀиксМассив[1] = 20;

// "УдаляСм" элСмСнт с индСксом 1

ЀиксМассив[1] = НСопрСдСлСно;

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

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· фиксированного массива?

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ "Ошибка ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° контСкста (Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ): Ѐиксированный массив Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°".

Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ удалСния придётся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив:

ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив();

Для Инд = 0 По ЀиксМассив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если ЀиксМассив[Инд] <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ЀиксМассив[Инд]);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ удалСния становятся ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивными. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • 🐒 ΠŸΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ β€” послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ удалСния всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ O(n) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • 🧹 ЀрагмСнтация памяти β€” частыС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива Π²Π΅Π΄ΡƒΡ‚ ΠΊ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
  • πŸ”„ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ β€” Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Ρ€Π΅ΠΆΠΈΠΌΠ΅ это ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ интСрфСйс.

РСшСния для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  1. ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ° Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅: вмСсто физичСского удалСния ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ элСмСнты Ρ„Π»Π°Π³ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, добавляйтС ΠΏΠΎΠ»Π΅ Π£Π΄Π°Π»Ρ‘Π½ Π² структуру), Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅.
  2. ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов, собСритС ΠΈΡ… индСксы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив ΠΈ удаляйтС Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄.
  3. ИспользованиС БоотвСтствия: для ассоциативных Π΄Π°Π½Π½Ρ‹Ρ… БоотвСтствиС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ массив, Π·Π° счёт Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ удалСния:

Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ = Новый Массив();

Для Инд = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[Инд] = "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" Π’ΠΎΠ³Π΄Π°

Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Инд);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

// УдаляСм с ΠΊΠΎΠ½Ρ†Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ индСксы

Для Инд = Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 По 0 Π¨Π°Π³ -1 Π¦ΠΈΠΊΠ»

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ[Инд]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π±ΠΎΠ»Π΅Π΅ 50 000 элСмСнтов рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² Π‘Π£Π‘Π” β€” ΠΎΠ½ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для массовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

6. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов. Π’ΠΎΡ‚ самыС распространённыС:

  • πŸ”„ ИзмСнСниС массива Π² Ρ†ΠΈΠΊΠ»Π΅ Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ β€” ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ "ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°".
  • πŸ”’ НСучёт смСщСния индСксов β€” послС удалСния элСмСнта с индСксом i, элСмСнт i+1 становится i, Ρ‡Ρ‚ΠΎ сбиваСт счётчики.
  • πŸ—‘οΈ Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти β€” ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· массива Π² управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² памяти, Ссли Π½Π° Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ссылки.
  • πŸ” НСпровСрка Π½Π° сущСствованиС элСмСнта β€” Π²Ρ‹Π·ΠΎΠ² Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ() с Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ индСксом Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° с ΡƒΡ‚Π΅Ρ‡ΠΊΠΎΠΉ памяти:

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² = Новый Массив();

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Имя, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", "ΠžΠ±ΡŠΠ΅ΠΊΡ‚1", 100));

Π‘ΡΡ‹Π»ΠΊΠ°ΠΠ°ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²[0]; // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ссылку

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(0);

// ΠžΠ±ΡŠΠ΅ΠΊΡ‚ остаётся Π² памяти, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π½Π΅Π³ΠΎ ссылаСтся пСрСмСнная Π‘ΡΡ‹Π»ΠΊΠ°ΠΠ°ΠžΠ±ΡŠΠ΅ΠΊΡ‚!

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Π‘ΡΡ‹Π»ΠΊΠ°ΠΠ°ΠžΠ±ΡŠΠ΅ΠΊΡ‚ = НСопрСдСлСно; // Π£Π±ΠΈΡ€Π°Π΅ΠΌ ссылку ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(0);

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΈ массовом ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ?|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚Π΅ Π»ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ индСкса ΠΏΠ΅Ρ€Π΅Π΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ()?|Π£Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Π»ΠΈ всС ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ?|РассматриваСтС Π»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, БоотвСтствиС) для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…?-->

7. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ массивам: ΠΊΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΠΈΠ»ΠΈ БоотвСтствиС

Если Π²Π°ΠΌ часто приходится ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, массив β€” Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€. РассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° НСдостатки Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Массив ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°, порядок элСмСнтов МСдлСнноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, смСщСниС индСксов ЀиксированныС Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π΄ΠΊΠΈΠ΅ измСнСния
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π£Π΄ΠΎΠ±Π½Ρ‹ΠΉ доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ, Π½Π΅Ρ‚ Π΄ΡƒΠ±Π»Π΅ΠΉ НСт порядка, ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"
БоотвСтствиС Быстрый поиск ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ Π‘ΠΎΠ»ΡŒΡˆΠΈΠΉ расход памяти ЧастыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния/удалСния
БписокЗначСний ВстроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ МСньшС гибкости, Ρ‡Π΅ΠΌ Ρƒ массива Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹, Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° с массива Π½Π° БоотвСтствиС для ускорСния удалСния:

// ВмСсто массива

Π‘ΠΎΠΎΡ‚Π² = Новый БоотвСтствиС();

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ΠšΠ»ΡŽΡ‡1", "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1");

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ΠšΠ»ΡŽΡ‡2", "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2");

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π° O(1)

Π‘ΠΎΠΎΡ‚Π².Π£Π΄Π°Π»ΠΈΡ‚ΡŒ("ΠšΠ»ΡŽΡ‡1");

FAQ: ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ?

НСт. Π’ 1Π‘ массивы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ссылкС, Π½ΠΎ Ссли Π²Ρ‹ явно ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠ°ΠΊ Π—Π½Π°Ρ‡, Π±ΡƒΠ΄Π΅Ρ‚ создана копия. Однако измСнСния Π² ΠΊΠΎΠΏΠΈΠΈ Π½Π΅ отразятся Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ массивС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚(Π—Π½Π°Ρ‡ Массив, ИндСкс)

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(ИндСкс); // УдаляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠΏΠΈΠΈ!

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π§Ρ‚ΠΎΠ±Ρ‹ измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ массив Π±Π΅Π· Π—Π½Π°Ρ‡.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС удалСния элСмСнтов массив Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π² памяти?

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ Π½Π΅ всСгда сразу освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ послС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ массива. Π­Ρ‚ΠΎ связано с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, создайтС Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈ скопируйтС Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅:

Π‘ΠΆΠ°Ρ‚Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив();

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π­Π»Π΅ΠΌ Из Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

Π‘ΠΆΠ°Ρ‚Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌ);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива?

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π² 1Π‘ β€” это массивы массивов. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ массивом:

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив();

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив(1, 2, 3)); // Π‘Ρ‚Ρ€ΠΎΠΊΠ° 0

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив(4, 5, 6)); // Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1

// УдаляСм элСмСнт [1][0] (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4)

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²[1].Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(0);

ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ: Ссли послС удалСния строка становится пустой, Π΅Ρ‘ Ρ‚ΠΎΠΆΠ΅ стоит ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· внСшнСго массива.

МоТно Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· массива?

НСт, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ удалСния Π² массивах 1Π‘ Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Ρ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ вСрсий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ массивС) ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ с Ρ„Π»Π°Π³ΠΎΠΌ АктивСн:

Π”Π°Π½Π½Ρ‹Π΅ = Новый Массив();

Π”Π°Π½Π½Ρ‹Π΅.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, АктивСн", 100, Π˜ΡΡ‚ΠΈΠ½Π°));

// "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅" (дСактивация)

Π”Π°Π½Π½Ρ‹Π΅[0].АктивСн = Π›ΠΎΠΆΡŒ;

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· массива Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ?

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов массива Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это опСрация Π² памяти, Π° Π½Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Однако Ссли массив связан с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ()), ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ сохранСниС Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ:

ΠΠ°Ρ‡Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· массива ΠΈ запись Π² Π‘Π”

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(0);

ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ();

Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

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

ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;