ДинамичСскиС массивы Π² c: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΡƒΡ€ΠΎΠΊΠΈ программирования Π½Π° Π‘++

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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ динамичСского массива Π½Π° языкС «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 / 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.

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

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

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

int x[10]; //static array with global scope
static int y[10]; //static array with file scope
foo() {
    static int z[10]; //static array with local scope

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

foo() {
    int w[10]; //automatic array

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

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

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

foo() {
   int *d = new int[n]; //dynamically allocated array with size n     

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

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

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

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

БтатичСский массив ΠΈ динамичСский массив Π² C++

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

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, нСзависимо ΠΎΡ‚ C/с++. Π’ C/C++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ„Π°ΠΉΠ», ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст Ρ‚Π°ΠΊΠΎΠΉ:

static int y[10]; //static array with file scope
foo() {
    static int z[10]; //static array with local scope

АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ , ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стСковой памяти распрСдСлСниС. АвтоматичСский массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Π² C/C++, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это:

    int w[10]; //automatic array

Π’ΠΎ, Ρ‡Ρ‚ΠΎ эти массивы , Ρ…, Ρƒ, Z, ΠΈ W ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… являСтся фиксированной ΠΈ опрСдСляСтся Π²ΠΎ врСмя компиляции.

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

Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ стСковой памяти.

Π§Ρ‚ΠΎ’Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄ собой динамичСский массив Π½Π΅ измСняСмого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ ΠΎΠ΄Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти с фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ опрСдСляСтся Π²ΠΎ врСмя выполнСния. Π’ C++ это дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€new.

   int *d = new int[n]; //dynamically allocated array with size n     

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

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

Для истинного динамичСского массива Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° Π‘Π’Π”::Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² C++ (ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ массива Π² C]8).

Π§Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ОП’Ρ‹ вопрос? Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это’Ρ‹ понятно, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π», Π½Π΅ Π±Ρ‹Π» статичСский ΠΈΠ»ΠΈ автоматичСский массив, Π½ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

new ΠΈΠ»ΠΈ нСфиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘Π’Π”::Π²Π΅ΠΊΡ‚ΠΎΡ€.

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

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

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

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

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

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

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

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

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

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

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

  1. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° участок памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся элСмСнты.
  2. Π Π°Π·ΠΌΠ΅Ρ€. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… элСмСнтов
  3. Π•ΠΌΠΊΠΎΡΡ‚ΡŒ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ.

НиТС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ 7, состоящий ΠΈΠ· 5 элСмСнтов: 3, 1, 4, 1, 5. | 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 Π² случаС ошибки. Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, массив остаСтся Π² исходном состоянии.

ДинамичСскиС массивы Π² 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 — послС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΊ этому ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ πŸ™‚

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

C++, ДинамичСскиС массивы, НулСвая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° πŸ™‚ β€” Pyatnitsev Home

Π₯очСтся Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π±Ρ‹Π»ΠΎΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ старыС Π·Π°Π΄Π°Ρ‡ΠΊΠΈ ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡ… снова, ΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° называСтся Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, Ссли всС Π΅Π΅ элСмСнты Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ число N, создаСт Π½ΡƒΠ»Π΅Π²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° N Π½Π° N ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π½Π° экран.

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ динамичСский массив ΠΈ си++ ΡΡ‚ΠΈΠ»ΡŒ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ достаточно. ВСория ΠΏΠΎ динамичСским массивам Π² си++

#include &lt;iostream&gt; using namespace std; int main() { int n = 0; cin &gt;&gt; n; // Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ n int **a = new int* [n]; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ for (int i = 0; i &lt; n; i++) { a[i] = new int [n]; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ элСмСнты } // А дальшС Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивом. for (int i = 0; i &lt; n; i++) { for (int j = 0; j &lt; n; j++) { a[i][j] = 0; // ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ cout &lt;&lt; a[i][j] &lt;&lt; » «; // ВывСсти элСмСнты Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠΊΡƒ } cout &lt;&lt; endl; // Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ строку ΠΈ Π½Π° консоли } // Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ массива for (int i = 0; i &lt; n; i++) { delete[]a[i]; // УдаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт } delete [] a; // А ΠΏΠΎΡ‚ΠΎΠΌ массив return 0; }

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

#include &lt;iostream&gt;

Β 

using namespace std;

Β 

int main()

{

int n = 0;

cin &gt;&gt; n; // Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ n

int **a = new int* [n]; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

for (int i = 0; i &lt; n; i++)

{

a[i] = new int [n]; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ элСмСнты

}

// А дальшС Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивом.

for (int i = 0; i &lt; n; i++)

{

for (int j = 0; j &lt; n; j++)

{

a[i][j] = 0; // ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ

cout &lt;&lt; a[i][j] &lt;&lt; » «; // ВывСсти элСмСнты Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠΊΡƒ

}

cout &lt;&lt; endl; // Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ строку ΠΈ Π½Π° консоли

}

// УдалСниС массива

for (int i = 0; i &lt; n; i++)

{

delete[]a[i]; // УдаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт

}

delete [] a; // А ΠΏΠΎΡ‚ΠΎΠΌ массив

return 0;

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

стСков с использованиСм динамичСских массивов Π² c

Π‘ΠΎΠ²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²Π° стСка, ΠΎΠ΄ΠΈΠ½ для хранСния всСх элСмСнтов, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ для хранСния максимумов. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилирована ΠΈ запускаСтся (Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ…) Π² систСмС Windows. ЗдравствуйтС, Π΄Ρ€ΡƒΠ·ΡŒΡ, я свободный ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŒ Лэнс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³ студСнту Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅. # 2) ИспользованиС связного списка. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ своп XOR для Π·Π°ΠΌΠ΅Π½Ρ‹ элСмСнтов. связанный список. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ push, pop, stack empty, stack full ΠΈ display. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π°.РаспрСдСлСниС динамичСской памяти Π² стСкС C ++. Π–Π°Π΄Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ, массивы, рСкурсия, связанныС списки, Π΄Π΅Ρ€Π΅Π²ΡŒΡ, HashMap, стСки, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΊΡƒΡ‡ΠΈ Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ структура для Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° двусторонних ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ DEQlib. Π­Ρ‚ΠΎ мСня Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя бСспокоило, Π½ΠΎ я понял это. Π“Ρ€ΡƒΠΏΠΏΠ° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‚Π° True / False. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, распрСдСлСниС динамичСской памяти относится ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ для распрСдСлСния динамичСской памяти Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.НСдостаток стСка, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ с использованиСм массива, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ фиксирован ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π²ΠΎ врСмя компиляции. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΈ коэффициСнт Π΅Π³ΠΎ роста ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° — push () ΠΈ pop (). Π­Ρ‚ΠΎ называСтся распрСдСлСниСм динамичСской памяти. Push — это добавляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ стСка. — стСк: локальноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ пСрСмСнных… Π’Ρ‹Ρ…ΠΎΠ΄. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° хранСния динамичСских массивов DASlib. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со стСком Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с использованиСм массивов. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСский стСк с использованиСм массива.Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива стСк формируСтся с использованиСм массива. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со стСком Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с использованиСм массивов. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ простой стСк Π½Π° основС массива Π² нашСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ «РСализация стСка с использованиСм массива Π² JavaΒ». ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΈΡ… адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΡ†Π΅Π½ΠΊΠΈ постфиксного выраТСния гласит: читая Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ элСмСнт Π² стСк, Ссли это ΠΎΠΏΠ΅Ρ€Π°Π½Π΄. Вопрос Π½Π° собСсСдовании.Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива структур с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc () Π½Π° языкС C. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив структур Π½Π° языкС C. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc () для массива структур. Π‘Ρ‚Π΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΡƒΡ‡Π° — это Π±ΠΎΠ»Π΅Π΅ «глобальноС» пространство для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ДинамичСский массив (Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² C ++, ArrayList Π² Java) автоматичСски увСличиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вставку, ΠΈ для Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта большС Π½Π΅ остаСтся мСста. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ области увСличиваСтся Π²Π΄Π²ΠΎΠ΅.Когда функция ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, эта пСрСмСнная помСщаСтся Π² стСк. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ стСка LIFO. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стСк ΠΈ всС Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массив. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для создания стСка, — это созданиС указатСля «свСрху». Π‘Ρ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с использованиСм массивов Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. PostScript — это стСковый язык, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free () освободим Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π― Π½Π°Ρ‡Π°Π» ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ массивы Π½Π° C ++ ΠΈ наткнулся Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ Π² ΠΊΠ½ΠΈΠ³Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ ΠΎ 2D-массивах Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅.ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ: Π‘Ρ‚Π΅ΠΊΠΈ Π² C; Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ стСка с использованиСм связанного списка Π½Π° C; ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ посвящСна ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ стСка. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ стСка элСмСнтов ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов производится с ΠΎΠ΄Π½ΠΎΠΉ стороны, это называСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ стСка. Π― Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽ ΠΈΡ… Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ послСднСго Π³ΠΎΠ΄Π°. Он поставляСтся со стандартными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных основных языках программирования. Π’ этом руководствС Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивами. РСализация стСка с использованиСм динамичСского массива Π² C ++ ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ API.2) ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° C для Π²Π²ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ тСкста с использованиСм динамичСского распрСдСлСния памяти. char * pvalue = NULL; // Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инициализируСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ pvalue = new char [20]; // Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² структурС Π΄Π°Π½Π½Ρ‹Ρ… стСка, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ наши ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ стСкС Π½Π° Stack… Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС, Π² Ρ‚ΠΎΠΌ числС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ cookie, см. Π—Π΄Π΅ΡΡŒ: ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° использования Ρ„Π°ΠΉΠ»ΠΎΠ² cookie.% D Π±Π»ΠΎΠ³Π³Π΅Ρ€Π°ΠΌ нравится это: Π‘Ρ‚Π΅ΠΊ — это линСйная структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ элСмСнтов Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Π΅Ρ†, извСстный ΠΊΠ°ΠΊ TOP. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒΒ».β€’ Π’ стСкС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт являСтся послСдним вставлСнным элСмСнтом. STACK ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π² своих опСрациях ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ «послСдний ΠΏΡ€ΠΈΡˆΠ΅Π» — ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ обслуТСн». ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² C. Массив — это пСрСмСнная, которая ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ C ++, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° этот вопрос. Π”Π˜ΠΠΠœΠ˜Π§Π•Π‘ΠšΠ˜Π™ Массив C ++ Π’ C ++ Π½Π΅Ρ‚ встроСнного динамичСского массива, хотя Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ шаблонов Π΅ΡΡ‚ΡŒ шаблон ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ vector, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС. ΠœΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ … Ѐункция PUSH Π² ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вставки элСмСнта Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ стСка, функция POP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для удалСния элСмСнта ΠΈΠ· Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части стСка.Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ элСмСнт. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° РСшСниС 1. 8. Для хранСния всСго списка ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 2-ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив строк Π½Π° языкС Π‘ΠΈ. Если стСк Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, это называСтся условиСм пСрСполнСния. Π‘Ρ‚Π΅ΠΊ слСдуСт структурС Π΄Π°Π½Π½Ρ‹Ρ… Β«ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π» послСдний ΡƒΡˆΠ΅Π»Β» (FILO). ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ IncludeHelp 25 августа 2016 Π³. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch для доступа ΠΊ этим функциям. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° элСмСнты ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· стСка, ΠΎΠ½ сТимаСтся с Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ½Ρ†Π°. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ динамичСский стСк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со стСком, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ push (), pop (), peek (), isEmpty () ΠΈ getMin () с постоянной ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ пространства.. Π‘Ρ‚Π΅ΠΊ Π½Π° основС растущСго массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡƒΡ‚Π΅ΠΌ выдСлСния Π½ΠΎΠ²ΠΎΠΉ памяти большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ стСка, ΠΈ копирования элСмСнтов ΠΈΠ· старого стСка Π² Π½ΠΎΠ²Ρ‹ΠΉ стСк. РСализация Π½Π° языкС C ОписаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со стСком с использованиСм динамичСского распрСдСлСния памяти. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° потрСбляСт большС мСста Π² памяти, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. peek () — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… стСка, Π½Π΅ удаляя Π΅Π³ΠΎ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ массивы Π² стилС C ΡΠ²Π»ΡΡŽΡ‚ΡΡ источником ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок, Π½ΠΎ всС Π΅Ρ‰Π΅ распространСны, особСнно Π² старых Π±Π°Π·Π°Ρ… ΠΊΠΎΠ΄Π°.Π’ абстрактном Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ ADT) Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈΠ»ΠΈ описаниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π£Π΄ΠΎΠ±Π½Ρ‹ΠΉ для ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. НазначСниС динамичСской структуры Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° «стСк». Π•Π³ΠΎ синтаксис: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ = Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Массив — это статичСская структура Π΄Π°Π½Π½Ρ‹Ρ…, поэтому Ρ€Π°Π·ΠΌΠ΅Ρ€ сбора Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ фиксированным. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ n элСмСнтов Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя, ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ n (Π½Π΅ n2). Π‘Ρ‚Π΅ΠΊ — это абстрактный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСмонстрируСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Last in first out (LIFO). ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Array.Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив Π² Ρ„Π°ΠΉΠ»Π΅ .h. A ПослС этого модифицируСтся стСк. Π­Ρ‚ΠΎ называСтся динамичСским распрСдСлСниСм памяти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ области динамичСской памяти ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выдСляСтся Π² ΠΊΡƒΡ‡Π΅, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈ нСобходимости динамичСски Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. C ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡƒΠ»Π° памяти. Π€Π°ΠΉΠ» ΠΊΠΎΠ΄Π° стСка: stack.c (рСализация стСка Π½Π° C) ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… стСка, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ массив Π² Ρ„Π°ΠΉΠ»Π΅ main.c (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° стСка Π½Π° C). НиТС приводится Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ стСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ динамичСский массив, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ссли массив Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, создайтС Π½ΠΎΠ²Ρ‹ΠΉ массив Π²Π΄Π²ΠΎΠ΅ большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ скопируйтС элСмСнты.Π’ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… рСгистра: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ°Π΄Ρ€Π°. Он содСрТит Ρ…ΠΎΡ€ΠΎΡˆΠΎ написанныС, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹Π΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Π½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹ ΠΈ вопросы ΠΏΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ / ΡΠΎΡ€Π΅Π²Π½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ / собСсСдованию с ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (FIFO) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ динамичСского массива. ДинамичСскиС массивы Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ new ΠΈ delete (Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΡƒΡ‡Ρƒ, Π° Π½Π΅ стСк). 2. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния памяти malloc / realloc ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° «ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°».Как ΠΈ массивы, динамичСскиС массивы Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ элСмСнты Π² памяти рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, обСспСчивая эффСктивноС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅β€¦ Π‘Π°ΠΌΡ‹ΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ адрСс соотвСтствуСт ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту, Π° самый высокий адрСс — послСднСму элСмСнту. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ 2D-массив для доступа ΠΊ элСмСнтам с Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ arr [x] [y]. Когда Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с использованиСм Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, компилятор C автоматичСски выдСляСт пространство памяти для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΡƒΠ»Π΅ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ стСком. НапримСр, пСрСмСнная Ρ‚ΠΈΠΏΠ° float ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π° (Π² зависимости ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹), ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° заявил.Π’ этом постС ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стСка с использованиСм массива Π½Π° языкС C. Π’ΠΎΡ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ стСком с использованиСм массивов. Π’ этом постС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ массивы ΠΈ список ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния стСка. Π’ классС Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ‡Π»Π΅Π½ΠΎΠ²: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° экзСмпляр Type, Type * array, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС массива, счСтчик int count, Static ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: * БтатичСский Ρ‡Π»Π΅Π½ класса — это Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуска исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈ остаСтся доступным Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго выполнСния.ДинамичСскиС массивы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ поэтому Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅.

ΠšΠΎΡΡ‚Π½Ρ‹ΠΉ ΠΈ суставной ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΈΠΌΠΏΠ°ΠΊΡ‚-Ρ„Π°ΠΊΡ‚ΠΎΡ€, Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ румынского Ρ„ΡƒΡ‚Π±ΠΎΠ»Π°, Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ появлСниС водорослСй Π² Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌΠ΅, Бписок частных бассСйнов Π² Π‘ΡƒΠ»Π°ΠΊΠ°Π½Π΅, Волстовка с капюшоном Flannel Combo Womens, БогСмскоС ΠΏΠΈΠ²ΠΎ БаскачСван, ЦвСтовая ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° Ρ‚Π΅ΠΌΠ½ΠΎΠ³ΠΎ шоколада, ΠŸΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ послС прСкращСния ΠΏΡ€ΠΈΠ΅ΠΌΠ° прогСстСрона, Доля Ρ€Ρ‹Π½ΠΊΠ° сСлСна, ДТастин Π’Π΅Ρ€Π»Π°Π½Π΄Π΅Ρ€ Π’Ρ€Π°Π²ΠΌΠ° 2021, ΠšΠ½ΠΈΠΆΠ½Ρ‹ΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ АкадСмия Бвятого ΠšΡ€Π΅ΡΡ‚Π°, Π‘Π΅Π»ΠΎΠ΅ дТинсовоС ΠΏΠ»Π°Ρ‚ΡŒΠ΅ Fashion Nova,

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскиС массивы Π² 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) для ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов.

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

Π―Π·Ρ‹ΠΊ C Π”Π²Π° способа создания динамичСских массивов

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСский массив.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этот Ρ‚Π°Π»Π°Π½Ρ‚ Π½Π΅Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ, знания Π½Π΅Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅, Π΅ΡΡ‚ΡŒ нСподходящиС мСста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, спасибо!

  • ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ malloc (), Π½Π°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для доступа ΠΊ элСмСнтам массива.И этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ статичСским ΠΈΠ»ΠΈ автоматичСским
  • ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (VLA), Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ c99. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для прСдставлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² массива.
    Π­Ρ‚ΠΈ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ схоТи. НапримСр, ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π²ΠΎ врСмя выполнСния:
  int a ()
{
int n;
int * pi;
scanf ("% d", & n);
pi = (int *) malloc (n * sizeof (int));
int ar [n];
ΠΏΠΈ [2] = Π°Ρ€ [2] = -5;
...
}
  

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ массивом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (VLA) ΠΈ malloc ():

  • ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ автоматичСскими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ хранСния, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ a (), ΠΈ пространство памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ массивом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, автоматичСски освобоТдаСтся.
  • Массив, созданный malloc (), Π½Π΅ ограничиваСтся доступом ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр: вызываСмая функция создаСт массив ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для доступа Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ free () Π² ΠΊΠΎΠ½Ρ†Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.
  • Π’ случаС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc () ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Если компилятор Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (Π½Π΅ поддСрТиваСтся Π² VC ++ 6.0) ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.
    выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
  int n = 5;
int m = 6;
int ar [n] [m];
int (* p1) [6];
int (* p2) [ΠΌ];
p1 = (int (*) [6]) malloc (n * 6 * sizeof (int));
p2 = (int (*) [m]) malloc (n * m * sizeof (int));
Π°Ρ€ [1] [2] = p1 [1] [2] = 1;
  

ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства использования динамичСских массивов? ИспользованиС динамичСских массивов ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Если Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 100 элСмСнтов, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся 100 000 элСмСнтов.Если Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ порядку, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ элСмСнт 100000 для этой ситуации. По сути, это пустая Ρ‚Ρ€Π°Ρ‚Π° памяти. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ 10002, эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя. Π’ этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ настройки динамичСского массива для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуаций.

О Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc (): malloc ()

массивов C ++

массивов C ++

ΠœΠ°ΡΡΠΈΠ²Ρ‹ C ++

ΠœΠ°ΡΡΠΈΠ²Ρ‹ C ++ нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ массивов Java. Π•ΡΡ‚ΡŒ массивы ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСски, Π° массивы ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСски.ВсС массивы ссылки. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива — это Π΅Π³ΠΎ адрСс. Как ΠΈ Π² Java, индСксы массивов Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с нуля. Π’ C ++ массивы Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ Ρƒ Π½ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов.

БтатичСски ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ массивы
БтатичСски ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ массивы Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ врСмя компиляции ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ фиксированный, Ρ‚.Π΅. Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Java.

НапримСр, объявлСно Π΄Π²Π° массива int, ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅Ρ‚.

   int a [10];
   int b [5] {8, 20, 25, 9, 14};
 
Массив & nbsp a & nbsp состоит ΠΈΠ· 10 элСмСнтов с ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ индСксами. ΠΎΡ‚ 0 Π΄ΠΎ 9, Π·Π°Π»ΠΈΠ» мусор.Массив & nbsp b & nbsp состоит ΠΈΠ· 5 элСмСнтов с ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ индСксами. ΠΎΡ‚ 0 Π΄ΠΎ 4, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΡΡ‚ΡŒΡŽ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ значСниями. Доступ ΠΊ Π½ΠΈΠΌ осущСствляСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, a [5] ΠΈΠ»ΠΈ b [2]. ΠŸΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π²ΠΎ врСмя компиляции. ΠžΠ±Ρ€Π°Π· памяти этих массивов ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ 10 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ мусора int ΠΈ 5 допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ int:
     __ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
   Π° | - | -> | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
     - --- --- --- --- --- --- --- --- --- ---
             0 1 2 3 4 5 6 7 8 9
     __ ___ ___ ___ ___ ___
   Π± | - | -> | 8 | 20 | 25 | 9 | 14 |
     - --- --- --- --- --- ---
 
БтатичСскиС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с нСсколькими измСрСниями.НапримСр, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив a ΠΈΠΌΠ΅Π΅Ρ‚ 3 строки ΠΈ 4 столбца:
   int a [3] [4];
 
ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π² памяти, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, — это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. На самом Π΄Π΅Π»Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Π°, поэтому эта двумСрная массив Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ хранится ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. это хранится Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ порядкС строк, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ строкам. Π’ памяти, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ряд слСдуСт Π·Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ рядом, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ряд слСдуСт Π·Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ряд.
     __ ___ ___ ___ ___
   Π° | - | -> 0 |... | ... | ... | ... |
     - --- --- --- ---
            1 | ... | ... | ... | ... |
              --- --- --- ---
            2 | ... | ... | ... | ... |
              --- --- --- ---
               0 1 2 3
 
ДинамичСски ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ массивы
Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ вашСго массива Π²ΠΎ врСмя выполнСния, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ динамичСскиС массивы. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΎΠ± указатСлях см. Π’ Ρ€Π°Π·Π΄Π΅Π» ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ массиву Π² Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ статичСский массив.НапримСр,

   int * arrayPtr = Π½ΠΎΠ²Ρ‹ΠΉ int [10];
   для (int i = 0; i
 
ΠšΠ°Ρ€Ρ‚ΠΈΠ½Π° памяти ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° статичСскому массиву, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈ нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€. НС Π·Π°Π±Ρ‹Π²Π°ΠΉ, Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ памяти (ΠΈΠ»ΠΈ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти).
   ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ [] arrayPtr; // [] Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° массивы
   arrayPtr = Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [50];
   . . .
 
Когда Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с массивом, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ:
   ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ [] arrayPtr;
 
ДинамичСскиС ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Java.Π£ вас Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° см.

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

динамичСских массивов Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ с шаблонами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования Π½Π° C ++


ВСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный способ агрСгирования Π΄Π°Π½Π½Ρ‹Ρ… — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив. Π₯отя язык программирования C ++ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСдоставляСт встроСнныС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° массивов, эта ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ лишСна нСдостатков. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² C ++ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ пСрвоклассными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. НС сущСствуСт Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с массивом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° фактичСского значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ массив Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. (ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ всС эти Π²Π΅Ρ‰ΠΈ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° массив). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, индСксы массива Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ нуля Π΄ΠΎ N -1, Π³Π΄Π΅ N — Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΈ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Π½ΠΈΡ† Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ индСкса массива. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива статичСн ΠΈ фиксируСтся Π²ΠΎ врСмя компиляции, Ссли динамичСскоС распрСдСлСниС памяти Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ явно программистом.

НСкоторыС ΠΈΠ· этих характСристик массивов отчасти связаны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² C ++ учитывая ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ T * ptr Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΏ T, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, просто ΠΏΠΎ самому ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ Π½Π° СдинствСнный экзСмпляр ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° T ΠΈΠ»ΠΈ массиву ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° T. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° массив, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ фактичСскоС количСство элСмСнтов Π² этом массивС.

Π­Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ устранСниС этих нСдостатков. Ρ‡Ρ‚ΠΎ ΠΌΡ‹ прСдставляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс.На рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array. прСдставлСн Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π΅ конструкции. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ — это структура, состоящая ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ — Π΄Π°Π½Π½Ρ‹Ρ…, Π±Π°Π·Ρ‹ ΠΈ Π΄Π»ΠΈΠ½Ρ‹. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π° — это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ массива. Π‘Π°Π·Π° ΠΈ Π΄Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ расчСтС индСкса массива. Вторая структура состоит ΠΈΠ· Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Ρ… ячССк памяти. ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат элСмСнты массива. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, прСдставлСнной Π½ΠΈΠΆΠ΅, эта вторая структура размСщаСтся динамичСски.


Рисунок: ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² массива Π² памяти

ОбъявлСниС C ++ шаблона класса Array ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Program.Класс Array ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹, Π΄Π°Π½Π½Ρ‹Π΅, Π±Π°Π·Π° ΠΈ Π΄Π»ΠΈΠ½Π°, конструкторы, дСструктор ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² свСдСно ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π² этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ — Π² « Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ » Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ².

На основС ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ объСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° для прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Array. ΠŸΡƒΡΡ‚ΡŒ S ( n ) Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΌ объСмом памяти (памяти), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ n элСмСнтов массива Ρ‚ΠΈΠΏΠ° T. S ( n ) опрСдСляСтся

Π³Π΄Π΅ функция — это количСство Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдставлСния памяти экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° X.

Π’ C ++ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ основных (встроСнных) Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ фиксированными константами. Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ всСх ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ,

К соТалСнию, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Array являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ классом, Ρƒ нас Π½Π΅Ρ‚ Π°ΠΏΡ€ΠΈΠΎΡ€ΠΈ знания объСма памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° T.Однако, Ссли ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ объСм памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° T — фиксированная константа, Ρ‚ΠΎΠ³Π΄Π° S ( n ) = O ( n ).


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: Массив ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса



АвторскиС ΠΏΡ€Π°Π²Π° Β© 1997 Π‘Ρ€ΡƒΠ½ΠΎ Π . ΠŸΡ€Π΅ΠΉΡΡ, P.Eng. ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.

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

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

ВрСмя

Если динамичСский массив пСрСмСщаСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ вСсь массив являСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ (ΠΈ поэтому поиск выполняСтся Π·Π° постоянноС врСмя), для увСличСния ΠΈ пСрСмСщСния массива всС Ρ€Π°Π²Π½ΠΎ потрСбуСтся врСмя. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС асимптотичСски вставка Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 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)

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

Π£Ρ€ΠΎΠΊ 5 — ДинамичСскиС массивы (Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹) Π½Π° языкС C

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

ДинамичСскиС массивы (Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹)

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

… ΠšΠΎΠ½Π΅Ρ† ΠΏΡ€Π΅Π²ΡŒΡŽ …
ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ дальшС

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ знания Π½Π° сотни тысяч Π·Π° нСсколько ΠΊΡ€ΠΎΠ½

Π’Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ сюда, ΠΈ это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ! ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π²Π°ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅.
Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ курс? ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΡ€Π΅ΠΌΠΈΡƒΠΌ-Ρ€Π°Π·Π΄Π΅Π» .

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ находится ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ: Premium, покупая эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с условиями использования.

Автор — программист, ΡƒΠ²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΉΡΡ Π²Π΅Π±-тСхнологиями, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ Π°Π²Ρ‚ΠΎΡ€ статСй Π½Π° ICT.

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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

© 2019 Π¨Ρ‚ΠΈΡ€Π»ΠΈΡ† Π‘Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… салонов Π² ΠŸΠ΅Ρ€ΠΌΠΈ

Цифровая ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ†Π²Π΅Ρ‚Π½ΠΎΠ΅ ΠΈ Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², сканированиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ризография Π² ΠŸΠ΅Ρ€ΠΌΠΈ.