C Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹ΠΉ массив: ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти, динамичСскиС массивы

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

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

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


Π’ сСнтябрС 2018 Π³ΠΎΠ΄Π° Microsoft выпустила ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ добавляСт Π² Microsoft Excel ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ инструмСнты: динамичСскиС массивы (Dynamic Arrays) ΠΈ 7 Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΈ Π²Π΅Ρ‰ΠΈ, Π±Π΅Π· прСувСличСния, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ мСняСт всю ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ ΠΈ функциями ΠΈ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.


Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΡΡƒΡ‚ΡŒ.


ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ простая Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌ-мСсяцам. Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ Π»ΡŽΠ±ΡƒΡŽ ΠΏΡƒΡΡ‚ΡƒΡŽ ячСйку справа Π½Π° листС ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ Π² Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ-ссылку Π½Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ ячСйку, Π° сразу Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½?



Π’ΠΎ всСх ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… вСрсиях Excel послС наТатия Π½Π° Enter ΠΌΡ‹ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ содСрТимоС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки B2. А ΠΊΠ°ΠΊ ΠΈΠ½Π°Ρ‡Π΅?


Ну, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ этот Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π°Π³Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° =БУММ(B2:C4) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈΡ‚ΠΎΠ³.


Если Π±Ρ‹ Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ послоТнСС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ суммы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π’ΠΎΠΏ-3, Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сочСтаниС клавиш Ctrl+Shift+Enter.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ послС Π²Π²ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° Enter —Β ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ сразу всС значСния, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ:



Π­Ρ‚ΠΎ Π½Π΅ магия, Π° Π½ΠΎΠ²Ρ‹Π΅ динамичСскиС массивы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π² Microsoft Excel. Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΈΡ€ :)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСскими массивами


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


ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько «Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…» ячССк Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ — Excel Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΡ… вычислит ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚.


ΠŸΡ€ΠΈ этом ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° эти «Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅» ячСйки Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ спокойно:


Если ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку массива (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· G4 Π² F8), Ρ‚ΠΎ ΠΈ ΠΈ вСсь массив (Π΅Π³ΠΎ ссылки) сдвинСтся Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ…:


Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ массив, Ρ‚ΠΎ достаточно Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсти (ΠΌΡ‹ΡˆΡŒΡŽ ΠΈΠ»ΠΈ сочСтаниСм Ctrl+X, Ctrl+V), ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π³Π»Π°Π²Π½ΡƒΡŽ ячСйку G4 — вслСд Π·Π° Π½Π΅ΠΉ пСрСнСсСтся Π½Π° Π½ΠΎΠ²ΠΎΠ΅ мСсто ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ развСрнётся вСсь наш массив.


Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅ Π½Π° листС Π½Π° созданный динамичСский массив, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцсимвол # («Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠ°») послС адрСса Π΅Π³ΠΎ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ ячСйки:


НапримСр, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Π² ячСйкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° созданный динамичСский массив:


Ошибки динамичСских массивов


Но Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли для развёртывания массива Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достаточно пространства ΠΈΠ»ΠΈ Π½Π° Π΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ окаТутся ячСйки ΡƒΠΆΠ΅ занятыС Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ? Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ошибок Π² Excel — #ΠŸΠ•Π Π•ΠΠžΠ‘! (#SPILL!):


Как всСгда, Ссли Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΌΡ‹ΡˆΡŒΡŽ ΠΏΠΎ Π·Π½Π°Ρ‡ΠΊΡƒ с ΠΆΠ΅Π»Ρ‚Ρ‹ΠΌ Ρ€ΠΎΠΌΠ±ΠΎΠΌ ΠΈ Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ пояснСниС ΠΏΠΎ источнику ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ смоТСм быстро Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ячСйки:


АналогичныС ошибки Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ, Ссли массив Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ листа ΠΈΠ»ΠΈ натыкаСтся Π½Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡƒΡŽ ячСйку. Если ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ прСпятствиС, Ρ‚ΠΎ всё Ρ‚ΡƒΡ‚ ΠΆΠ΅ исправится Π½Π° Π»Π΅Ρ‚Ρƒ.

ДинамичСскиС массивы ΠΈ «ΡƒΠΌΠ½Ρ‹Π΅» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹


Если динамичСский массив ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° «ΡƒΠΌΠ½ΡƒΡŽ» Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ сочСтаниСм клавиш Ctrl+T ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Главная — Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (Home — Format as Table), Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ унаслСдуСт Π΅Ρ‘ Π³Π»Π°Π²Π½ΠΎΠ΅ качСство — автоподстройку Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².



ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΠΈΠ·Ρƒ ΠΈΠ»ΠΈ справа «ΡƒΠΌΠ½Π°Ρ» Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ динамичСский Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒΡΡ:


ΠŸΡ€ΠΈ этом, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° динамичСский Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² Ρ„ΠΎΡ€ΡƒΠΌΡƒΠ»Π°Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ «ΡƒΠΌΠ½ΠΎΠΉ» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:



ДинамичСскиС массивы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Excel


Π₯ΠΎΡ€ΠΎΡˆΠΎ, скаТСтС Π²Ρ‹. Всё это интСрСсно ΠΈ Π·Π°Π±Π°Π²Π½ΠΎ. НС Π½ΡƒΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ со ссылкой Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку исходного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²Π½ΠΈΠ· ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ ΠΈ всё Ρ‚Π°ΠΊΠΎΠ΅. И всё?


НС совсСм.


ДинамичСскиС массивы — это Π½Π΅ просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инструмСнт Π² Excel. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Ρ‹ Π² самоС сСрдцС (ΠΈΠ»ΠΈ ΠΌΠΎΠ·Π³) Microsoft Excel — Π΅Π³ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ. А это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ Π½Π°ΠΌ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Excel Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с динамичСскими массивами. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ осознали всю Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ВранспонированиС


Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки ΠΈ столбцы) Π² Microsoft Excel всСгда имСлась встроСнная функция ВРАНБП (TRANSPOSE). Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ сначала ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π±Ρ‹Π» Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 5Ρ…3, Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ 3×5), ΠΏΠΎΡ‚ΠΎΠΌ ввСсти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ сочСтаниС Ctrl+Shift+Enter, Ρ‚.ΠΊ. ΠΎΠ½Π° ΡƒΠΌΠ΅Π»Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ» массива.


Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ просто Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ячСйку, ввСсти Π² Π½Π΅Π΅ эту ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Enter — динамичСский массив сдСлаСт всё сам:



Π’Π°Π±Π»ΠΈΡ†Π° умноТСния


Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ», ΠΊΠΎΠ³Π΄Π° мСня просили наглядно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ прСимущСства Ρ„ΠΎΡ€ΠΌΡƒΠ» массива Π² Excel. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠŸΠΈΡ„Π°Π³ΠΎΡ€Π° достаточно Π²ΡΡ‚Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку B2, ввСсти Ρ‚ΡƒΠ΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‰ΡƒΡŽ Π΄Π²Π° массива (Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ чисСл 1..10) ΠΈ просто Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° Enter:


Π‘ΠΊΠ»Π΅ΠΉΠΊΠ° ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра


ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ, Π½ΠΎ ΡΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ стандартным ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ & (ампСрсанд). ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΡ†ΠΏΠ΅ΠΈΡ‚ΡŒ имя ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΈΠ· Π΄Π²ΡƒΡ… столбцов ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ скачущий рСгистр Π² исходных Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π΅Π»Π°Π΅ΠΌ это ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ, которая Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ вСсь массив, Π° ΠΏΠΎΡ‚ΠΎΠΌ примСняСм ΠΊ Π½Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ПРОПНАЧ (PROPER), Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти Π² порядок рСгистр:


Π’Ρ‹Π²ΠΎΠ΄ Π’ΠΎΠΏ-3


ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° чисСл, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ вывСсти Ρ‚Ρ€ΠΈ Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, располоТив ΠΈΡ… Π² порядкС убывания. Π’Π΅ΠΏΠ΅Ρ€ΡŒ это дСлаСтся ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ ΠΈ, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π±Π΅Π· всяких Ctrl+Shift+Enter ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅:


Если захочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π»ΠΈΡΡŒ Π½Π΅ Π² столбСц, Π° Π² строку, Ρ‚ΠΎ достаточно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² этой Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ двоСточия (Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ строк) Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой (Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строки). Π’ англоязычной вСрсии Excel Ρ€ΠΎΠ»ΡŒ этих Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΈ запятая, соотвСтствСнно.


Π’ΠŸΠ  ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰Π°Ρ сразу нСсколько столбцов


Π€ΡƒΠ½ΠΊΡ†Π΅ΠΉ Π’ΠŸΠ  (VLOOKUP) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ значСния Π½Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Π° сразу ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов — достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π° (Π² любом ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌ порядкС) Π² Π²ΠΈΠ΄Π΅ массива Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:


Ѐункция Π‘ΠœΠ•Π© (OFFSET) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ динамичСский массив


Одной ΠΈΠ· самых интСрСсных ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… (послС Π’ΠŸΠ ) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… являСтся функция Π‘ΠœΠ•Π© (OFFSET), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я посвятил Π² своё врСмя Ρ†Π΅Π»ΡƒΡŽ Π³Π»Π°Π²Ρƒ Π² своСй ΠΊΠ½ΠΈΠΆΠΊΠ΅ ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ здСсь. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΈ освоСнии этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° массив (Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½) Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ, Ρ‚.ΠΊ. Excel Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΡƒΠΌΠ΅Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивами «ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ».


БСйчас эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΈ динамичСского массива, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Π‘ΠœΠ•Π©, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ всС строки ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΎΠ²Π°Ρ€Ρƒ ΠΈΠ· любой отсортированной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:



Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π΅Ρ‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

  • А1 — стартовая ячСйка (Ρ‚ΠΎΡ‡ΠΊΠ° отсчёта)
  • ΠŸΠžΠ˜Π‘ΠšΠŸΠžΠ—(F2;A2:A30;0) — вычислСниС сдвига ΠΎΡ‚ стартовой ячСйки Π²Π½ΠΈΠ· — Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ капусты.
  • 0 — сдвиг «ΠΎΠΊΠ½Π°» Π²ΠΏΡ€Π°Π²ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ стартовой ячСйки
  • Π‘Π§ΠΠ’Π•Π‘Π›Π˜(A2:A30;F2) — вычислСниС высоты Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ «ΠΎΠΊΠ½Π°» — количСства строк, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ капуста.
  • 4 — Ρ€Π°Π·ΠΌΠ΅Ρ€ «ΠΎΠΊΠ½Π°» ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, Ρ‚.Π΅. Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ 4 столбца

НовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для динамичСских массивов


Помимо ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° динамичСских массивов Π² старых функциях, Π² Microsoft Excel Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ нСсколько ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρƒ с динамичСскими массивами. Π’ частности, это:

  • БОРВ (SORT) — сортируСт Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ динамичСский массив Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅
  • БОРВПО (SORTBY) — ΡƒΠΌΠ΅Π΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΠΎ значСниям ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ
  • Π€Π˜Π›Π¬Π’Π  (FILTER) — ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· исходного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° строки, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ условиям
  • УНИК (UNIQUE) — ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΈΠ»ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Ρ‹
  • Π‘Π›ΠœΠΠ‘Π‘Π˜Π’ (RANDARRAY) — Π³Π΅Π½Π΅Ρ€ΠΈΡ‚ массив случайных чисСл Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
  • ΠŸΠžΠ‘Π›Π•Π” (SEQUENCE) — Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ массив ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ чисСл с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ шагом


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Π½ΠΈΡ… — Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Они стоят ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ (ΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎΠΉ) для Π²Π΄ΡƒΠΌΡ‡ΠΈΠ²ΠΎΠ³ΠΎ изучСния πŸ™‚


Π’Ρ‹Π²ΠΎΠ΄Ρ‹


Если Π²Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ всё написанноС Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ, Π΄ΡƒΠΌΠ°ΡŽ, ΡƒΠΆΠ΅ осознаётС ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ Π² Excel Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅, Π»Π΅Π³Ρ‡Π΅ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅. Π―, ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒΡΡ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π² шокС ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько статСй Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ придСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ здСсь, Π½Π° этом сайтС ΠΈ Π² ΠΌΠΎΠΈΡ… ΠΊΠ½ΠΈΠ³Π°Ρ…, Π½ΠΎ Π³ΠΎΡ‚ΠΎΠ² это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π»Π΅Π³ΠΊΠΈΠΌ сСрдцСм.


Подбивая ΠΈΡ‚ΠΎΠ³ΠΈ, Π² ΠΏΠ»ΡŽΡΡ‹ динамичСских массивов ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • МоТно Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎ сочСтаниС Ctrl+Shift+Enter. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Excel Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ «ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ» ΠΈ «Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ массива» ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.
  • ΠŸΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Π£ΠœΠœΠŸΠ ΠžΠ˜Π—Π’ (SUMPRODUCT), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ€Π°Π½ΡŒΡˆΠ΅ использовали для Π²Π²ΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ» массива Π±Π΅Π· Ctrl+Shift+Enter Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ — Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ достаточно просто БУММ ΠΈ Enter.
  • Π£ΠΌΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (БУММ, Π•Π‘Π›Π˜, Π’ΠŸΠ , Π‘Π£ΠœΠœΠ•Π‘Π›Π˜ΠœΠ ΠΈ Ρ‚. Π΄.) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ частично ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ динамичСскиС массивы.
  • Π•ΡΡ‚ΡŒ обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: Ссли ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ с динамичСскими массивами Π² старой вСрсии Excel, Ρ‚ΠΎ ΠΎΠ½ΠΈ прСвратятся Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива (Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках) ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² «ΡΡ‚Π°Ρ€ΠΎΠΌ стилС».


Нашлось ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство минусов:

  • НСльзя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ строки, столбцы ΠΈΠ»ΠΈ ячСйки ΠΈΠ· динамичСского массива, Ρ‚.Π΅. ΠΎΠ½ ΠΆΠΈΠ²Ρ‘Ρ‚ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  • НСльзя ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· Π”Π°Π½Π½Ρ‹Π΅ — Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° (Data — Sort). Для этого Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция БОРВ (SORT).
  • ДинамичСский Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ нСльзя ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΡƒΠΌΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ динамичСский Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π½Π° основС ΡƒΠΌΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹).


Π‘Π°ΠΌΠΎ-собой, это Π΅Ρ‰Π΅ Π½Π΅ ΠΊΠΎΠ½Π΅Ρ† ΠΈ, я ΡƒΠ²Π΅Ρ€Π΅Π½, Microsoft ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Π“Π΄Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ?


И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π³Π»Π°Π²Π½Ρ‹ΠΉ вопрос :)


Microsoft Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ анонсировало ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΠΏΡ€Π΅Π²ΡŒΡŽ динамичСских массивов Π² Excel Π΅Ρ‰Π΅ Π² сСнтябрС 2018 Π³ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Ignite. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ нСсколько мСсяцСв происходило Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΈ ΠΎΠ±ΠΊΠ°Ρ‚ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй сначала Π½Π° ΠΊΠΎΡˆΠΊΠ°Ρ… сотрудниках самой Microsoft, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π½Π° Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΡ†Π°Ρ…-тСстировщиках ΠΈΠ· ΠΊΡ€ΡƒΠ³Π° Office Insiders. Π’ этом Π³ΠΎΠ΄Ρƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ динамичСскиС массивы стали постСпСнно Ρ€Π°ΡΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΏΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ подписчикам Office 365. Π―, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² августС с ΠΌΠΎΠ΅ΠΉ подпиской Office 365 Pro Plus (Monthly Targeted).


Если Π² вашСм Excel Π΅Ρ‰Ρ‘ Π½Π΅Ρ‚ динамичСских массивов, Π° ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ ΠΎΡ‡Π΅Π½ΡŒ хочСтся, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

  • Если Ρƒ вас подписка Office 365, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΡ€ΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π΄ΠΎ вас Π΄ΠΎΠΉΠ΄Π΅Ρ‚ это ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. Как быстро это случится — зависит ΠΎΡ‚ настройки частоты доставки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ для вашСго Office (Ρ€Π°Π· Π² Π³ΠΎΠ΄, Ρ€Π°Π· Π² ΠΏΠΎΠ»Π³ΠΎΠ΄Π°, Ρ€Π°Π· Π² мСсяц). Если Ρƒ вас ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ПК, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ вашСго администратора Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎΡ‡Π°Ρ‰Π΅.
  • МоТно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² ряды Ρ‚Π΅Ρ… самых Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΡ†Π΅Π²-тСстировщиков Office Insiders — Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ возмоТности ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½ΠΎ Π΅ΡΡ‚ΡŒ шанс ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ Π³Π»ΡŽΡ‡Π½ΠΎΡΡ‚ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Excel, само-собой).
  • Если Ρƒ вас Π½Π΅ подписка, Π° коробочная standalone-вСрсия Excel, Ρ‚ΠΎ придСтся ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии Office ΠΈ Excel Π² 2022 Π³ΠΎΠ΄Ρƒ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΈΡ… вСрсий ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ обновлСния бСзопасности ΠΈ исправлСния ошибок, Π° всС Π½ΠΎΠ²Ρ‹Π΅ «ΠΏΠ»ΡŽΡˆΠΊΠΈ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подписчикам Office 365. Sad but true πŸ™‚


Π’ любом случаС, ΠΊΠΎΠ³Π΄Π° динамичСскиС массивы появятся Π² вашСм Excel — послС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΊ этому ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ πŸ™‚


Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

2. ДинамичСскиС массивы β€” ДокумСнтация Programming

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² языкС C

Массив β€” это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, состоящий ΠΈΠ· элСмСнтов, располоТСнных Π² памяти
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ .

ΠŸΡ€ΠΈ использовании массивов слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ряд особСнностСй.

Π’ стандартС Π‘89 Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ извСстСн Π½Π° этапС компиляции. Π’
стандартС Π‘99 появились массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (Variable-length array), Π½ΠΎ
ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΎΡΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: послС объявлСния массива Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
количСство элСмСнтов Π² Π½Π΅ΠΌ.

Массив нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с массивами, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚
пСрСносимого способа ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, располагая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π°
Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт.

ΠŸΠ°ΠΌΡΡ‚ΡŒ для массивов выдСляСтся Π² стСкС . ΠŸΠ°ΠΌΡΡ‚ΡŒ Π² стСкС выдСляСтся ΠΈ
освобоТдаСтся автоматичСски, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½Π΅ΠΉ. Однако
Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка составляСт 8ΠœΠ‘. Для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка
Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° администратора.

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

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ массива нСизвСстСн Π½Π°
этапС компиляции, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. ΠŸΡ€ΠΈ этом
трСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ прСимущСства ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… массивов: ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам Π·Π° O(1).
Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСскиС массивы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ историчСским
ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π² контСкстС языка C++ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ.

Π’Π΅ΠΊΡ‚ΠΎΡ€ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:

  1. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° участок памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся элСмСнты.
    |
    size = 5

    Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

    IntVector *int_vector_new(size_t initial_capacity)

    Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ массив Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:initial_capacity (size_t) – исходная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° IntVector, Ссли ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.
    Π˜Π½Π°Ρ‡Π΅ NULL.

    Implementation note: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
    оТидаСтся Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… участков памяти: для структуры IntVector ΠΈ
    для массива Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры. Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ
    ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ любого ΠΈΠ· участков памяти, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
    частично сформированный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти Π²
    случаС ошибки.

    IntVector *int_vector_copy(const IntVector *v)
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° копию Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v.
    NULL, Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.
    void int_vector_free(IntVector *v)

    ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v.

    int int_vector_get_item(const IntVector *v, size_t index)
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:элСмСнт ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ index. Π’ случаС Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива
    ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.
    void int_vector_set_item(IntVector *v, size_t index, int item)

    ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ‚ элСмСнту ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ index Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ item. Π’ случаС
    Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

    size_t int_vector_get_size(const IntVector *v)
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.
    size_t int_vector_get_capacity(const IntVector *v)
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.
    |
    size = 7

    void int_vector_pop_back(IntVector *v)

    УдаляСт послСдний элСмСнт ΠΈΠ· массива.
    НСт эффСкта, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ 0.

    int int_vector_shrink_to_fit(IntVector *v)

    Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива Π΄ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:0 Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ измСнСния Смкости, -1 Π² случаС ошибки.
    int int_vector_resize(IntVector *v, size_t new_size)

    Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива.

    Если Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива большС исходного, Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ элСмСнты
    Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нулями.

    Если Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива мСньшС исходного, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π½Π΅
    происходит. Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Смкости массива Π² этом случаС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ int_vector_shrink_to_fit.

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:0 Π² случаС успСха, -1 Π² случаС ошибки. Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
    Ρ€Π°Π·ΠΌΠ΅Ρ€, массив остаСтся Π² исходном состоянии.
    int int_vector_reserve(IntVector *v, size_t new_capacity)

    Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ массива.

    НСт эффСкта, Ссли новая Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ мСньшС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½Π° исходной.

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:0 Π² случаС успСха, -1 Π² случаС ошибки. Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
    Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, массив остаСтся Π² исходном состоянии.

    Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: динамичСский массив

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

    ДинамичСский массив — это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ динамичСски распрСдСляСмый массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой массив, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ фиксирован ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива, хотя динамичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠΉ части.

    ДинамичСскиС массивы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ

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

    Массив фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ достаточСн Π² прилоТСниях, Π³Π΄Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ являСтся фиксированным (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ спСцификации), ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСн Π΄ΠΎ выдСлСния массива. ДинамичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли:

    • ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ нСизвСстСн ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ массив Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½
    • считаСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ спСцификациСй, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ
    • амортизированная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сущСствСнного влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°
    ГСомСтричСскоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ амортизированная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, динамичСскиС массивы ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° большоС количСство, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ΄Π²Π°ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ пространство для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ добавлСния элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    function insertEnd(dynarray a, element e)
        if (a.size == a.capacity)
            // ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π΄Π²Π° Ρ€Π°Π·Π° 
            // ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ:
            a.capacity ← a.capacity * 2 
            // ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС 
            // Π² Π½ΠΎΠ²ΡƒΡŽ ячСйку памяти
        a[a.size] ← e
        a.size ← a.size + 1
    

    ΠŸΡ€ΠΈ вставкС n элСмСнтов Смкости ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π΅ΡΡΠΈΡŽ. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ массива Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΡŽ a Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ вставка n элСмСнтов Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΎΠ±Ρ‰Π΅ΠΌ O(n) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая вставка Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ постоянноС врСмя. МногиС динамичСскиС массивы Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ Ρ‡Π°ΡΡ‚ΡŒ основного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ссли Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½ΠΈΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 30% Смкости. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ€ΠΎΠ³ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ строго мСньшС, Ρ‡Π΅ΠΌ 1/a, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ гистСрСзис (ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ полосу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ роста ΠΈ сокращСния) ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ вставок ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ с Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ постоянными Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ.

    ДинамичСскиС массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ распространСнным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π°Π½Π°Π»ΠΈΠ·Ρƒ.

    Π€Π°ΠΊΡ‚ΠΎΡ€ роста

    ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ роста для динамичСского массива зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ пространством-Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² самом распрСдСлитСлС памяти. Для Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° роста a срСднСС врСмя Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ вставки составляСт ΠΎΠΊΠΎΠ»ΠΎ a/(a-1), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ количСство потСрянных ячССк ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π²Ρ‹ΡˆΠ΅ (a-1)n. Если Π² распрСдСлитСлС памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ размСщСния, Ρ‚ΠΎ значСния коэффициСнта роста, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ a=2, ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ динамичСскому Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ массива Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ памяти, Π΄Π°ΠΆΠ΅ Ссли Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм памяти всС Π΅Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн. Π‘Ρ‹Π»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ обсуТдСния ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² роста, Π² Ρ‚ΠΎΠΌ числС прСдлоТСния ΠΏΠΎ Π·ΠΎΠ»ΠΎΡ‚ΠΎΠΌΡƒ ΡΠ΅Ρ‡Π΅Π½ΠΈΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1,5. Однако Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ… a = 2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для простоты ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°.

    НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ роста, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ нСсколькими популярными рСализациями:

    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

    Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ списковых структур Π΄Π°Π½Π½Ρ‹Ρ…

    ДинамичСский массив ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ массиву, с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для добавлСния ΠΈ удалСния элСмСнтов:

    • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ установка значСния ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ индСксу (постоянноС врСмя)
    • ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов ΠΏΠΎ порядку (Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ врСмя, Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кСша)
    • Вставка ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² сСрСдинС массива (Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ врСмя)
    • Вставка ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта Π² ΠΊΠΎΠ½Ρ†Π΅ массива (постоянноС Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ врСмя)

    ДинамичСскиС массивы ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… прСимущСств массивов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ссылок ΠΈ использованиС кэша Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ (Π½ΠΈΠ·ΠΊΠΎΠ΅ использованиС памяти) ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ. Они ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшиС фиксированныС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ Смкости. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ динамичСскиС массивы ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ инструмСнтом для построСния структур Π΄Π°Π½Π½Ρ‹Ρ…, друТСствСнных ΠΊ ΠΊΠ΅ΡˆΡƒ. Однако Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Python ΠΈΠ»ΠΈ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ сСмантику, динамичСский массив, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ фактичСскиС Π΄Π°Π½Π½Ρ‹Π΅, Π° скорСС Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях памяти. Π’ этом случаС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ элСмСнтам Π² массивС фактичСски Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя доступ ΠΊ нСскольким нСсмСТным областям памяти, поэтому ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прСимущСства удобства ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ этой структуры Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ.

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

    БбалансированноС Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя достаточно эффСктивно обСспСчивая всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ динамичСских массивов, Ρ‚Π°ΠΊ ΠΈ связанных списков, Π½ΠΎ ΠΊΠ°ΠΊ вставка Π² ΠΊΠΎΠ½Ρ†Π΅, Ρ‚Π°ΠΊ ΠΈ итСрация ΠΏΠΎ списку происходит ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ для динамичСского массива, Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈΠ·-Π·Π° отсутствия ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСсурсов хранСния ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π°/манипуляции с Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ.

    Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

    Gap Π±ΡƒΡ„Π΅Ρ€Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° динамичСскиС массивы, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ эффСктивно ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки ΠΈ удалСния, кластСризованныС Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ мСстС. НСкоторыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ deque ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ массивы deques, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π·Π° Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ постоянноС врСмя Π½Π° ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†Π°Ρ… вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°.

    Π“ΡƒΠ΄Ρ€ΠΈΡ‡ прСдставил Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ динамичСского массива, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ O(sqrt(n)) для вставок ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ с сохранСниСм порядка ΠΈΠ· сСрСдины массива.

    Π”Π΅Ρ€Π΅Π²ΠΎ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива (HAT) — это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ динамичСского массива, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Битарски Π² 1996 Π³ΠΎΠ΄Ρƒ. Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ массивов Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ порядка sqrt(n) объСма пространства хранСния, Π³Π΄Π΅ n — количСство элСмСнтов Π² массивС. Алгоритм ΠΈΠΌΠ΅Π΅Ρ‚ O(1) Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ сСрии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ½Π΅Ρ† Π΄Π΅Ρ€Π΅Π²Π° Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива.

    Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ 1999 Π³. Brodnik et al. описали структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ динамичСского массива, которая Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ sqrt(2) пространства для n элСмСнтов Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ, Ρ‡Ρ‚ΠΎ любой динамичСский массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ мСста, Ссли ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ постоянным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅, Π½ΠΎ ΠΈ Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅Π΅ постоянноС врСмя.

    Языковая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°

    C++ std::vector ΠΈ Rust std::vec::Vec — это Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских массивов, Π° Ρ‚Π°ΠΊΠΆΠ΅ классы ArrayList, поставляСмыС с Java API ΠΈ .NET Framework.

    ΠžΠ±Ρ‰ΠΈΠΉ класс List, поставляСмый с вСрсиСй 2.0 .NET Framework, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм динамичСских массивов. OrderedCollection Π² Smalltalk — это динамичСский массив с динамичСским Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ индСксами, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Ρ‚Π°ΠΊΠΆΠ΅ O(1).

    РСализация списка Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (list datatype) Python прСдставляСт собой динамичСский массив.

    Delphi ΠΈ D Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ динамичСскиС массивы Π² основС языка.

    Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Ada Ada.Containers.Vectors обСспСчиваСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ динамичСского массива для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°.

    МногиС языки сцСнариСв, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Perl ΠΈ Ruby, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ динамичСскиС массивы ΠΊΠ°ΠΊ встроСнный ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

    НСсколько кроссплатформСнных срСд ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских массивов для C, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ CFArray ΠΈ CFMutableArray Π² Core Foundation, Π° Ρ‚Π°ΠΊΠΆΠ΅ GArray ΠΈ GPtrArray Π² GLib.


    Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:

    Π‘ΠΈΠ»Π» Π”ΠΆΠ΅Π»Π΅Π½. ДинамичСскиС массивы Π² Excel

    НСзамСтно для мСня Microsoft ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ» ΠΏΡ€ΠΎΡ€Ρ‹Π², прСдставив Π² сСнтябрС 2018 Π½ΠΎΠ²Ρ‹Π΅ возмоТности – динамичСскиС массивы. НиТС – ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠ½ΠΈΠ³ΠΈ Bill Jelen. Excel Dynamic Arrays Straight to the Point. Книги сСрии Straight to the Point ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ освСщСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ аспСкта Excel.

    Π‘ΠΈΠ»Π» Π”ΠΆΠ΅Π»Π΅Π½ – ΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сайта MrExcel.com ΠΈ Π°Π²Ρ‚ΠΎΡ€ мноТСства ΠΊΠ½ΠΈΠ³ ΠΎ Excel. Π‘Π°ΠΉΡ‚ бСсплатно ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 30 000 вопросов Π² Π³ΠΎΠ΄. Π’ ΠΌΠΎΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅ прСдставлСны Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π”ΠΆΠ΅Π»Π΅Π½Π°:

    Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Word ΠΈΠ»ΠΈ pdf, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Excel

    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

    1. Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹
    2. Ѐункция БОРВ
    3. Ѐункция БОРВПО
    4. Ѐункция Π€Π˜Π›Π¬Π’Π 
    5. Ѐункция УНИК
    6. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
    7. Ѐункция ΠŸΠžΠ‘Π›Π•Π”
    8. Ѐункция Π‘Π›ΠœΠΠ‘Π‘Π˜Π’
    9. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива (Ctrl+Shift+Enter) Ρ‚Π°ΠΊΠΈΠ΅ ТСсткиС: нСявноС пСрСсСчСниС
    10. Ѐункция ПРОБМОВРX ΠΈ динамичСскиС массивы
    11. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ динамичСскиС массивы
    12. ДинамичСскиС массивы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΡƒΠ±ΠΎΠ²

    Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

    Π Π°Π½Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ. Майк Π“ΠΈΡ€Π²ΠΈΠ½ написал ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива. Π¦Π΅Π»Ρ‹Π΅ Π³Π»Π°Π²Ρ‹ Ρ‚ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ здСсь Π±ΡƒΠ΄ΡƒΡ‚ свСдСны ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ прСдлоТСниям, благодаря Π½ΠΎΠ²Ρ‹ΠΌ функциям.

    О динамичСских массивах Π±Ρ‹Π»ΠΎ объявлСно 24 сСнтября 2018 Π³ΠΎΠ΄Π°, Π½ΠΎ Π΄Π°ΠΆΠ΅ Π² MS Excel 2019 ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ прСдставлСны. ДинамичСскиС массивы доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Office 365. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ бСссрочной Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ Π½Π° Office ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΈΠ»ΠΈ ΡˆΠ΅ΡΡ‚ΡŒ Π»Π΅Ρ‚ устарСла, ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° подписку.

    Как ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° эта ΠΊΠ½ΠΈΠ³Π°. Π’ Π³Π»Π°Π²Π΅ 1 Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰Π΅ΠΉΡΡ Π½Π° сосСдниС ячСйки. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ нСпустая ячСйка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΠ² массива, ΠΈ ΠΊΠ°ΠΊ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π’Ρ‹ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚Π΅ ΠΎ нСявном пСрСсСчСнии ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ нотация @ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π“Π»Π°Π²Ρ‹ 2–8 посвящСны ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡ… комбинациям. Π“Π»Π°Π²Π° 9 основана Π½Π° прСвосходном Π²ΠΈΠ΄Π΅ΠΎ Π”ΠΆΠΎ Макдэйда. Из этой Π³Π»Π°Π²Ρ‹ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Excel Calc: ПодъСм, Врансляция, ΠŸΠΎΠΏΠ°Ρ€Π½Ρ‹ΠΉ подъСм, УсСчСниС массива ΠΈ НСявноС пСрСсСчСниС. Π’ Π³Π»Π°Π²Π΅ 10 Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° способа, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… динамичСскиС массивы Π΄Π΅Π»Π°ΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ПРОБМОВРX Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½ΠΎΠΉ. Π’ 11-ΠΉ – ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ 24 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° объСдинСния динамичСских массивов с рядом ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Excel. Π’ 12-ΠΉ Π³Π»Π°Π²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ динамичСскиС массивы ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с  функциями ΠΊΡƒΠ±ΠΎΠ².

    ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с сайта Π°Π²Ρ‚ΠΎΡ€Π°. К ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Π»Π°Π²Π΅ я ΠΏΡ€ΠΈΠ»ΠΎΠΆΡƒ Ρ„Π°ΠΉΠ», Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊ настоящСму ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ.

    Π“Π»Π°Π²Π° 1. Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹

    Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³Ρƒ Ρ€Π°Π·Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ

    Π’ этой Π³Π»Π°Π²Π΅ рассматриваСтся новая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° =A2:A20, ошибка #ΠŸΠ•Π Π•ΠΠžΠ‘! ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ нСявный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ пСрСсСчСния @.

    НачнСм с Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ массива. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ячСйку Π•3. НабСритС =A2:C10. Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Excel Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ этот Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ массива, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΆΠ°Π² Ctrl+Shift+Enter.

    Рис. 1. Π€ΠΎΡ€ΠΌΡƒΠ»Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ячССк

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ Enter. Excel Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния Π² 27 ячССк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ автоматичСски Π²ΠΏΡ€Π°Π²ΠΎ ΠΈ Π²Π½ΠΈΠ·. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π² строкС формул… здСсь Π½Π΅Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π» Ctrl+Shift+Enter.

    Рис. 2. Одна Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π²Π΅Ρ€Π½ΡƒΠ»Π° мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

    Π―Ρ‡Π΅ΠΉΠΊΠ° E4 содСрТит тСкст Central, ΠΈ, хотя строка Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ для этой ячСйки, ΠΎΠ½Π° отобраТаСтся сСрым Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VBA, Ρ‡Ρ‚ΠΎ содСрТится Π² ячСйках Π•3 ΠΈ Π•4?

    Рис. 3. VBA ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ячСйкС Π•4 Π½Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°

    VBA ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ячСйкС Π•3 – Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, Π° Π² Π•4 – Π½Π΅Ρ‚. Π’Π°ΠΊΠΆΠ΅ Π² Excel ΠΌΠΎΠΆΠ½ΠΎ ввСсти Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ =Π•Π€ΠžΠ ΠœΠ£Π›Π(E4). Она Π²Π΅Ρ€Π½Π΅Ρ‚ Π›ΠžΠ–Π¬. И Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ D1:h30, ΠΈ ΠΏΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ мСню Главная –> Найти ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ –> Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹. Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ячСйка E3.

    Один ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… вопросов Π½Π° YouTube Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΌΠΎΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎ с динамичСскими массивами Π±Ρ‹Π»: ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²Ρ‹ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ значСния? Π”Π°! Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ E3:G11, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+C, ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ ячСйку ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ вставка –> ЗначСния.

    Π§Ρ‚ΠΎ происходит, Ссли Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ»ΠΈΡ‚ΡŒΡΡ?

    Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ячСйка, ΠΊΡƒΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π±ΡƒΠ΄Π΅Ρ‚ занята?

    Рис. 4. Как Excel справится с занятой ячСйкой?

    Excel Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ #ΠŸΠ•Π Π•ΠΠžΠ‘! Excel сообщаСт, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ массив Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ контСкстноС мСню слСва ΠΎΡ‚ ячСйки с ошибкой, ΠΌΠΎΠΆΠ½ΠΎ Β Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ячСйки. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡ… получится пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто листа.

    Рис. 5. Ошибка #ΠŸΠ•Π Π•ΠΠžΠ‘! ΠΈ Π΅Π΅ контСкстноС мСню

    Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ очиститС ячСйки, ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ массива, ΠΎΠ½ автоматичСски Ρ€Π°Π·ΠΎΠ»ΡŒΠ΅Ρ‚ΡΡ.

    БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² ошибки #ΠŸΠ•Π Π•ΠΠžΠ‘! Π’Π°, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅, называСтся Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для пСрСноса Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ пустой. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ошибки:

    • НСопрСдСлСнный Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ»Π°Ρ‚ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘Π›Π£Π§ΠœΠ•Π–Π”Π£(), Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠŸΠžΠ‘Π›Π•Π”ΠžΠ’().
    • Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ листа. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ =БОРВ(C:C) Π² ячСйкС E2.
    • Вабличная Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского массива Π²Π½ΡƒΡ‚Ρ€ΠΈ Π’Π°Π±Π»ΠΈΡ†Ρ‹.
    • НС Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти. Π’Π°ΠΌ слСдуСт ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.
    • Π Π°Π·Π»ΠΈΠ² Π² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ ячСйки. ДинамичСский массив Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡƒΡŽ ячСйку.
    • НСопознанная ошибка. Excel Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ.
    Если ваша Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π’Π°Π±Π»ΠΈΡ†Ρƒ, динамичСский массив Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… строк Π² Π’Π°Π±Π»ΠΈΡ†Ρƒ

    Рис. 6. ДинамичСский массив «отслСТиваСт» Π’Π°Π±Π»ΠΈΡ†Ρƒ

    Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ с рис. 2. Π’Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ А1:Π‘19 Π² Π’Π°Π±Π»ΠΈΡ†Ρƒ (Ctrl+T). Π€ΠΎΡ€ΠΌΡƒΠ»Π° Π² ячСйкС Π•3 измСнилась Π½Π° =Π’Π°Π±Π»ΠΈΡ†Π°1. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ строку Π² Π’Π°Π±Π»ΠΈΡ†Ρƒ (А11:Π‘11), Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π² ячСйкС Π•3 Π½Π΅ измСнится, Π° динамичСский массив автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡΡ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ строкой (Π•12:G12).

    Π₯отя Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π’Π°Π±Π»ΠΈΡ†Ρƒ, Π² самой Π’Π°Π±Π»ΠΈΡ†Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ динамичСского массива нСльзя.

    ИспользованиС Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ссылок Π½Π° массив: E3#

    Как Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° массив E3:G12, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ½ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‚ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (#) послС ячСйки, содСрТащСй Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ массива.

    НапримСр, =E3 Π²Π΅Ρ€Π½Π΅Ρ‚ East, =E3# Π²Π΅Ρ€Π½Π΅Ρ‚ вСсь массив, Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ хранится Π² E3. ΠΠ΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ это называСтся ссылочной Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ массива. Вакая нотация поддСрТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ссылкС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нСявноС пСрСсСчСниС

    Если Π²Ρ‹ Π²Π²Π΅Π΄Π΅Ρ‚Π΅ =@C2:C11 Π² любой ячСйкС Π² строках со 2 ΠΏΠΎ 10, Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· столбца Π‘ Ρ‚ΠΎΠΉ строки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π²Π²Π΅Π»ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ. Π—Π½Π°ΠΊ @ извСстСн ΠΊΠ°ΠΊ нСявный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ пСрСсСчСния.

    Рис. 7. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ нСявноС пСрСсСчСниС.

    БтатичСский массив ΠΏΡ€ΠΎΡ‚ΠΈΠ² динамичСского массива Π² C ++

    Π’Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹. К соТалСнию, сущСствуСт нСсколько ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ статичСскиС ΠΈ динамичСскиС массивы.

    БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с использованиСм статичСского распрСдСлСния памяти . Π­Ρ‚ΠΎ общая концСпция, Π½Π΅ зависящая ΠΎΡ‚ C / C ++. Π’ C / C ++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с глобальной, Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ»ΠΈ локальной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    int x[10]; 
    static int y[10]; 
    foo() {
        static int z[10]; 
    

    АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ с использованиСм выдСлСния памяти Π½Π° основС стСка . АвтоматичСский массив ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° C / C ++ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    foo() {
        int w[10]; 
    

    ΠžΠ±Ρ‰ΠΈΠΌ для этих массивов, x, y, zΠΈ wявляСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… фиксирован ΠΈ опрСдСляСтся Π²ΠΎ врСмя компиляции.

    Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ автоматичСским массивом ΠΈ статичСским массивом, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ статичСскоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рСализуСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅ BSS ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΈ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ адрСса для доступа ΠΊ массивам. Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π½Π° основС стСка.

    Под динамичСским массивом ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ подразумСваСтся Π½Π΅ Ρ‚ΠΎΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π° Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм динамичСского распрСдСлСния памяти с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, опрСдСляСмым Π²ΠΎ врСмя выполнСния. Π’ C ++ это дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ newΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° .

    foo() {
       int *d = new int[n]; 
    

    Но ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ автоматичСский массив с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ исправлСний, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π²ΠΎ врСмя выполнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ alloca:

    foo() {
        int *s = (int*)alloca(n*sizeof(int))
    

    Для настоящСго динамичСского массива слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ std::vectorC ++ (ΠΈΠ»ΠΈ массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² C ).

    Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² вопросС ОП? Π― Π΄ΡƒΠΌΠ°ΡŽ, ясно , Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ , Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ , Π½Π΅ Π±Ρ‹Π» статичным ΠΈΠ»ΠΈ автоматичСским массивом , Π½ΠΎ ΠΎΠ΄ΠΈΠ½ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ динамичСскоС распрСдСлСниС памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ newΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ массив нСфиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ std::vector.

    ДинамичСский массив — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ДинамичСский массив?

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

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ динамичСского массива Π½Π° языкС «Pascal»

     byteArray : Array of Byte; // ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив
     multiArray : Array of Array of string;  // ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив
    

    ДинамичСскиС массивы (ΠΈΠ»ΠΈ массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Delphi, FreePascal, Π½ΠΎ Π½Π΅ Turbo Pascal.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ объявлСния динамичСского массива Π½Π° языках C/C++

    ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив:

    Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив с 10-ю элСмСнтами Ρ‚ΠΈΠΏΠ° int:

    Π‘ΠΈ:

            int *mas = malloc (sizeof(int) * 10);
    

    Π‘++:

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ индСксу (порядковый Π½ΠΎΠΌΠ΅Ρ€):

            mas[0] = 2; // присвоили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2 Π½ΡƒΠ»Π΅Π²ΠΎΠΌΡƒ элСмСнту массива mas
            mas[1] = 7; // присвоили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 7 ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту массива mas
            //. .. ΠΈ Ρ‚.Π΄.
    

    Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ Π²Π°ΠΌ понадобится ΠΎΠΊΠΎΠ»ΠΎ дСсяти строк ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь массив. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ напишСм Ρ‚ΠΎΠΆΠ΅ самоС Π² Ρ†ΠΈΠΊΠ»Π΅:

           for(int i = 0; i < 10; i++){
                   cin>>mas[i]; // ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ i-Ρ‚ΠΎΠ³ΠΎ элСмСнта массива
           }
    

    ПослС Ρ‡Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с массивом. Π’Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ вывСсти Π½Π° экран:

           for(int i = 0; i < 10; i++){
                   cout << mas[i] << endl;
           }
    

    Для освобоТдСния ΠΈΠ· памяти ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ:

    Π‘ΠΈ:

    Π‘++: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete:

    Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ рСализация массива Π½Π΅ являСтся динамичСской, Ρ‚.ΠΊ. Π½Π΅Ρ‚ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° всСго лишь массивом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся realloc, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании malloc, Π½ΠΎ Π½Π΅ new. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ массив Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ старым массивом. Π’ Π‘++ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся std::vector. Π’ Π‘89 Π½Π΅Ρ‚ массивов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π‘99 (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π½Π΅ всС компиляторы). НСкоторыС (довольно старыС) компиляторы Π‘++ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ массивов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹.

    Бсылки

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

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

    Β 

    БтатичСскиС
    массивы, аля int a[3]={3,5,7}, Ρ…ΠΎΡ€ΠΎΡˆΠΈ своСй
    простотой. Но Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° «ΡΡ‚Π°Ρ‚ΠΈΠΊΠ°» массивов ΠΌΠ΅ΡˆΠ°Π΅Ρ‚.
    НапримСр, Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ пСрСмноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π»ΡŽΠ±Ρ‹Ρ… порядков. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚
    статичСский массив Π½Π΅ просто ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ — Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ здСсь практичСски
    Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ! Π˜Ρ‚Π°ΠΊ, встрСчайтС — динамичСский массив!

    Π§Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅? Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π’Ρ‹ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π° Π½Π΅ Π²ΠΎ врСмя
    Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ массивов. И Π½Π°Ρ‡Π½Π΅ΠΌ ΠΌΡ‹ с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ…
    (Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ…) массивов.

    int x
    = 5; // Ρ‚ΡƒΡ‚ задаСтся «Π΄Π»ΠΈΠ½Π°»
    массива (ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π½Π°ΠΌ доступно 5 элСмСнтов int)

    int *arr = new int[x]; // это созданиС

    // Π° это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

    arr[0]=1347;

    arr[4]=-124;

    Β Β Β 

    cout << arr[0] << endl << arr[4] << endl;


    ОсвобоТдСниС памяти (ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½ΠΎ) ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ:


    Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ (ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅) массивы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ слоТнСС:

    int x = 5;

    int y = 5;
    /* Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ масива */

    Β Β Β 
    int **arr = new int*[x];

    for(int i=0;i<x;i++) arr[i]=new int[y];


    «Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅» ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ:

    for(int i=0;i<x;i++)
    delete[]arr[i];

    delete[]arr;

    Π’Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы:

    int x = 5;

    int y = 5;

    int z = 4;
    /* Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива */

    int ***arr = new int**[x];

    for(int i=0;i<x;i++)

    {

    arr[i]=new int*[y];

    for(int j=0;j<y;j++) arr[i][j]=new int[z];

    }


    Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ:

    for(int i=0;i<x;i++)

    {

    for(int j=0;j<y;j++)

    {

    }

    delete[]arr[i];

    }

    delete[]arr;


    Π§Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…-, пяти- Π° Ρ‚Π°ΠΊΠΆΠ΅ n-ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ:

    int x=3,y=3,z=3,t=3;

    int ****arr = new int***[x];

    for(int i=0;i<x;i++)

    {

    arr[i] = new int**[y];

    for(int j=0;j<y;j++)

    {

    arr[i][j] = new int*[z];

    for(int k=0;k<z;k++)

    {

    arr[i][j][k] = new int[t];

    }

    }

    }


    ΠœΡ‹ создавали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массивы Ρ‚ΠΈΠΏΠ° int. Π’Π°ΠΊΠΆΠ΅
    само ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². НиТС
    динамичСский массив Ρ‚ΠΈΠΏΠ° float:

    int x = 3;

    int y = 7;

    float **arr = new float*[x];

    for(int i=0;i<x;i++) arr[i]=new float[y];


    УдаляСтся ΠΎΠ½ Ρ‚Π°ΠΊ ΠΆΠ΅ само.

    НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ внСсти iostream.h Ρ‡Ρ‚ΠΎΠ±Ρ‹ cout Ρ€Π°Π±ΠΎΡ‚Π°Π» (#include <iostream.h>)

    НаписанныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ (для Linux) Ρ‚ΡƒΡ‚
    (для Windows) Ρ‚ΡƒΡ‚.

    Π”Π΅Ρ€Π·Π°ΠΉΡ‚Π΅!

    Β 

    НАЗАД

    ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ — Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ C ++

    НовыС ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ []

    ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new . Π·Π° Π½ΠΎΠ²Ρ‹ΠΌ слСдуСт спСцификатор Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ, Ссли трСбуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, ΠΈΡ… количСство Π² скобках [] . Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти. Π•Π³ΠΎ синтаксис:


    ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ = Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ
    ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ = Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ [число_элСмСнтов]


    ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выдСлСния памяти, содСрТащСй ΠΎΠ΄ΠΈΠ½ СдинствСнный элСмСнт Ρ‚ΠΈΠΏΠ° Ρ‚ΠΈΠΏΠ° .Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выдСлСния Π±Π»ΠΎΠΊΠ° (массива) элСмСнтов Ρ‚ΠΈΠΏΠ° Ρ‚ΠΈΠΏΠ° , Π³Π΄Π΅ число_элСмСнтов — Ρ†Π΅Π»ΠΎΠ΅ число, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΈΡ… количСство. НапримСр:

      1 
    2
       int  * foo;
    foo =  Π½ΠΎΠ²Ρ‹ΠΉ   int  [5];  

    Π’ этом случаС систСма динамичСски выдСляСт пространство для пяти элСмСнтов Ρ‚ΠΈΠΏΠ° int ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π½Π° foo (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, foo Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° допустимый Π±Π»ΠΎΠΊ памяти с пространством для пяти элСмСнтов Ρ‚ΠΈΠΏΠ° int .

    Π—Π΄Π΅ΡΡŒ foo являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ foo , ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния foo [0] , Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния * foo (ΠΎΠ±Π° эквивалСнтны) . Ко Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ foo [1] , Π»ΠΈΠ±ΠΎ * (foo + 1) , ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ …

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

    ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Π°Ρ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, выдСляСтся систСмой ΠΈΠ· ΠΊΡƒΡ‡ΠΈ памяти. Однако ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° — ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ рСсурс, ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исчСрпан.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, Ρ‡Ρ‚ΠΎ всС запросы Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹ систСмой.

    C ++ прСдоставляСт Π΄Π²Π° стандартных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ выдСлСния:

    Один ΠΈΠ· Π½ΠΈΡ… — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ использовании этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈ сбоС выдСлСния создаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° bad_alloc . Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ — это мощная функция C ++, которая Π±ΡƒΠ΄Π΅Ρ‚ описана ΠΏΠΎΠ·ΠΆΠ΅ Π² этих руководствах. Но ΠΏΠΎΠΊΠ° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ выбрасываСтся ΠΈ ΠΎΠ½ΠΎ Π½Π΅ обрабатываСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСкращаСтся.

    Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² new ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

       
      foo =  Π½ΠΎΠ²Ρ‹ΠΉ   int  [5];  // Ссли распрСдСлСниС Π½Π΅ удаСтся, гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅   

    Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ извСстСн ΠΊΠ°ΠΊ nothrow , ΠΈ Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании, Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ сбоС выдСлСния памяти вмСсто Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ bad_alloc ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ new , являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ . ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ , ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

    Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ nothrow , объявлСнного Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ , Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для new :

       
      foo =  new  (nothrow)  int  [5];  

    Π’ этом случаС, Ссли Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этого Π±Π»ΠΎΠΊΠ° памяти Π½Π΅ удаСтся, сбой ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ², являСтся Π»ΠΈ foo Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ:

      1 
    2
    3
    4
    5
       int  * foo;
    foo =  new  (nothrow)  int  [5];
     , Ссли  (foo ==  nullptr ) {
        // ошибка ΠΏΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ памяти.ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹. 
    }  

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

    ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ []

    Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв динамичСски выдСляСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅; ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° большС Π½Π΅ Π½ΡƒΠΆΠ½Π°, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°ΠΌΡΡ‚ΡŒ снова стала доступной для Π΄Ρ€ΡƒΠ³ΠΈΡ… запросов динамичСской памяти.Π­Ρ‚ΠΎ Ρ†Π΅Π»ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete , синтаксис ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ:

      1 
    2
       ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ;
      ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ  [] ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ;  

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ с использованиСм new , Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ для массивов элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² скобках ( [] ).

    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для delete , Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π±Π»ΠΎΠΊ памяти, Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new , Π»ΠΈΠ±ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ (Π² случаС Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля , delete Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта ).

      1 
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
       // ΠΏΠΎΠΌΠ½ΠΈΠΌ-ΠΎ-ΠΌΠ°Ρ‚ΠΈΠΊ 
      #include  
      #include  
      с использованиСм пространства ΠΈΠΌΠ΅Π½    std;
    
      int  main ()
    {
        int  i, n;
        Π²Π½ΡƒΡ‚Ρ€  * Ρ€;
      cout <<  «Бколько чисСл Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ввСсти?Β» ;
      cin >> я;
      p =  Π½ΠΎΠ²Ρ‹ΠΉ  (Π±Π΅Π· выстрСла)  int  [i];
       , Ссли  (p ==  nullptr )
        cout <<  «Ошибка: Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒΒ» ;
        Π΅Ρ‰Π΅ 
      {
          для  (n = 0; n  "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число:" ;
          cin >> p [n];
        }
        cout <<  "Π’Ρ‹ Π²Π²Π΅Π»ΠΈ:" ;
          для  (n = 0; n  "," ;
          ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ  [] ΠΏ;
      }
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚  0;
    }  
      Бколько Ρ†ΠΈΡ„Ρ€ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ввСсти? 5
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€: 75
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€: 436
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€: 1067
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число: 8
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€: 32
    Π’Ρ‹ Π²Π²Π΅Π»ΠΈ: 75, 436, 1067, 8, 32,  

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² скобках Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ( i ), Π° Π½Π΅ постоянным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

       
      p =  Π½ΠΎΠ²Ρ‹ΠΉ  (Π±Π΅Π· ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°)  int  [i];  

    ВсСгда сущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для i Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ большоС, Ρ‡Ρ‚ΠΎ систСма Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ достаточно памяти.НапримСр, ΠΊΠΎΠ³Π΄Π° я попытался Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ Π½Π° вопрос «Бколько чисСл», моя систСма Π½Π΅ смогла Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ объСм памяти для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» тСкстовоС сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для этого случая (Ошибка : ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ).

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

    9.14 — ДинамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ массивов

    Автор Alex 18 августа 2015 Π³. | послСднСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: nascardriver: 3 фСвраля 2021 Π³.

    Помимо динамичСского выдСлСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ динамичСски Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ фиксированного массива, Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ фиксированным Π²ΠΎ врСмя компиляции, динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива позволяСт Π½Π°ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ массива Π²ΠΎ врСмя выполнСния.

    Для динамичСского размСщСния массива ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ массива new ΠΈ delete (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ new [] ΠΈ delete []):

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    #include

    #include // std :: size_t

    int main ()

    {

    std :: cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число:";

    std :: size_t length {};

    std :: cin >> length;

    int * массив {Π½ΠΎΠ²Ρ‹ΠΉ int [Π΄Π»ΠΈΠ½Π°] {}}; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив new.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ постоянной!

    std :: cout << "Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΠ» массив Ρ†Π΅Π»Ρ‹Ρ… чисСл Π΄Π»ΠΈΠ½Ρ‹" << length << '\ n';

    массив [0] = 5; // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для элСмСнта 0 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5

    delete [] array; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массива для освобоТдСния массива

    // Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ для массива Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nullptr / 0, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· области видимости сразу послС этого

    return 0;

    }

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ выдСляСм массив, C ++ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ массива new вмСсто скалярной вСрсии new.По сути, вызываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new [], Π΄Π°ΠΆΠ΅ Ссли [] Π½Π΅ помСщаСтся рядом с Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом.

    Π”Π»ΠΈΠ½Π° динамичСски выдСляСмых массивов Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² std :: size_t . ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ int , Π½ΠΎ это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ компилятора, Ссли компилятор настроСн с высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ прСдупрСТдСния. Π£ нас Π΅ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ использованиСм std :: size_t Π² качСствС Ρ‚ΠΈΠΏΠ° length ΠΈΠ»ΠΈ объявлСниСм length ΠΊΠ°ΠΊ int ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΡ€ΠΈ создании массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    int length {};

    std :: cin >> length;

    int * array {new int [static_cast (Π΄Π»ΠΈΠ½Π°)] {}};

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ мСста, Ρ‡Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для фиксированных массивов, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно большим.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ массив Π΄Π»ΠΈΠ½ΠΎΠΉ 1000000 (ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ 100000000). ΠŸΠΎΠΏΡ‹Ρ‚Π°ΠΉΡΡ! Из-Π·Π° этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ памяти Π² C ++, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ это динамичСски.

    ДинамичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массивов

    ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ динамичСски распрСдСлСнного массива ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ удалСния массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ delete [].

    Π­Ρ‚ΠΎ сообщаСт процСссору, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… вмСсто ΠΎΠ΄Π½ΠΎΠΉ.Одна ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ программисты ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСским распрСдСлСниСм памяти, — это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ delete вмСсто delete [] ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ динамичСски выдСляСмого массива. ИспользованиС скалярной вСрсии удалСния для массива ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти, сбоям ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

    Один ΠΈΠ· часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов ΠΎ массивС delete []: Β«ΠžΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ массива ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько памяти Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ?Β» ΠžΡ‚Π²Π΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ массив new [] отслСТиваСт, сколько памяти Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, поэтому массив delete [] ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ объСм.К соТалСнию, этот Ρ€Π°Π·ΠΌΠ΅Ρ€ / Π΄Π»ΠΈΠ½Π° нСдоступСн для программиста.

    ДинамичСскиС массивы ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ фиксированным массивам

    Π’ ΡƒΡ€ΠΎΠΊΠ΅ 9.10 — Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ массивы Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ фиксированный массив содСрТит адрСс памяти ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ фиксированный массив ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠ°Π΄Π°Ρ‚ΡŒΡΡ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. Π’ этой испорчСнной Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π»ΠΈΠ½Π° фиксированного массива нСдоступна (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π΅ доступСн Ρ‡Π΅Ρ€Π΅Π· sizeof ()), Π½ΠΎ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° нСбольшая.

    ДинамичСский массив Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ свою Тизнь ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ ограничСния Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ‚ своСй Π΄Π»ΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ДинамичСский массив Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½ΠΎΠΌΡƒ фиксированному массиву, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ программист ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° освобоТдСниС динамичСского массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова delete [].

    Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ динамичСски выдСляСмых массивов

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСски выдСляСмый массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0, синтаксис довольно прост:

    int * массив {Π½ΠΎΠ²Ρ‹ΠΉ int [Π΄Π»ΠΈΠ½Π°] {}};

    Π”ΠΎ C ++ 11 Π½Π΅ Π±Ρ‹Π»ΠΎ простого способа ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для фиксированных массивов).Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ массив ΠΈ явно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния элСмСнтам.

    int * array = new int [5];

    массив [0] = 9;

    массив [1] = 7;

    массив [2] = 5;

    массив [3] = 3;

    массив [4] = 1;

    Π‘ΡƒΠΏΠ΅Ρ€ Π½Π°Π΄ΠΎΠ΅Π΄Π°Π΅Ρ‚!

    Однако, начиная с C ++ 11, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСскиС массивы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²!

    int fixedArray [5] = {9, 7, 5, 3, 1}; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ фиксированный массив ΠΏΠ΅Ρ€Π΅Π΄ C ++ 11

    int * array {new int [5] {9, 7, 5, 3, 1}}; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ динамичСский массив, начиная с C ++ 11

    // Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ запись Ρ‚ΠΈΠΏΠ° Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ auto.Π­Ρ‚ΠΎ часто дСлаСтся для Ρ‚ΠΈΠΏΠΎΠ² с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

    Π°Π²Ρ‚ΠΎ * массив {Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [5] {9, 7, 5, 3, 1}};

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом синтаксисС Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° = ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π»ΠΈΠ½ΠΎΠΉ массива ΠΈ списком ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ².

    Для согласованности фиксированныС массивы Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

    int fixedArray [] {9, 7, 5, 3, 1}; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ фиксированный массив Π² C ++ 11

    char fixedArray [] {«Hello, world!» }; // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ фиксированный массив Π² C ++ 11

    Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π°Π½Π½Π΅ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ошибок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ вас, ΠΊΠΎΠ³Π΄Π° указанная Π΄Π»ΠΈΠ½Π° мСньшС фактичСской.

    На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания Π² GCC всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ошибка, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ инициализация динамичСски выдСляСмого массива символов с использованиСм строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π² стилС C Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компилятора:

    char * array = new char [14] {«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!» }; // Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² GCC, хотя Π΄ΠΎΠ»ΠΆΠ½ΠΎ

    Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² GCC, вмСсто этого динамичСски Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ std :: string (ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ свой массив char, Π° Π·Π°Ρ‚Π΅ΠΌ скопируйтС строку).

    ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массивов

    ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива позволяСт Π²Π°ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ массива Π²ΠΎ врСмя выдСлСния. Однако C ++ Π½Π΅ прСдоставляСт встроСнного способа измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡƒΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ массива. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, динамичСски выдСляя Π½ΠΎΠ²Ρ‹ΠΉ массив, копируя элСмСнты ΠΈ удаляя старый массив. Однако это ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам, особСнно ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ элСмСнта являСтся классом (Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ особыС ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡ… созданиС).

    Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

    К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, C ++ прСдоставляСт массив с измСняСмым Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ std :: vector. ΠœΡ‹ скоро прСдставим std :: vector.

    ВрСмя Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹

    ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая:
    * Π‘ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, сколько ΠΈΠΌΠ΅Π½ ΠΎΠ½ΠΈ хотят ввСсти.
    * ДинамичСски выдСляСт массив std :: string .
    * ΠŸΡ€ΠΎΡΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ имя.
    * Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ std :: sort для сортировки ΠΈΠΌΠ΅Π½ (см. 9.4 — Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива с использованиСм сортировки ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΈ 9.11 — АрифмСтика указатСля ΠΈ индСксация массива)
    * ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ отсортированный список ΠΈΠΌΠ΅Π½.

    std :: string ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сравнСниС строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сравнСния <ΠΈ>. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сравнСниС строк Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

    Π’Π°Ρˆ Π²Ρ‹Π²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этому:

     Бколько ΠΈΠΌΠ΅Π½ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ввСсти? 5
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя # 1: ДТСйсон
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя # 2: ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя # 3: Alex
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя # 4: ΠšΡ€ΠΈΡ
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя # 5: Π”ΠΆΠΎΠ½
    
    Π’ΠΎΡ‚ ваш отсортированный список:
    Имя # 1: АлСкс
    Имя # 2: ΠšΡ€ΠΈΡ
    Имя # 3: ДТСйсон
    Имя # 4: Π”ΠΆΠΎΠ½
    Имя # 5: ΠœΠ°Ρ€ΠΊ
     

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ std :: getline () для чтСния ΠΈΠΌΠ΅Π½, содСрТащих ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ std :: sort () с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° массив, Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

    std :: sort (массив, массив + длина массива);

    ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    #include <Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ> // std :: sort

    #include // std :: size_t

    #include

    #include // std :: numeric_limits

    #include

    std :: size_t getNameCount ()

    {

    std :: cout << "Бколько ΠΈΠΌΠ΅Π½ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ввСсти?";

    std :: size_t length {};

    std :: cin >> length;

    Π΄Π»ΠΈΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;

    }

    // ΠŸΡ€ΠΎΡΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти всС ΠΈΠΌΠ΅Π½Π°

    void getNames (std :: string * names, std :: size_t length)

    {

    // Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки, оставлСнный std :: cin.

    std :: cin.ignore (std :: numeric_limits :: max (), ‘\ n’);

    для (std :: size_t i {0}; i

    {

    std :: cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя #" << i + 1 << ":";

    std :: getline (std :: cin, names [i]);

    }

    }

    // ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ отсортированныС ΠΈΠΌΠ΅Π½Π°

    void printNames (std :: string * names, std :: size_t length)

    {

    std :: cout << "\ n Π’ΠΎΡ‚ ваш отсортированный список: \ n ";

    for (std :: size_t i {0}; i

    std :: cout << "Имя #" << i + 1 << ":" << names [i ] << '\ n';

    }

    int main ()

    {

    std :: size_t length {getNameCount ()};

    // ВыдСляСм массив для хранСния ΠΈΠΌΠ΅Π½

    auto * names {new std :: string [length] {}};

    getNames (ΠΈΠΌΠ΅Π½Π°, Π΄Π»ΠΈΠ½Π°);

    // Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ массив

    std :: sort (names, names + length);

    printNames (ΠΈΠΌΠ΅Π½Π°, Π΄Π»ΠΈΠ½Π°);

    // Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив delete

    delete [] names;

    // здСсь Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π² nullptr / 0, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· области

    // сразу послС этого.

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

    }

    ДинамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

    ДинамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

    Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

    Π•ΡΡ‚ΡŒ Π΄Π²Π° способа выдСлСния памяти для хранСния Π΄Π°Π½Π½Ρ‹Ρ…:

    1. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции (ΠΈΠ»ΠΈ статичСскоС)
      • ΠŸΠ°ΠΌΡΡ‚ΡŒ для ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… выдСляСтся компилятором
      • Π’ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ извСстны Π²ΠΎ врСмя компиляции
      • Для стандартных объявлСний массивов, поэтому Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ
        константа
    2. РаспрСдСлСниС динамичСской памяти
      • ΠŸΠ°ΠΌΡΡ‚ΡŒ, выдСляСмая Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» Π²ΠΎ врСмя выполнСния
      • динамичСски выдСляСмоС пространство, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π² извСстном сСгмСнтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
        ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° ΠΈΠ»ΠΈ бСсплатный ΠΌΠ°Π³Π°Π·ΠΈΠ½
      • ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство мСста ΠΈΠ»ΠΈ количСство элСмСнтов.
        компилятором Π·Π°Ρ€Π°Π½Π΅Π΅.
      • Для динамичСского распрСдСлСния памяти Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

    РаспрСдСлСниС динамичСской памяти

    • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ динамичСски Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ дисковоС пространство, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
      Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ»
    • По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ динамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ… шагов:
      1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСского пространства.
      2. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ своСго адрСса Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ (Ρ‡Ρ‚ΠΎΠ±Ρ‹
        мСсто ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ)
    • Для динамичСского выдСлСния памяти Π² C ++ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ
      ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.
    • Π˜Π·ΡŠΡΡ‚ΠΈΠ΅:
      • ОсвобоТдСниС — это «очистка» пространства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ
        Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
      • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции автоматичСски ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ ΠΈΡ…
        извСстная ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ (это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ для «Π°Π²Ρ‚оматичСского»
        ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅)
      • Π­Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° программиста — ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ динамичСски созданныС
        космос
      • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ delete
        ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

    Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСста ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ

    • Для динамичСского распрСдСлСния пространства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€
      Π½ΠΎΠ²Ρ‹Ρ… , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт Ρ‚ΠΈΠΏΠ° .

       Π½ΠΎΠ²Ρ‹ΠΉ int; // динамичСски выдСляСт int
       Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΡƒΠ±Π»ΡŒ; // динамичСски выдСляСт Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ
       
    • ΠŸΡ€ΠΈ динамичСском создании массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ, Π½ΠΎ Π² скобках.
      с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ послС Ρ‚ΠΈΠΏΠ°:

       Π½ΠΎΠ²Ρ‹ΠΉ int [40]; // динамичСски выдСляСт массив ΠΈΠ· 40 Ρ†Π΅Π»Ρ‹Ρ… чисСл
       Π½ΠΎΠ²Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ [Ρ€Π°Π·ΠΌΠ΅Ρ€]; // динамичСски выдСляСт массив Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²
                         // ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
       
    • Π­Ρ‚ΠΈ утвСрТдСния сами ΠΏΠΎ сСбС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
      Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ мСста Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½! НО, Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚
      Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ пространства, ΠΈ этот адрСс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
      хранится Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅:

       int * p; // объявляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ p
       p = Π½ΠΎΠ²Ρ‹ΠΉ int; // динамичСски выдСляСм int ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ адрСс Π² p
      
       Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ * d; // объявляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ d
       d = Π½ΠΎΠ²Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ; // динамичСски выдСляСм Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ адрСс Π² d
      
       // ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² однострочных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…
       int x = 40;
       int * list = Π½ΠΎΠ²Ρ‹ΠΉ int [x];
       число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой * числа = Π½ΠΎΠ²ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой [x + 10];
       

      ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π°
      Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ†Π΅Π»ΡŒ (ΠΈ самая ваТная).

    Доступ ΠΊ динамичСски создаваСмому пространству

    • Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° пространство Π±Ρ‹Π»ΠΎ динамичСски распрСдСлСно, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
      Π­Ρ‚ΠΎ?
    • Для Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
      для достиТСния динамичСски созданной Ρ†Π΅Π»ΠΈ:

        int * p = Π½ΠΎΠ²Ρ‹ΠΉ int; // динамичСскоС Ρ†Π΅Π»ΠΎΠ΅ число, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p
      
        * Ρ€ = 10; // присваиваСт 10 динамичСскому Ρ†Π΅Π»ΠΎΠΌΡƒ числу
        cout
       
    • Для динамичСски создаваСмых массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ-смСщСниС.
      ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ°ΠΊ имя массива ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный
      ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ скобок:

        double * numList = Π½ΠΎΠ²Ρ‹ΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ [Ρ€Π°Π·ΠΌΠ΅Ρ€]; // динамичСский массив
      
        для (int i = 0; i
       

    ОсвобоТдСниС динамичСской памяти

    • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ
      ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ .Один ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ
      Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится адрСс освобоТдаСмого пространства:

        int * ptr = Π½ΠΎΠ²Ρ‹ΠΉ int; // динамичСски создаваСмый int
        // ...
        ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ptr; // удаляСт ΠΏΡ€ΠΎΠ±Π΅Π», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ptr
       

      ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ptr ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ сущСствуСт ΠΊΠ°ΠΊ .
      Π­Ρ‚ΠΎ имСнованная пСрСмСнная, объСм ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ опрСдСляСтся ΠΏΡ€ΠΈ компиляции.
      врСмя. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ:

        ptr = Π½ΠΎΠ²Ρ‹ΠΉ int [10]; // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ p Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ массив
       
    • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ динамичСский массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту Ρ„ΠΎΡ€ΠΌΡƒ:
        ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ []  name_of_pointer ;
       

      ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

        int * list = Π½ΠΎΠ²Ρ‹ΠΉ int [40]; // динамичСский массив
      
        ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ [] список; // освобоТдаСт массив
        список = 0; // ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ список Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля
       

      ПослС освобоТдСния мСста всСгда рСкомСндуСтся ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π°
      null, Ссли Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ Ρ†Π΅Π»ΡŒ справа
      Π΄Π°Π»Π΅ΠΊΠΎ.

    • Для рассмотрСния: Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ Π½Π΅ смоТСтС ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ динамичСский
      ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с этим? (Ρ‚.Π΅. ΠΏΠΎΡ‡Π΅ΠΌΡƒ освобоТдСниС
      Π²Π°ΠΆΠ½ΠΎ?)

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния: динамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива

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

     int * list = Π½ΠΎΠ²Ρ‹ΠΉ int [Ρ€Π°Π·ΠΌΠ΅Ρ€];
     

    Π― Ρ…ΠΎΡ‡Ρƒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² массивС ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ list Π±Ρ‹Π»ΠΎ мСсто
    Π΅Ρ‰Π΅ Π½Π° 5 Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ старый ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½).

    Π•ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основных шага.

    1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ массив ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ
      Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. (Для этого Π²Π°ΠΌ понадобится Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ).

       int * temp = Π½ΠΎΠ²Ρ‹ΠΉ int [Ρ€Π°Π·ΠΌΠ΅Ρ€ + 5];
       
    2. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· старого массива Π² Π½ΠΎΠ²Ρ‹ΠΉ массив (сохраняя
      ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… позициях). Π­Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for.

       для (int i = 0; i
       
    3. Π£Π΄Π°Π»ΠΈΡ‚Π΅ старый массив — ΠΎΠ½ Π²Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½! (Π”Π΅Π»Π°Ρ‚ΡŒ
      ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ твоя ΠΌΠ°ΠΌΠ°, Π° мусор выноситС!)

       ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ [] список; // это удаляСт массив, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ "список" 
    4. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π’Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив назывался
      «ΡΠΏΠΈΡΠΎΠΊ» (Π΅Π³ΠΎ исходноС имя), поэтому ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ списка Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ адрСс.

       список = Ρ‚Π΅ΠΌΠΏ;
       

    Π’ΠΎΡ‚ ΠΈ всС! Массив списка Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° 5 большС, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ,
    ΠΈ Π² Π½Π΅ΠΌ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² исходном. Но сСйчас
    Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ мСсто для Π΅Ρ‰Π΅ 5 ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ².

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ C ++: динамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ массивов

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ C ++: динамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ массивов

    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с массивами фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

    ОбъявлСниС массива фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

    int a [100000]; 

    ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

    • ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ максимального .Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ максимум часто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ программист
      Π½Π΅Ρ‚ контроля Π½Π°Π΄ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
      ΠžΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ прСдполоТСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ максимум Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½, ΡΠ²Π»ΡΡŽΡ‚ΡΡ
      источник ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок программирования.
      ОбъявлСниС ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ
      Ρ€Π°ΡΡ‚ΠΎΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ памяти, ΠΈ Ссли Ρ‚Π°ΠΊΠΈΡ… массивов ΠΌΠ½ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚
      Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах.
    • Π‘Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ . ИспользованиС нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивным для Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…,
      Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚
      ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….Если ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива
      Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, большиС Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π΅Ρ† массива с
      катастрофичСскиС послСдствия. ΠœΠ°ΡΡΠΈΠ²Ρ‹ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

    Π­Ρ‚ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ динамичСски
    Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ пСрСраспрСдСлСниС массива, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½
    Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ. Оба эти дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ объявлСния массива ΠΊΠ°ΠΊ
    ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new для выдСлСния памяти,
    ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая большС Π½Π΅ Π½ΡƒΠΆΠ½Π°.

    Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€
    Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ это дСлаСтся с массивом.

    ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ

    Π½ΠΎΠ²Ρ‹Ρ…

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° динамичСски выдСляСмый
    array, ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ элСмСнта.
    НапримСр,

    int * a = NULL; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° int, ΠΏΠΎ сути Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ.
     

    ДинамичСски выдСляСмый массив ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
    ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ объявлСниС фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива.ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ объявлСниС создаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ выдСляСт
    любая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ± этом.

    Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ массив с ΠΊΠΎΠ΄ΠΎΠΌ> Π½ΠΎΠ²Ρ‹ΠΉ

    Когда ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива извСстСн, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ для Π½Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ.
    с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new ΠΈ сохранитС адрСс этой памяти
    Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСксы, ΠΊΠ°ΠΊ ΠΈ массивы.
    Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ считываСтся число ΠΈ выдСляСтся массив этого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

    int * a = NULL; // Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° int, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.int n; // Π Π°Π·ΠΌΠ΅Ρ€, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для массива
    cin >> n; // Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€
    a =  Π½ΠΎΠ²Ρ‹ΠΉ  int [n]; // ВыдСляСм n int ΠΈ сохраняСм ptr Π².
    for (int i = 0; i  a .
    a = NULL; // ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ использованиС нСдопустимой ссылки Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ.
     

    ОсвобоТдСниС памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ удалСния

    Когда Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с динамичСски выдСляСмой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, освободитС Π΅Π΅
    с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ удалСния .ПослС освобоТдСния памяти Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ
    ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌΠΈ Π½ΠΎΠ²Ρ‹ΠΌΠΈ запросами. ΠŸΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ освободила
    Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСн, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. Никогда Π½Π΅ освобоТдайтС ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая
    Π½Π΅ выдСлялся динамичСски — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ нСпрСдсказуСмы.

    ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ [] a; // Бвободная ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСлСнная для массива  a .
    a = NULL; // Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ освобоТдСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.
     

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅

    [] ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ массивов

    НСобходимо ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Β« [] Β»
    ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ массива, Π½ΠΎ Π½Π΅ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния.НСвозмоТно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ массива.

    Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ послС удалСния?

    ПослС delete Π² этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… я ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° NULL .
    Π’ этом Π½Π΅Ρ‚ строгой нСобходимости, Π½ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ любоС использованиС
    указатСля Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ячСйку памяти 0, которая
    — Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ NULL , Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ
    способ выдСлСния памяти Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ удаляСт сбрасываСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ? Π­Ρ‚ΠΎ происходит Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах,
    Π½ΠΎ спСцификация языка Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ этого, поэтому Π½Π΅ всС систСмы это Π΄Π΅Π»Π°ΡŽΡ‚.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

    ДинамичСский 2D-массив 3D Π² c

    ДинамичСский 2D- ΠΈ 3D-массив

    ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ статичСского массива ΠΈΠΌΠ΅ΡŽΡ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€. Они связаны Π² области Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ области стСка ΠΈΠ»ΠΈ Π² области констант Π² зависимости ΠΎΡ‚ объявлСния.
    Π’Π΅ΠΏΠ΅Ρ€ΡŒ эта Π³Ρ€ΡƒΠΏΠΏΠ° элСмСнтов зафиксирована ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π° ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ этот нСдостаток, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ динамичСский массив.
    ДинамичСский массив Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ выдСляСмый Π²ΠΎ врСмя выполнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc / calloc.

    ДинамичСскоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 1d массива Π² c

    ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ.НапримСр, Π²Π·ΡΡ‚ΡŒ цСлочислСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ malloc / calloc с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ….

    / * C Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ * /

    int * array = ( int *) malloc ( sizeof ( int ) * element_count);

    / * Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ C ++ * /

    int * array = ( int *) Π½ΠΎΠ²Ρ‹ΠΉ int [element_count];

    Π›Π΅Ρ‚Π΅Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ массива Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ статичСскиС элСмСнты массива.
    К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ operator [], ΠΊΠ°ΠΊ array [index].Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ со статичСским массивом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с динамичСским массивом.
    Нам Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ распрСдСлСнии, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

    / * Код с использованиСм динамичСского выдСлСния 1d массива * /

    Π²Π½ΡƒΡ‚Ρ€ i;

    int * array = ( int *) malloc ( sizeof ( int ) * element_count);

    для (i = 0; i {

    / * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ здСсь array [i] * /

    }

    / * Код с использованиСм статичСского выдСлСния 1d массива * /

    Π²Π½ΡƒΡ‚Ρ€ i;

    const int element_count = 8;

    int массив [element_count];

    для (i = 0; i {

    / * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ здСсь array [i] * /

    }

    Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ 2D-массива

    int main ( int argc, char * argv [])

    {

    int строк = 0;

    int cols = 0;

    int height = 0;

    int *** массив;

    Π²Π½ΡƒΡ‚Ρ€ r, c;

    printf (Β«2D-массив ΠΈΠΌΠ΅Π΅Ρ‚ строки:Β»);

    scanf («% d», & строк);

    printf (Β«2D-массив ΠΈΠΌΠ΅Π΅Ρ‚ столбцы:Β»);

    scanf («% d», & cols);

    array = ( int **) malloc ( sizeof ( int **) * строк);

    для (r = 0; r array [r] = ( int *) malloc ( sizeof ( int ) * cols);

    }

    для (r = 0; r для (c = 0; c
    scanf («% d», & array [r] [c]);

    }

    }

    printf («ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ 2D-массива: \ n»);

    для (r = 0; r для (c = 0; c
    }

    printf («\ ΠΏ»);

    }

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

    }

    Π’Ρ‹Π²ΠΎΠ΄ 2D-массива

    2D-массив ΠΈΠΌΠ΅Π΅Ρ‚ строки: 3
    2D-массив ΠΈΠΌΠ΅Π΅Ρ‚ столбцы: 4
    
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [0]: 1
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [1]: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [2]: 3
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [3]: 4
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [0]: 5
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [1]: 6
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [2]: 7
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [3]: 8
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [2] [0]: 9
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [2] [1]: 10
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [2] [2]: 11
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [2] [3]: 12
    
    ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ 2D-массива:
    01 02 03 04
    05 06 07 08
    09 10 11 12
     

    Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ 3D-массива

    # Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ

    #include

    int main ( int argc, char * argv [])

    {

    int строк = 0;

    int cols = 0;

    int height = 0;

    int *** массив;

    Π²Π½ΡƒΡ‚Ρ€ r, c, h;

    printf (Β«Π’ 3D-массивС Π΅ΡΡ‚ΡŒ строки:Β»);

    scanf («% d», & строк);

    printf (Β«3D-массив ΠΈΠΌΠ΅Π΅Ρ‚ столбцы:Β»);

    scanf («% d», & cols);

    printf («Высота 3D-массива:Β»);

    scanf («% d», & высота);

    array = ( int ***) malloc ( sizeof ( int ***) * высота);

    для (h = 0; h array [h] = ( int **) malloc ( sizeof ( int *) * строк);

    для (r = 0; r array [h] [r] = ( int *) malloc ( sizeof ( int ) * cols);

    }

    }

    для (h = 0; h для (r = 0; r для (c = 0; c
    scanf («% d», & array [h] [r] [c]);

    }

    }

    }

    printf («ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ 3D-массива: \ n»);

    для (h = 0; h printf («Π’ысота% d \ n», h);

    для (r = 0; r для (c = 0; c
    }

    printf («\ ΠΏ»);

    }

    printf («\ ΠΏ»);

    }

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;

    }

    Π’Ρ‹Π²ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

    Π’ 3D-массивС строк: 3
    3D-массив ΠΈΠΌΠ΅Π΅Ρ‚ столбцы: 4
    3D-массив ΠΈΠΌΠ΅Π΅Ρ‚ высоту: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [0] [0]: 1
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [0] [1]: 2
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [0] [2]: 3
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [0] [3]: 4
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [1] [0]: 5
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [1] [1]: 6
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [1] [2]: 7
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [1] [3]: 8
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [2] [0]: 9
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [2] [1]: 10
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [2] [2]: 11
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [0] [2] [3]: 12
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [0] [0]: 13
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [0] [1]: 14
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [0] [2]: 15
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [0] [3]: 16
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [1] [0]: 17
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [1] [1]: 18
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [1] [2]: 19
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [1] [3]: 20
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [2] [0]: 21
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [2] [1]: 22
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [2] [2]: 23
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнт массива [1] [2] [3]: 24
    
    ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ 3D-массива:
    Высота 0
    01 02 03 04
    05 06 07 08
    09 10 11 12
    
    Высота 1
    13 14 15 16
    17 18 19 20
    21 22 23 24
     

    О Π½Π°ΡˆΠΈΡ… Π°Π²Ρ‚ΠΎΡ€Π°Ρ… : Team EQA

    Π’Ρ‹ просмотрСли 1 страницу ΠΈΠ· 248.Π’Π°ΡˆΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ C Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π½Π° 0,00%. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свой прогрСсс Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ.

    β€Ή
    #
    β€Ί

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

    Массив — это мощная ΠΈ простая Π² использовании структура Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнная Π½Π° языкС C. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ массивы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π»Π΅Π³ΠΊΠΈΠΉ доступ ΠΊ своим элСмСнтам, Π° Ρ†Π΅Π»Ρ‹Π΅ массивы ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ². Однако Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдостатки / ограничСния массивов:

    1. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π²ΠΎ врСмя выполнСния: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для массивов выдСляСтся Π²ΠΎ врСмя компиляции, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. .Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли заявлСнный Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ситуации нСдостаточСн, исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° практичСски бСсполСзна. Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π­Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (Ссли исходный ΠΊΠΎΠ΄ нСдоступСн), Π»ΠΈΠ±ΠΎ ΠΎΡ‡Π΅Π½ΡŒ слоТно (Ссли исполняСмый Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ распространСн срСди большого количСства людСй). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива для экономии памяти Π² ситуациях, ΠΊΠΎΠ³Π΄Π° трСбуСтся мСньшСС количСство элСмСнтов массива.

    2. ΠŸΠΎΡ‚Π΅Ρ€ΠΈ памяти: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ Π²ΠΎ врСмя выполнСния, программист ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массивы Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Π΅ ситуации.Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ памяти ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠ°Π·Π½Π΅ΠΉ.

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

    ΠžΠ±Ρ‰ΠΈΠ΅ шаги для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским массивом Ρ‚ΠΈΠΏΠ° Tare ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

    1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ подходящСго Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, T * для Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, T ** для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ Ρ‚. Π”.) ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ для указания Π½Π° массив, ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π²ΠΎ врСмя выполнСния.

    2. Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ опрСдСляСтся ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, посрСдством взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вычислСний).

    3. ВрСбуСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ динамичСски выдСляСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с использованиСм опрСдСляСмой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ распрСдСлСния памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,g., ivec_alloc для Π²Π΅ΠΊΡ‚ΠΎΡ€Π° int, imat_alloc для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ int ΠΈ Ρ‚. Π΄.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈΠ»ΠΈ calloc.

    4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ динамичСский массив ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊ Π΅Π³ΠΎ элСмСнтам ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² индСкса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, a [ i ] для Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, a [ i ] [j] для ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ Ρ‚. Π”.), А массив ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ эти массивы функциям, хотя Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ различия для Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ высоких ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.

    5.ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого массива, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (скаТСм, ivec_realloc, imat_realloc ΠΈ Ρ‚. Π”.), ΠšΠΎΡ‚ΠΎΡ€Π°Ρ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ realloc ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ.

    6. Когда этот динамичСский массив большС Π½Π΅ трСбуСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π² систСму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π΅ΡΠΏΠ»Π°Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, imat _free) для ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов.

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

    ДинамичСский массив | БлСстящая Π²ΠΈΠΊΠΈ ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ Π½Π°ΡƒΠΊΠ΅

    ДинамичСский массив вносит Π²Π°ΠΆΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ Π² пространствС.

    ВрСмя

    Если динамичСский массив пСрСмСщаСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ вСсь массив являСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ (ΠΈ поэтому поиск выполняСтся Π·Π° постоянноС врСмя), для увСличСния ΠΈ пСрСмСщСния массива всС Ρ€Π°Π²Π½ΠΎ потрСбуСтся врСмя.Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС асимптотичСски вставка Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ O (n) O (n) O (n). Однако Π²Π°ΠΆΠ½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ врСмя выполнСния Π½Π° самом Π΄Π΅Π»Π΅ мСньшС; Π² частности, O (1) O (1) O (1).

    ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ — O (1), Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ — O (1), Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ * / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ — O (1), Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ — O (n), \ begin {array} {c} && \ text { ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ — O (1),} & \ text {Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ — O (1),} \\
    & \ text {Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ * / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ — O (1),} & \ text {Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ — O (n),} \ end {array} Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ * / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ — O (1) , ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ — O (1), Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ / ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ — O (n), Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ — O (1),

    * Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·

    Космос

    Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, Π² динамичСском массивС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ пространство.Π­Ρ‚ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ пространство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ-логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€-Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ-логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€-Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ-логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС это 2n βˆ’ n + 12n — n + 12n βˆ’ n + 1. Π­Ρ‚ΠΎΡ‚ Ρ…ΡƒΠ΄ΡˆΠΈΠΉ случай происходит сразу послС роста динамичСского массива. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пространство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ динамичСским массивом, составляСт O (2n) O (2n) O (2n), для Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ пространства O (n) O (n) O (n). Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ пространство Π² большой Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ это Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

    ΠŸΡ€ΠΎΠ±Π΅Π» — O (n) \ begin {array} {c} && \ text {ΠŸΡ€ΠΎΠ±Π΅Π» — O (n)} \ end {array} ΠŸΡ€ΠΎΠ±Π΅Π» — O (n)

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

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

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