Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: динамичСский массив

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

Иногда ΠΎΡ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ трСбуСтся нСограничСнная Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ простота использования списка, Π½ΠΎ ΠΏΡ€ΠΈ этом константноС врСмя доступа ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту, ΠΊΠ°ΠΊ Π² массивС. Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ список Π½Π° основС массива β€” динамичСский массив (Array List).

Класс ArrayList

ArrayList β€” это коллСкция, которая Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс IList ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ массив для хранСния элСмСнтов. Как ΠΈ связный список, ArrayList ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число элСмСнтов (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объСмом доступной памяти), Π½ΠΎ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ массив.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IList прСдоставляСт всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ICollection ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для чтСния, вставки ΠΈ удалСния элСмСнтов ΠΏΠΎ индСксу. Код Π½ΠΈΠΆΠ΅ сгСнСрирован с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«Implement InterfaceΒ» Π² Visual Studio 2010 ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ автоматичСски сгСнСрированных Π·Π°Π³Π»ΡƒΡˆΠ΅ΠΊ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², содСрТит Ρ‚Π°ΠΊΠΆΠ΅:

Вставка элСмСнтов

Вставка элСмСнтов Π² динамичСский массив отличаСтся ΠΎΡ‚ вставки Π² связный список. На Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹. ΠŸΠ΅Ρ€Π²Π°Ρ: динамичСский массив ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ вставку Π² сСрСдину массива, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² связный список ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ. Вторая: вставка элСмСнта Π² связный список всСгда выполняСтся Π·Π° константноС врСмя. Вставка Π² динамичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ O(1), Ρ‚Π°ΠΊ ΠΈ O(n) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ массива

По ΠΌΠ΅Ρ€Π΅ добавлСния элСмСнтов Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ. Π’ этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив. Π­Ρ‚ΠΎ опрСдСляСтся стратСгиСй роста динамичСского массива. ΠœΡ‹ рассмотрим Π΄Π²Π΅ стратСгии ΠΈ для ΠΎΠ±Π΅ΠΈΡ… посмотрим, насколько быстро растСт массив ΠΈ насколько Π΅Π³ΠΎ рост сниТаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Π΄Π²ΠΎΠ΅ (ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Mono ΠΈ Rotor)

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

ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ рост (ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Java)

Π’ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½ΠΎ массив растСт ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Π Π°Π·ΠΌΠ΅Ρ€ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: size = (size * 3) / 2 + 1;

ΠŸΡ€ΠΈ использовании этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мСньшС памяти.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ДинамичСскиС массивы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Π»Π΅Π³ΠΊΠΎ ΠΈ просто!

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ создадим массив ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ примСняя ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΡƒΡŽ (Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ) ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΡ€ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Ρ‚ΠΎ совСтуСм сначала ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅. Ну Π° Ссли Π²Ρ‹ это всС Π·Π½Π°Π΅Ρ‚Π΅, Ρ‚ΠΎ ΠΏΠΎΠ³Π½Π°Π»ΠΈ!

Быстрый ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ДинамичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ созданы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Для Π½ΠΈΡ… сущСствуСт функция ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (это ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½ΠΈΠΆΠ΅).

На ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… выдСляСтся Ρ€Π°Π·Π½ΠΎΠ΅ количСство ячССк.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² C++

Для создания динамичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π°ΠΌ понадобится ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½ΠΈΠΆΠ΅:

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π΅Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ:

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ! Если Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ отличаСтся ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° указатСля β€” Ρ‚ΠΎ эта динамичСская пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΠΈΡ‚ΡŒ большС Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‡Π΅ΠΌ такая ΠΆΠ΅ пСрСмСнная с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ!

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС ΠΌΠ°ΡΡΠΈΠ²Ρ‹ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования динамичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Π’Π½ΠΈΠ·Ρƒ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивыУдалСниС динамичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Как ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρƒ нас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ, Ссли понятным языком, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ПК.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½ΠΈΠΆΠ΅:

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отсутствиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° * ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. МногиС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Π΅Ρ€Ρ‹ Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎ это ΠΈ Π² дальнСйшСм ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ часами.

БтатичСскоС ΠΈ динамичСскоС объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

БтатичСскоС объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄: int number;

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивыЧто Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΌΠΈΡ€ΠΎΠΌ массивов Π² C++. ΠœΡ‹ Π½Π΅ Ρ€Π°Π· создавали ΠΈΡ… Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство ячССк ΠΈ ΠΏΡ€ΠΈ этом использовали статичСскоС созданиС массивов.

Но Π΅Ρ‰Π΅ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΈ ΠΈΡ… использованиС с указатСлями!

ΠœΡ‹ создавали массивы Π½Π° сто тысяч элСмСнтов, Π° Ρ‚ΠΎ ΠΈ большС. И Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π±Ρ‹Π²Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ большоС количСство ячССк ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ являСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² ПК.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ бСсполСзно Π½Π΅ использовали ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½Π°ΠΌ понадобится ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с указатСлями Π² свСтС массивов.

Нам Π½ΡƒΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для создания статичСского массива количСство ячССк Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ числовой константой (Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ нСприятно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, сколько Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ понадобится ячССк.

НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Ρ…ΠΎΡ‚Π΅Π» Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ 1000 чисСл Π² массив, Π° ΠΌΡ‹ ΠΈΠ·-Π·Π° нСзнания этого Ρ„Π°ΠΊΡ‚Π° сдСлали массив всСго лишь Π½Π° 500 ячССк.

ДинамичСский массив β€” это массив, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ количСство ячССк ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ числовой константой. Π­Ρ‚ΠΎ большой плюс ΠΏΠ΅Ρ€Π΅Π΄ использованиСм статичСского массива.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ динамичСскиС массивы

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСский массив Π² C++

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСский массив ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½ΠΈΠΆΠ΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π² Π‘ΠΈ

ΠžΡ‡Π΅Π½ΡŒ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массивов Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстна. Π’ этом случаС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

Для использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского выдСлСния памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс хранСния элСмСнтов массива.

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс статичСского массива опрСдСляСтся компилятором Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ объявлСния ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

Для динамичСского массива Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс присваиваСтся ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° массив Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского выдСлСния памяти

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского выдСлСния памяти находят Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ участок Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс этого участка.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского распрСдСлСния памяти:

Для использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского распрСдСлСния памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ :

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

Β«ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π°Β» Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ являСтся освобоТдСниС динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти Π² случаС отсутствия Π΅Π΅ дальнСйшСго использования. Однако Ссли динамичСски выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ освобоТдаСтся явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСна ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

Π€ΠΎΡ€ΠΌΠ° обращСния ΠΊ элСмСнтам массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ : ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ динамичСского ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈ Π²Π²ΠΎΠ΄ Π΅Π³ΠΎ элСмСнтов.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

ΠŸΡƒΡΡ‚ΡŒ трСбуСтся Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² динамичСской памяти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ n строк ΠΈ m столбцов. ДвумСрная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π»Π΅Π½Ρ‚Ρ‹, состоящСй ΠΈΠ· элСмСнтов строк. ΠŸΡ€ΠΈ этом индСкс любого элСмСнта Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅

index = i*m+j;

Рассмотрим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 3×4 (см. рис.)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы
ИндСкс Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта опрСдСлится ΠΊΠ°ΠΊ

index = 1*4+2=6

ОбъСм памяти, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для размСщСния Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, опрСдСлится ΠΊΠ°ΠΊ

nΒ·mΒ·(Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта)

Однако ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ объявлСнии компилятору явно Π½Π΅ указываСтся количСство элСмСнтов Π² строкС ΠΈ столбцС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту ΠΏΡƒΡ‚Π΅ΠΌ указания индСкса строки ΠΈ индСкса столбца являСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ:

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту с использованиСм указатСля Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ Π’Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ динамичСского Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

ГрафичСски Ρ‚Π°ΠΊΠΎΠΉ способ выдСлСния памяти ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы
ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ способС выдСлСния памяти компилятору явно ΡƒΠΊΠ°Π·Π°Π½ΠΎ количСство строк ΠΈ количСство столбцов Π² массивС.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ : Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹ΠΉ массив

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

ΠŸΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

Если Ρ€Π°Π·ΠΌΠ΅Ρ€ выдСляСмой памяти нСльзя Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚ΠΎ для увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

ВсС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ дСйствия (ΠΊΡ€ΠΎΠΌΠ΅ послСднСго) выполняСт функция

Π Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ptr измСняСтся Π½Π° size Π±Π°ΠΉΡ‚ΠΎΠ². Π‘Π»ΠΎΠΊ памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Π±Π»ΠΎΠΊΠ° памяти сохраняСтся Π΄Π°ΠΆΠ΅ Ссли Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ мСньший Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Π΅ΠΌ старый. Но ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. Если Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти большС старого, Ρ‚ΠΎ содСрТимоС вновь Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π²Π²ΠΎΠ΄Π° массива Ρ†Π΅Π»Ρ‹Ρ… чисСл. ПослС Π²Π²ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопрос ΠΎ Π²Π²ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ записи: 92

#include
#include
#include
#include
#include
#include
#define S 5

using namespace std;

void two_dim_input( int ** a)
<
srand(time(0));
for ( int i = 0; i for ( int u = 0; u int *)a + i * S + u) = rand() % 99;
>
>

int ** mas = ( int **)calloc(S, sizeof (*mas));
for ( int i = 0; i int *)calloc(S, sizeof (mas));
two_dim_input(mas);
two_dim_output(mas);

two_dim_sum(mas);
printf( «\n\n» );
two_dim_output(mas);
for ( int i = 0; i // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
free(mas[i]); // освобоТдСниС памяти ΠΏΠΎΠ΄ строку
free(mas);
>

cout «_asm code started working» endl;

_asm <
pushf // ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ рСгистр Ρ„Π»Π°Π³ΠΎΠ² Π² стСк
pop var // ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΈΠ· стСка (ΡˆΡ‚Π°?)
>

cout «_asm code finished working» endl;

// Π’Ρ‹Π²ΠΎΠ΄ var
cout var endl;

short *var;
var = new short[1];
cout «_asm code started working» endl;

_asm <
pushf // ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ рСгистр Ρ„Π»Π°Π³ΠΎΠ² Π² стСк
pop *var[0] // ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΈΠ· стСка (ΡˆΡ‚Π°?)
>

cout «_asm code finished working» endl;

// Π’Ρ‹Π²ΠΎΠ΄ var
cout *var[0] endl;

#include
#include
#include
#include

#include
#include
#include
#include

#define _CRT_SECURE_NO_WARNINGS
#include «stdlib.h»
#include «stdio.h»
#include «conio.h»
#include «math.h»
#include
#include «locale.h»
#include «string.h»
#include «windows.h»
#include «time.h»

a = ( int **)realloc(a, (2*n*m) * sizeof ( int ));

for (i = n; i // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
<
for (j = 0; j // Ρ†ΠΈΠΊΠ» ΠΏΠΎ столбцам
<
a[i][j] = b[counter][j];
counter++;
>
printf( «\n» );
>

// ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° памяти
for (i = 0; i // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
free(a[i]); // освобоТдСниС памяти ΠΏΠΎΠ΄ строку
free(a);

for (i = 0; i // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
free(b[i]); // освобоТдСниС памяти ΠΏΠΎΠ΄ строку
free(b);

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ДинамичСскиС массивы Π² C++

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, объСм памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, задаСтся Π΅Ρ‰Π΅ Π΄ΠΎ процСсса компиляции посрСдством объявлСния этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСизвСстСн Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ распрСдСлСния памяти двумя способами:

Ѐункция malloc Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ячССк памяти для хранСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку этого Π±Π»ΠΎΠΊΠ°. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

void *malloc(size);

Π—Π΄Π΅ΡΡŒ size β€” Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ выдСляСмого участка памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…. Если Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° void *, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ указатСля.

Ѐункция β€” calloc Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для выдСлСния памяти. Π—Π°ΠΏΠΈΡΡŒ Π½ΠΈΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ num элСмСнтов ΠΏΠΎ size Π±Π°ΠΉΡ‚.

void *calloc (nime, size);

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ участок ΠΈΠ»ΠΈ NULL ΠΏΡ€ΠΈ нСвозмоТности Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ всСх Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов.

Ѐункция realloc измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π½Π΅Π΅ памяти. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Π½Π΅ΠΉ Ρ‚Π°ΠΊ:

char *realloc (void *p, size);

Π—Π΄Π΅ΡΡŒ p β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° size. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСняСтся адрСс области памяти, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ адрСс вСрнСтся Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Если фактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° NULL, Ρ‚ΠΎ функция realloc Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ функция malloc, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ выдСляСт участок памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size Π±Π°ΠΉΡ‚.

Для освобоТдСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция free. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Π½Π΅ΠΉ Ρ‚Π°ΠΊ:

void free (void *p size);

Π—Π΄Π΅ΡΡŒ p β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° участок памяти, Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ функциями malloc, calloc ΠΈΠ»ΠΈ realloc.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ new ΠΈ delete Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ функциям malloc ΠΈ free. New выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π΅Π³ΠΎ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ.

ДинамичСский массив β€” массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдСляСтся Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти осущСствляСтся функциями calloc, malloc ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new. АдрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка памяти хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ описан ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ mas ΠΈ Π΅ΠΌΡƒ присвоСн адрСс Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ области динамичСской памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new:

int *mas=new int[10];

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ памяти, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для хранСния 10 Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ Ρ‚ΠΈΠΏΠ° int.

ЀактичСски, Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ mas хранится адрСс Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта динамичСского массива. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ участкС памяти β€” mas+1, Π° mas+i являСтся адрСсом i-Π³ΠΎ элСмСнта. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ i-ΠΌΡƒ элСмСнту динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ mas[i], ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом *(mas +i). Π’Π°ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка памяти.

Когда динамичСский массив (Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) пСрСстаСт Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete.

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡, Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ:

Π—Π°Π΄Π°Ρ‡Π° 1

Найти сумму вСщСствСнных элСмСнтов динамичСского массива.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

О Π²Ρ‹Π±ΠΎΡ€Π΅ структур Π΄Π°Π½Π½Ρ‹Ρ… для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

Π§Π°ΡΡ‚ΡŒ 1. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ структуры

Массив

Когда Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Ρ‹ создаётС ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Когда Π½ΡƒΠΆΠ½ΠΎ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° Π²Ρ‹Π±ΠΎΡ€. Π― Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΈΡˆΡƒΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пяти Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ². Π­Ρ‚ΠΎΡ‚ способ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π²Π°ΠΌ Π½Π΅ потрСбуСтся ΠΏΡΡ‚ΡŒΠ΄Π΅ΡΡΡ‚ ΠΈΠ»ΠΈ сто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ВмСсто создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив.

Π‘ΡƒΠ΄Π΅Ρ‚ создан Π±ΡƒΡ„Π΅Ρ€ ΠΈΠ· 5 элСмСнтов, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ индСкс массива начинаСтся с нуля. Если Π² массивС ΠΏΡΡ‚ΡŒ элСмСнтов, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСксы ΠΎΡ‚ нуля Π΄ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ….

НСдостатки простого массива

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ массив Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Но, допустим, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² массив Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ элСмСнт. Π’ простом массивС этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Допустим, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива. Π’ простом массивС это Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’Ρ‹ привязаны ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ количСству элСмСнтов. Нам Π½ΡƒΠΆΠ΅Π½ массив, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒβ€¦

ДинамичСский массив

ДинамичСский массив β€” это массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ свой Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ языки программирования Π² своих стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ динамичСскиС массивы. Π’ C++ это vector. Π’ Java это ArrayList. Π’ C# это List. ВсС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСскими массивами. Π’ своСй сути динамичСский массив β€” это простой массив, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΅Ρ‰Ρ‘ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½ΠΈΡ… хранятся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ простого массива ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² простом массивС. ДинамичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ internalArray ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив Π±ΡƒΡ„Π΅Ρ€Π° хранится Π² maxCapacity. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов задаётся currentLength.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *