Π Π°Π·Π½ΠΎΠ΅

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

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

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

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ соврСмСнный ЯП Π²Ρ€ΠΎΠ΄Π΅ JS, Ρ‚ΠΎ массивы Π² Π‘ ΠΌΠΎΠ³ΡƒΡ‚ ввСсти вас Π² ступор.

ВступлСниС

Массив в JavaScript:

let numbers = [];
numbers.push(1);
numbers.push(2);
numbers.push(3);
console.log(numbers); // [1, 2, 3]

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±Ρ‹ ΠΌΡ‹ создали массив Π² JS. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строк, сколько Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Массив в C:

int numbers[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
printf("%d\n", numbers[0]); // 1
printf("%d\n", numbers[1]); // 2
printf("%d\n", numbers[2]); // 3

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ numbers[3] Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ массив сохранит Π² памяти 3 числа. Π”Π°Π»Π΅Π΅ сохраним 1,2 ΠΈ 3 ΠΏΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ индСксами ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° дисплСй.
Пока всС прСкрасно, Π½ΠΎ Π½ΠΎ нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ элСмСнты:

int numbers[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
printf("%d\n", numbers[0]); // 1
printf("%d\n", numbers[1]); // 2
printf("%d\n", numbers[2]); // 3
printf("%d\n", numbers[3]); // should be 4

И Ρ‡Ρ‚ΠΎ Π½Π° это скаТСт gcc?:

array.c:8:5: warning: array index 3 is past the end of the array (which contains 3 elements) [-Warray-bounds]

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ† памяти. ΠœΠ΅ΡΡ‚Π° Π² нашСм массивС нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ элСмСнты.
Π§Ρ‚ΠΎ ΠΆΠ΅, Ссли ΠΌΡ‹ нуТдаСмся Π² динамичСском массивС, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ n элСмСнтов?

На Π‘ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ массива с динамичСски растущим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.
Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈ памяти.

malloc, realloc ΠΈΒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ (pointers)

Π’ Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свой Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°:

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
char 1 byte -128 Π΄ΠΎ 127 ΠΈΠ»ΠΈ 0 Π΄ΠΎ 255
unsigned char 1 byte 0 Π΄ΠΎ 255
signed char 1 byte -128 Π΄ΠΎ 127
int 2 ΠΈΠ»ΠΈ 4 bytes -32,768 Π΄ΠΎ 32,767 ΠΈΠ»ΠΈ -2,147,483,648 Π΄ΠΎ 2,147,483,647
unsigned int 2 ΠΈΠ»ΠΈ 4 bytes 0 Π΄ΠΎ 65,535 ΠΈΠ»ΠΈ 0 Π΄ΠΎ 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 Π΄ΠΎ 65,535
long 8 bytes -9223372036854775808 Π΄ΠΎ 9223372036854775807
unsigned long8 bytes0 Π΄ΠΎ 18446744073709551615

Π’ ΠΌΠΎΠ΅ΠΉ систСмС это 4 Π±Π°ΠΉΡ‚Π° для Ρ†Π΅Π»Ρ‹Ρ… чисСл (integers). ΠŸΡ€ΠΎΡΡ‚ΠΎ имСя эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС массивы любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.
Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ sizeof(int), sizeof(double) ΠΈΠ»ΠΈ для Ρ‚Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ.
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈ realloc ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС Π±Π»ΠΎΠΊΠΈ памяти.

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ с возмоТности Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 3 Ρ†Π΅Π»Ρ‹Ρ… числа (integers),это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² Π±Π»ΠΎΠΊ памяти ΠΈΠ· 12 Π±Π°ΠΉΡ‚:

ЕдинствСнным Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ malloc являСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° памяти Π² Π±Π°ΠΉΡ‚Π°Ρ….
Malloc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ(pointer) Π½Π° вновь созданный Π±Π»ΠΎΠΊ памяти.

#define INITIAL_CAPACITY 3
int main(){
     int* data = malloc(INITIAL_CAPACITY * sizeof(int));
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ памяти, достаточно большой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наши 3 Ρ†Π΅Π»Ρ‹Ρ… числа — Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ динамичСским. БСйчас ΠΌΡ‹ всС Π΅Ρ‰Ρ‘ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ большС 3-Ρ… элСмСнтов Π² наш Π±Π»ΠΎΠΊ памяти.

Если ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ объСмом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€. Если Π±Π»ΠΎΠΊ памяти Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΡƒΠ΄Π²ΠΎΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого Π±Π»ΠΎΠΊΠ° памяти, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·Π²ΠΎΠ²Π° realloc , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ памяти.

#define INITIAL_CAPACITY 3
void push(int *arr, int index, int value, int *size, int *capacity){
     int* ptr;
     if(*size > *capacity){
          ptr = realloc(arr, sizeof(arr) * 2);
          if(ptr == NULL)
               exit(0);
          else
               *capacity = sizeof(arr) * 2;
     }
Β 
     arr[index] = value;
     *size = *size + 1;
}
int main(){
     int size = 0;
     int capacity = INITIAL_CAPACITY;
     int* arr = malloc(INITIAL_CAPACITY * sizeof(int));
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² Π±Π»ΠΎΠΊ памяти динамичСски.
Π‘ΠΎΠ±Ρ€Π°Π² всС это вмСстС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

#include <stdio.h>
#include <stdlib.h>
Β 
#define INITIAL_CAPACITY 2
Β 
void push(int *arr, int index, int value, int *size, int *capacity){
     int* ptr;
     if(*size > *capacity){
          ptr = realloc(arr, sizeof(arr) * 2);
          if(ptr == NULL)
               exit(0);
          else
               *capacity = sizeof(arr) * 2;
     }
Β 
     arr[index] = value;
     *size = *size + 1;
}
Β 
int main(){
     int size = 0;
     int capacity = INITIAL_CAPACITY;
     int* arr = malloc(INITIAL_CAPACITY * sizeof(int));
     if(arr == NULL) {
          printf("Memory not allocated.\n");
          exit(0);
     }
     else {
          push(arr, 0, 1, &size, &capacity);
          push(arr, 1, 2, &size, &capacity);
          push(arr, 2, 3, &size, &capacity);
Β 
          printf("Current capacity: %d\n", capacity); // Current capacity: 2
Β 
          push(arr, 3, 4, &size, &capacity);
          push(arr, 4, 5, &size, &capacity);
          push(arr, 5, 6, &size, &capacity);
Β 
          printf("Current capacity: %d\n", capacity); // Current capacity: 16
     }
}

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 1

ДинамичСскиС массивы Π² Π‘ΠΈ β€” это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования памяти элСктронной Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

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

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

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

На языкС программирования Π‘ΠΈ динамичСскиС массивы Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского выдСлСния памяти: malloc() ΠΈΠ»ΠΈ са11ос(). Команда malloc() выполняСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ указатСля Π½Π° выдСляСмоС Π² памяти мСсто. Π­Ρ‚Π° функция являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ stdlib.h ΠΈ записываСтся Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:

void *Ρ‚Π°11ос (число Π±Π°ΠΉΡ‚)

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

(int *)

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

(int ) malloc(10 sizeof(int)))

Π’ языкС программирования Π‘++ прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ new ΠΈ delete, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских массивов Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Команда new выполняСт Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈΠ· свободных областСй, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° delete ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. ПослС окончания использования Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ new ΠΈ delete ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅. Если Π½Π΅ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² явном Π²ΠΈΠ΄Π΅, Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ это ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Но ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π‘++ delete.

Команда new выполняСт созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ памяти ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ указатСля ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π° эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. Π’ случаС нСвозмоТности выдСлСния памяти, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π΅Ρ‚ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ свободного ΠΎΠ±ΡŠΡ‘ΠΌΠ°, Ρ‚ΠΎ происходит Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΠ΄ любой Π²ΠΈΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…: int, float, double, char ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива:

float *ptrarray = new float [10]; // объявлСн ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив Π½Π° Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов.

// здСсь ptrarray – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти для вСщСствСнного массива Ρ‚ΠΈΠΏΠ° float.

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским массивом, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π²Ρ‹Π΄Π΅Π»ΡΠ»Π°ΡΡŒ для Π½Π΅Π³ΠΎ:

delete [] ptrarray; // очистка памяти, которая Π²Ρ‹Π΄Π΅Π»ΡΠ»Π°ΡΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив.

Π—Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ delete Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ освобоТдСния участка памяти, ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

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

It’s important to have clear definitions of what terms mean. Unfortunately there appears to be multiple definitions of what static and dynamic arrays mean.

Static variables are variables defined using static memory allocation. This is a general concept independent of C/C++. In C/C++ we can create static variables with global, file, or local scope like this:

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

Automatic variables are usually implemented using stack-based memory allocation. An automatic array can be created in C/C++ like this:

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

What these arrays , x, y, z, and w have in common is that the size for each of them is fixed and is defined at compile time.

One of the reasons that it’s important to understand the distinction between an automatic array and a static array is that static storage is usually implemented in the data section (or BSS section) of an object file and the compiler can use absolute addresses to access the arrays which is impossible with stack-based storage.

What’s usually meant by a dynamic array is not one that is resizeable but one implemented using dynamic memory allocation with a fixed size determined at run-time. In C++ this is done using the new operator.

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

But it’s possible to create an automatic array with a fixes size defined at runtime using alloca:

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

For a true dynamic array one should use something like std::vector in C++ (or a variable length array in C).

What was meant for the assignment in the OP’s question? I think it’s clear that what was wanted was not a static or automatic array but one that either used dynamic memory allocation using the new operator or a non-fixed sized array using e.g. 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 (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π½Π΅ всС компиляторы). НСкоторыС (довольно старыС) компиляторы Π‘++ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ массивов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹.

Бсылки

ΠœΠ°ΡΡΠΈΠ²Ρ‹ — Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² D

Π’ D Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° массивов: статичСскиС ΠΈ динамичСскиС.
ΠŸΡ€ΠΈ доступС ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ массива всСгда провСряСтся Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΈ Ссли это случится, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прилоТСния прСрвётся с сообщСниСм ΠΎΠ± ошибкС
RangeError. Π‘ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π°
компилятора -boundschecks=off, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ побольшС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

БтатичСскиС массивы

БтатичСскиС массивы хранятся Π½Π° стСкС, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Π²
статичСской памяти Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. Они ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ
Π΅Ρ‰Ρ‘ Π½Π° этапС компиляции. Π’ΠΈΠΏ статичСского массива содСрТит Π΅Π³ΠΎ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€:

int[8] arr;

Π’ΠΈΠΏ массива arrint[8]. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΡƒΠΊΠ°Π·Π°Π½ рядом с
Ρ‚ΠΈΠΏΠΎΠΌ, Π° Π½Π΅ послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠ°ΠΊ Π² C/C++.

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

ДинамичСскиС массивы хранятся Π² ΠΊΡƒΡ‡Π΅ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ Π²ΠΎ
врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ДинамичСский массив ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new ΠΈ указания Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

int size = 8; // run-time пСрСмСнная
int[] arr = new int[size];

Π’ΠΈΠΏ массива arrint[], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся срСзом (slice) ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн
Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис auto arr = new int[3][3].

Бвойства массивов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с массивами

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ ~, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст Π½ΠΎΠ²Ρ‹ΠΉ
динамичСский массив.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊΠΎ всСму массиву с использованиСм
синтаксиса c[] = a[] + b[], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, слоТит всС элСмСнты a ΠΈ
b, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ получится c[0] = a[0] + b[0], c[1] = a[1] + b[1] ΠΈ Ρ‚.Π΄. Π’Π°ΠΊΠΆΠ΅
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со всСм массивом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

a[] *= 2;  // ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ всС элСмСнты Π½Π° 2
a[] %= 26; // вычислСниС ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ 26 для всСго массива `a`

Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ компилятором Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ инструкции процСссоров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΡ‘ΠΌ.

Π£ ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² массивов Π΅ΡΡ‚ΡŒ свойство .length. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²
случаС статичСских массивов, Π° Π² случаС динамичСских массивов Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ динамичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€. Бвойство .dup создаёт копию массива.

ΠŸΡ€ΠΈ индСксации массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса arr[idx] ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис
$ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ массива. НапримСр, arr[$ - 1] ссылаСтся Π½Π° послСдний
элСмСнт ΠΈ являСтся ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи arr[arr.length - 1].

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅

Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ encrypt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠ½ΠΎΠ΅ посланиС.
ВСкст Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠΈΡ„Ρ€Π° ЦСзаря, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдвигаСт символы
Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ индСкс. Π¨ΠΈΡ„Ρ€ΡƒΠ΅ΠΌΡ‹ΠΉ тСкст содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° a-z, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Delphi XE7

Ни для ΠΊΠΎΠ³ΠΎ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ Delphi XE7 ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² языкС Object Pascal для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ разбСрёмся, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ появилось Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ пробСТимся ΠΏΠΎ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ возмоТностям ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами.

ОбъявлСниС ΠΈ инициализация массива

Начнём, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, с объявлСния массива. РаньшС Π² Delphi ΠΎΠ΄Π½ΠΎΠΉ строкой ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСский массив. Π‘ динамичСскими массивами всё Π±Ρ‹Π»ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС: Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ элСмСнт. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² Delphi XE7 динамичСский массив ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прямо ΠΏΡ€ΠΈ объявлСнии. Или ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π½ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΉ строкой. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ статичСских ΠΈ динамичСских массивов ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ:

program Project1;
Β 
{$APPTYPE CONSOLE}
Β 
{$R *.res}
Β 
uses
   System.SysUtils;
Β 
type
   TIntArray = array of integer;
Β 
var
   elem: integer;
   dynElem1: TIntArray;
   dynElem2: TArray<integer>;
   i, j: integer;
Β 
   //БтатичСский массив.
   statArray1: array[0..3] of integer = (0, 1, 2, 3);
   //БтатичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   statArray2: array[0..1] of array[0..2] of integer = ((0, 1, 2), (10, 11, 12));
   //ДинамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   dynArray1: array of integer = [0, 1, 2, 3];
   //ДинамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив (инициализация Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅).
   dynArray2: array of integer;
   //ДинамичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   dynArray3: array of TIntArray = [[0, 1, 2, 3], [10, 11, 12]];
   //ДинамичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   dynArray4: array of array of integer = [[0, 1, 2, 3], [10, 11, 12]];
   //ДинамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   dynArray5: TArray<integer> = [0, 1, 2, 3];
   //ДинамичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
   dynArray6: TArray<TArray<integer>> = [[0, 1, 2, 3], [10, 11, 12]];
Β 
begin
   try
      WriteLn('ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ статичСский массив statArray1:');
      for elem in statArray1 do
         WriteLn(elem);
      WriteLn('Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ статичСский массив statArray2:');
      for elem in statArray2 do
         Writeln(elem);
      WriteLn('ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray1:');
      for elem in dynArray1 do
         Writeln(elem);
      WriteLn('ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray2:');
      dynArray2 := [7, 8, 9]; //Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ динамичСского массива.
      for elem in dynArray2 do
         Writeln(elem);
      dynArray2 := []; //УдаляСм всС элСмСнты массива.
      WriteLn('Массив dynArray2 послС очистки:');
      for elem in dynArray2 do
         Writeln(elem);
      WriteLn('Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray3:');
      for dynElem1 in dynArray3 do
         for elem in dynElem1 do
            Writeln(elem);
      WriteLn('Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray4:');
      for i := 0 to Length(dynArray4) - 1 do
         for j := 0 to Length(dynArray4[i]) - 1 do
         Writeln(dynArray4[i][j]);
      WriteLn('ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray5:');
      for elem in dynArray5 do
         Writeln(elem);
      WriteLn('Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив dynArray6:');
      for dynElem2 in dynArray6 do
         for elem in dynElem2 do
            Writeln(elem);
      ReadLn;
   except
      on E: Exception do
         Writeln(E.ClassName, ': ', E.Message);
   end;
end.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈ объявлСнии ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструкций Β«array of TΒ», ΠΏΠΎΠ·ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ массива Π² Ρ†ΠΈΠΊΠ»Π΅ Β«for in doΒ». ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡΡ Π»ΠΈΠ±ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ массиву с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° Β«for to doΒ» (см. массив dynArray3) Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ массива (см. массив dynArray2). Π“ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблона Β«TArray<T>Β». ΠŸΡ€ΠΈ объявлСнии ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Ρ‚Π°ΠΊΠΈΠΌ способом ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ Β«for in doΒ» ΠΈ Β«for to doΒ».

Π§Ρ‚ΠΎ касаСтся ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… массивов, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ массивы ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ строку Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° динамичСский массив находится Π²Π½ΡƒΡ‚Ρ€ΠΈ статичСского, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

var
   //БтатичСский массив Π²Π½ΡƒΡ‚Ρ€ΠΈ динамичСского.
   //Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив Π² ΠΎΠ΄Π½Ρƒ строку Π½Π΅ удаётся.
   multiArray1: array of array[0..1] of integer;
   //ДинамичСский массив Π²Π½ΡƒΡ‚Ρ€ΠΈ статичСского.
   multiArray2: array[0..1] of array of integer = ([1, 2, 3], [10, 20, 30, 40]);

ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ массивов, вставка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ с массивами ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ со строками, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ массивы динамичСскиС ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Доступны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Concat, Insert ΠΈ Delete, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Concat:

var
   dynArray1: TArray<integer> = [0, 1, 2, 3];
   dynArray2: TArray<integer> = [4, 5, 6];
   dynArray3: array of integer = [0, 1, 2];
begin
   //Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… массивов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.
   dynArray1 := Concat(dynArray1, dynArray2); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 3, 4, 5, 6]
   //Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ массиву Π΄Π²ΡƒΡ… элСмСнтов.
   dynArray3 := Concat(dynArray3, [3, 4]); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 3, 4]. 
end;

Π’ΠΎΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° +:

var
   dynArray1: TArray<integer> = [0, 1, 2, 3];
   dynArray2: TArray<integer> = [4, 5, 6];
   dynArray3: array of integer = [0, 1, 2];
begin
   //Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… массивов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.
   dynArray1 := dynArray1 + dynArray2; //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 3, 4, 5, 6]
   //Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ массиву Π΄Π²ΡƒΡ… элСмСнтов.
   dynArray3 := dynArray3 + [3, 4]; //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 3, 4].
end;

А Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Insert ΠΈ Delete:

var
   dynArray1: TArray<integer> = [0, 1, 2, 3];
   dynArray2: TArray<integer> = [4, 5, 6];
   dynArray3: array of integer = [0, 1, 2];
   dynArray4: array of integer = [0, 1, 2, 4, 5];
begin
   //ВставляСм элСмСнты массива dynArray2 Π²Π½ΡƒΡ‚Ρ€ΡŒ массива dynArray1.
   Insert(dynArray2, dynArray1, 2); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 4, 5, 6, 2, 3]
   //ВставляСм Π² массив dynArray3 Π΄Π²Π° элСмСнта.
   Insert([100, 200], dynArray3, 1); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 100, 200, 1, 2]
   //ВставляСм ΠΎΠ΄ΠΈΠ½ элСмСнт Π² массив dynArray4.
   Insert(700, dynArray4, 3); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 700, 4, 5]
   //УдаляСм Π΄Π²Π° элСмСнта ΠΈΠ· массива.
   Delete(dynArray4, 1, 2); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 700, 4, 5];
end;

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Copy, Length, SetLength, Slice ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ DynArrayBounds ΠΈ DynArrayClear. Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами:

var
   bound: TBoundArray;
   dynArray1: TArray<integer> = [0, 1, 2, 3];
   dynArray2: TArray<integer>;
   dynArray3: TArray<TArray<integer>>;
begin
   //ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ 2-Ρ… элСмСнтов массива.
   dynArray2 := Copy(dynArray1, 1, 2); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [1, 2]
   //ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива начиная с элСмСнта с индСксом 1 ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.
   dynArray2 := Copy(dynArray1, 1); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [1, 2, 3]
   //ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.
   dynArray2 := Copy(dynArray1); //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [0, 1, 2, 3]
   //УстанавливаСм Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.
   SetLength(dynArray3, 10, 5);
   //ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ размСрности Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.
   //Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ [9, 4] - максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ размСрности массива.
   bound := DynArrayBounds(Pointer(dynArray3), TypeInfo(TArray<TArray<integer>>));
end;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π² Object Pascal

О Π½ΠΎΠ²Ρ‹Ρ… возмоТностях ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π² Delphi ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сдСлали ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивами Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ станСт Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ язык ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π»ΡƒΡ‡ΡˆΡƒΡŽ сторону. Π‘ΡƒΠ΄Π΅ΠΌ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹Ρ… Ρ„ΠΈΡˆΠ΅ΠΊ.

Π€ΠΎΡ€Ρ‚Ρ€Π°Π½ — динамичСскиС массивы — CoderLessons.com

ДинамичСский массив β€” это массив, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСизвСстСн Π²ΠΎ врСмя компиляции, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ извСстСн Π²ΠΎ врСмя выполнСния.

ДинамичСскиС массивы ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ.

НапримСр,

real, dimension (:,:), allocatable :: darray    

Π Π°Π½Π³ массива, Ρ‚. Π•. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ упомянуты, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ allocate .

allocate ( darray(s1,s2) )      

ПослС использования массива Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ созданная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ освобоТдСна с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ deallocate.

deallocate (darray)  

ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, обсуТдСнныС Π²Ρ‹ΡˆΠ΅.

program dynamic_array 
implicit none 

   !rank is 2, but size not known   
   real, dimension (:,:), allocatable :: darray    
   integer :: s1, s2     
   integer :: i, j     
   
   print*, "Enter the size of the array:"     
   read*, s1, s2      
   
   ! allocate memory      
   allocate ( darray(s1,s2) )      
   
   do i = 1, s1           
      do j = 1, s2                
         darray(i,j) = i*j               
         print*, "darray(",i,",",j,") = ", darray(i,j)           
      end do      
   end do      
   
   deallocate (darray)  
end program dynamic_array

Когда ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся, ΠΎΠ½ Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€”

Enter the size of the array: 3,4
darray( 1 , 1 ) = 1.00000000    
darray( 1 , 2 ) = 2.00000000    
darray( 1 , 3 ) = 3.00000000    
darray( 1 , 4 ) = 4.00000000    
darray( 2 , 1 ) = 2.00000000    
darray( 2 , 2 ) = 4.00000000    
darray( 2 , 3 ) = 6.00000000    
darray( 2 , 4 ) = 8.00000000    
darray( 3 , 1 ) = 3.00000000    
darray( 3 , 2 ) = 6.00000000    
darray( 3 , 3 ) = 9.00000000    
darray( 3 , 4 ) = 12.0000000   

ИспользованиС заявлСния Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива ΠΈΠ»ΠΈ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСкции массива.

Бинтаксис заявлСния Π΄Π°Π½Π½Ρ‹Ρ… β€”

data variable / list / ...

ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ β€”

Live Demo

program dataStatement
implicit none

   integer :: a(5), b(3,3), c(10),i, j
   data a /7,8,9,10,11/ 
   
   data b(1,:) /1,1,1/ 
   data b(2,:)/2,2,2/ 
   data b(3,:)/3,3,3/ 
   data (c(i),i = 1,10,2) /4,5,6,7,8/ 
   data (c(i),i = 2,10,2)/5*2/
   
   Print *, 'The A array:'
   do j = 1, 5                
      print*, a(j)           
   end do 
   
   Print *, 'The B array:'
   do i = lbound(b,1), ubound(b,1)
      write(*,*) (b(i,j), j = lbound(b,2), ubound(b,2))
   end do

   Print *, 'The C array:' 
   do j = 1, 10                
      print*, c(j)           
   end do      
   
end program dataStatement

Когда ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся, ΠΎΠ½ Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€”

 The A array:
           7
           8
           9
          10
          11
 The B array:
           1           1           1
           2           2           2
           3           3           3
 The C array:
           4
           2
           5
           2
           6
           2
           7
           2
           8
           2

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Where

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ where позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты массива Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ логичСского условия. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ элСмСнта, Ссли Π΄Π°Π½Π½ΠΎΠ΅ условиС истинно.

ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ β€”

Live Demo

program whereStatement
implicit none

   integer :: a(3,5), i , j
   
   do i = 1,3
      do j = 1, 5                
         a(i,j) = j-i          
      end do 
   end do
   
   Print *, 'The A array:'
   
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
   end do
   
   where( a<0 ) 
      a = 1 
   elsewhere
      a = 5
   end where
  
   Print *, 'The A array:'
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
   end do   
   
end program whereStatement

Когда ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся, ΠΎΠ½ Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€”

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

140002

18

19

20

21

#include

#include // std :: size_t

int main ()

{

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

std :: size_t length {};

std :: cin >> length;

int * array {Π½ΠΎΠ²Ρ‹ΠΉ 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 Π² качСствС Ρ‚ΠΈΠΏΠ° Π΄Π»ΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ объявлСниСм Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠ°ΠΊ int ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΡ€ΠΈ создании массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

int length {};

std :: cin >> length;

int * массив {Π½ΠΎΠ²Ρ‹ΠΉ 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

140002

18

19

20

21

22

23

24

25

26

27

28

29

30

000

000 34

35

36

37

38

39

40

41

42

43

44

45

46

49

0002 47

00030002 47

0003

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 ";

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

std :: cout << "Name #" << 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;

}

% PDF-1.4
%
592 0 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
>
эндобдТ
xref
592 57
0000000016 00000 Π½.
0000001491 00000 Π½.
0000001686 00000 Π½.
0000001758 00000 Π½.
0000002027 00000 Π½.
0000004491 00000 Π½.
0000004969 00000 Π½.
0000005008 00000 Π½.
0000005637 00000 Π½.
0000006493 00000 Π½.
0000007298 00000 Π½.
0000007704 00000 Π½.
0000007965 00000 Π½.
0000008079 00000 ΠΏ.
0000009459 00000 Π½.
0000009854 00000 Π½.
0000010140 00000 ΠΏ.
0000010503 00000 ΠΏ.
0000012198 00000 ΠΏ.
0000012498 00000 ΠΏ.
0000012938 00000 ΠΏ.
0000013221 00000 ΠΏ.
0000013262 00000 Π½.
0000014054 00000 ΠΏ.
0000014201 00000 ΠΏ.
0000014224 00000 ΠΏ.
0000014524 00000 ΠΏ.
0000015323 00000 ΠΏ. — = } 6} L = oB * (), + u͐.* Ya6kk

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

Июнь 2004 Π³ .: ИспользованиС динамичСских массивов Π² C

ΠœΠ°Ρ€ΠΊΠΎ Π’Π°Π±ΠΈΠ½ΠΈ — ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ тСхнологиям ΠΈΠ· Π’ΠΎΡ€ΠΎΠ½Ρ‚ΠΎ, Канада, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π‘ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ Π½Π° marcottabini.ca.


ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, сСйчас я Π² ΠΌΠ΅Π½ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅, Π½ΠΎ я люблю язык Π‘ΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ послС Паскаля (Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡΠ΅Π½Ρ‚ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ), Π‘ΠΈ — самый Π³Π΅Π½ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык ΠΈΠ· ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ…. Π”Π°ΠΆΠ΅ Π² наши Π΄Π½ΠΈ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я постоянно ΠΈΡ‰Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСсно связаны с C (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP).

ΠšΡ€Π°ΡΠΎΡ‚Π° C Π² Π΅Π³ΠΎ простотС — Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ†Π΅Π»ΠΈ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написанный ΠΊΠΎΠ΄ C Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки, Π΄Π°ΠΆΠ΅ Ссли это ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ язык.

Однако, работая с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ «массива», ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π½Π΅Π΄Π°Π²Π½ΠΈΠΌΠΈ Π±Π΅Π·Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌΠΈ (ΠΈΠ»ΠΈ слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ) языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Visual Basic, Perl ΠΈΠ»ΠΈ PHP.На этих ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… массивы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΠΎ своим значСниям, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ своим ΠΊΠ»ΡŽΡ‡Π°ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ строковыС ΠΈ цСлочислСнныС значСния ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ любого Ρ‚ΠΈΠΏΠ°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ динамичСскими ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ — Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… содСрТимоС ΠΏΠΎ своСму ТСланию.

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массив?

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

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

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

Π”Π΅Π»Π°Π΅ΠΌ это Π½Π° C

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

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

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

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

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

Π’Π΅Π΄Ρ€Π° вСсСлья

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π±ΠΎΠ»Π΅Π΅ простой ΠΌΠ΅Ρ‚ΠΎΠ΄ — Β«Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹Β», которая ΠΌΠ΅Π½Π΅Π΅ элСгантна, Π½ΠΎ обСспСчиваСт достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с опСрациями чтСния ΠΈ записи . Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, присваивая ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π΄Π²Π° значСния: сСгмСнт ΠΈ Ρ…ΡΡˆ.

И Ρ…ΡΡˆ, ΠΈ Π±Π°ΠΊΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ) ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π° с использованиСм Π΄Π°Π½Π½Ρ‹Ρ… фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. НапримСр, Ρ…Π΅Ρˆ-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° unsigned long ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСно простым слоТСниСм всСх Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΊΠ»ΡŽΡ‡Π΅. ЦСль Ρ…ΡΡˆΠ° — ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ простой ΠΈ быстрый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ: сравнСниС Π΄Π²ΡƒΡ… Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Ρ‹Ρ‚ΡŒΡΡ Π² ΠΊΠ»ΡŽΡ‡Π°Ρ… Π΄Π»ΠΈΠ½ΠΎΠΉ Π² нСсколько ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π½ΠΈΡ…. Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄.

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

Если Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ достаточно Ρ…ΠΎΡ€ΠΎΡˆ для получСния чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ доступному Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ для любого ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠ»ΡŽΡ‡Π°, ΡˆΠ°Π½ΡΡ‹ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ.Для своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ массивов я Π²Ρ‹Π±Ρ€Π°Π» популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, написанный Π² 1978 Π³ΠΎΠ΄Ρƒ П.А. Ларсон (Π½Ρ‹Π½Π΅ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½Π°ΡƒΡ‡Π½Ρ‹ΠΉ сотрудник Microsoft), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прост ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спустя Π±ΠΎΠ»Π΅Π΅ 20 Π»Π΅Ρ‚.

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

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

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС называСтся Β«Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹Β» Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π±Ρ‹Π» ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½.Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ларсона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число unsigned long Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π΅ΠΉ потрСбуСтся массив ΠΈΠ· 232 элСмСнтов — ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ, Ссли Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняло Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ выдСлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива!

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

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

Поиск, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅

Когда Ρ‚Π°Π±Π»ΠΈΡ†Π° сСгмСнтов создана, поиск элСмСнта становится довольно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· листинга 1, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива прСдставляСт собой структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ нСсколько элСмСнтов. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ манипуляции, я настроил ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²Π΅Π΄Ρ€ΠΎ ΠΊΠ°ΠΊ список с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ связью. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСгмСнт для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска просто ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² этом сСгмСнтС, ΠΈ провСряСт, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π°; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту Π² спискС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ hash_next .

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта — это двухэтапная опСрация.ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² массивС ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ запрос Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Π’ этом случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ старого элСмСнта уничтоТаСтся ΠΈ замСняСтся Π½ΠΎΠ²Ρ‹ΠΌ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС создаСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вставляСтся Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ array_add () (см. Листинг 2) Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π·Π°ΠΌΠ΅Π½Ρ‹ значСния ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, функция поиска Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ максимально эффСктивной, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π² массив добавляСтся Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт.

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

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

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

Однако, Ссли Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ основанноС Π½Π° C, Π° Π½Π΅ скриптовый Π΄Π²ΠΈΠΆΠΎΠΊ, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΌ способом Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° послСдний добавляСтся Π² массив ( destroy_function Π² листингС 1). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли массив Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ, Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этой Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠžΠ±Ρ…ΠΎΠ΄ массива

ПослСдний ΡˆΡ‚Ρ€ΠΈΡ… ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ содСрТимому массива Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹, Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄. Для этого я создал Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ список с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ связью, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ для массива, Π° Π½Π΅ ограничиваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ сСгмСнтом.

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ этого Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ двусвязного списка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ массиву становится Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг состоит ΠΈΠ· Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ array_first () (листинг 4), которая ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° списка ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС.ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, эта функция измСняСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π΅ΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π­Ρ‚ΠΎ создаСт своСго Ρ€ΠΎΠ΄Π° Β«ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ состояния» для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π»ΠΈΠ±ΠΎ array_prev () , Π»ΠΈΠ±ΠΎ array_next () для Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ самой структуры массива, Ρ‡Ρ‚ΠΎ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ (Π½ΠΎ это фактичСски ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива). Заставив Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ сторону ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄Π°, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ — Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнта, — Π΅Π³ΠΎ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вСсьма сущСствСнно.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнта, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° счСт, ΠΎΠ΄Π½Π°ΠΊΠΎ, потрСблСния памяти. На 32-Π±ΠΈΡ‚Π½ΠΎΠΉ машинС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ELEMENT Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 36 Π±Π°ΠΉΡ‚ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Π² 50 (ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для массивов, содСрТащих Π΄ΠΎ 10 000 элСмСнтов) трСбуСтся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 50 Γ— 36 = 1800 Π±Π°ΠΉΡ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива.

На ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Pentium 4 с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой 2,6 Π“Π“Ρ†, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнта ΠΈ создаСт массив ΠΈΠ· 10 000 элСмСнтов, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ врСмя выполнСния Π½Π΅ опрСдСляСтся ΠΌΠΎΠΈΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ (ΠΌΠ΅Π½Π΅Π΅ 1/100 ΠΎΡ‚ Π’Ρ‚ΠΎΡ€ΠΎΠΉ).

Однако ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива Π½Π° 10 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π΅Π·ΠΊΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π΄ΠΎ 6,37 сСкунды, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 600 Ρ€Π°Π·. Π’ этом случаС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСгмСнта Π΄ΠΎ 500 сокращаСт врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄ΠΎ снова сотая сСкунды.

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

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

ΠšΡƒΠ΄Π° ΠΈΠ΄Ρ‚ΠΈ дальшС

Π’ своСм Π½Ρ‹Π½Π΅ΡˆΠ½Π΅ΠΌ Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° массивов (доступна ΠΏΠΎ адрСсу http://www.cuj.com/code/) довольно мощная. Однако Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Π² зависимости ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. Одна ΠΈΠ· возмоТностСй — ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ способ выполнСния ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ сравнСния; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² Π²Ρ‹Π·ΠΎΠ²Ρƒ array_init () ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° внСшнюю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая выполняСт сравнСниС Π΄Π²ΡƒΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ strcmp () ΠΈΠ»ΠΈ memcmp () .Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ввСсти сСмантичСскиС, Π° Π½Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сравнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ вСрсия strcmp () Π±Π΅Π· рСгистра.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ интСрСсным ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ функция сортировки. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΎ Π±Ρ‹ возмоТности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ — Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти с автоматичСской индСксациСй; Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сСриализации, ΠΈ Π²Ρ‹ смоТСтС Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ».

массивов 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.
Π£ вас Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° см.

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

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

ВрСмя

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

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

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

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

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

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

  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.

Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Π½ΡƒΠΆΠ½Π° Π»ΠΈ Π²Π°ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с массивами Π² стилС C, Ρ‚ΠΎΠ³Π΄Π°
Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский массив. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский
array, Ссли Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Π° двоичная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со статичСским массивом Π² стилС C.
НапримСр, Ссли Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ структуру, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСстС с
внСшняя функция DLL, Π° Ρ‡Π»Π΅Π½ структуры объявлСн ΠΊΠ°ΠΊ статичСский
массив Π² C. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Ссли Π²Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅ структуру C, Ρ‚Π°ΠΌ
Π½Π΅Ρ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский Ρ‡Π»Π΅Π½ массива.DataFlex ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ динамичСскиС
Ρ‡Π»Π΅Π½Ρ‹ массива Π² структурС. БтатичСскиС массивы Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ
двоичная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с массивами Π² стилС C.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы вмСсто Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Ρ… массивов

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ
с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами Π² стилС C. НСровныС массивы Π½Π΅ совмСстимы с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ
с C, поэтому, Ссли Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Π° двоичная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ стилСм C
массивов, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы вмСсто Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Ρ…
массивы.

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

ИспользованиС Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива вмСсто ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива
ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ прСимущСство, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ количСство столбцов для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки,
ΠΈ Ρ‡Ρ‚ΠΎ каТдая строка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 0 столбцов. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ
использованиС, Ссли Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ строк, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ всС столбцы.ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ сторона
Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ каТдая строка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 0 столбцов, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ столбца, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ столбСц
Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ / ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив.

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

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ различия статичСского массива ΠΈ динамичСского массива

БтатичСскиС элСмСнты массива структуры Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для
массив, нСпосрСдствСнно встроСнный Π² структуру. НапримСр, Ρ‚ΠΈΠΏ структуры
содСрТащий Ρ‡Π»Π΅Π½ Integer [5], Π·Π°ΠΉΠΌΠ΅Ρ‚ (5 * SizeOfType (Integer)) Π±Π°ΠΉΡ‚
прямо Π² структурС. Π˜Ρ‚Π°ΠΊ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ структура, содСрТащая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π»Π΅Π½
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся статичСским массивом, Ρ€Π°Π·ΠΌΠ΅Ρ€ этого Ρ‚ΠΈΠΏΠ° структуры Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ этого
статичСский массив.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ динамичСского массива структуры всСгда Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€
ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 4 Π±Π°ΠΉΡ‚Π°). НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько элСмСнтов Π²
array, количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… этим ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‡Π»Π΅Π½ΠΎΠΌ массива Π²
структура всСгда ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ структура, содСрТащая
Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π»Π΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся динамичСским массивом, Ρ€Π°Π·ΠΌΠ΅Ρ€ этого Ρ‚ΠΈΠΏΠ° структуры
всСгда 4 Π±Π°ΠΉΡ‚Π°.

Говорят, Ρ‡Ρ‚ΠΎ статичСскиС элСмСнты массива структуры Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ встроСны
Π² структурС, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ элСмСнты динамичСского массива структуры Ρ‚ΠΎΠ»ΡŒΠΊΠΎ косвСнно
встроСн Π² структуру.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв эта Ρ€Π°Π·Π½ΠΈΡ†Π° Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ большой Ρ€ΠΎΠ»ΠΈ. Бинтаксис
для доступа ΠΊ статичСским / динамичСским элСмСнтам массива структуры Ρ‚ΠΎ ΠΆΠ΅ самоС. Π’
структурныС различия ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹ для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ совмСстимости с C
массивы стилСй. ДинамичСскиС массивы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСских массивов, ΠΌΠΎΠ³ΡƒΡ‚
Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания косвСнно-рСкурсивных объявлСний структур.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ различия ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Ρ…
ΠœΠ°ΡΡΠΈΠ²Ρ‹

НСровныС массивы тСхничСски ΠΈ структурно ΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСскими ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ
массивы Ρ‚ΠΈΠΏΠ° динамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.НСровный массив — это просто
ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, массив Ρ‚ΠΈΠΏΠ° массива.

БинтаксичСски Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅ массивы ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ.
НСровныС массивы Ρ‚Π°ΠΊ ΠΆΠ΅ просты Π² использовании, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅.
массивы.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅ массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ структурно динамичСскими массивами, Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅ элСмСнты массива
структуры Ρ‚ΠΎΠ»ΡŒΠΊΠΎ косвСнно встроСны Π² структуру. НСровныС массивы
поэтому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для формирования косвСнно-рСкурсивных объявлСний структур.

.

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

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