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

Ѐиксированный массив Π² 1Π‘ 8.3 (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹) β€” это структура Π΄Π°Π½Π½Ρ‹Ρ… с Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ количСством элСмСнтов. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ динамичСского массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ расти ΠΈΠ»ΠΈ ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, фиксированный массив ΠΈΠΌΠ΅Π΅Ρ‚ строгиС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ случайно: ΠΎΠ½ΠΎ Π΄Π°Ρ‘Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ выполнСния ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок, связанных с ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. Но Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ массивы Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹? И ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ камнями?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚Ρ€ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… сцСнария, Π³Π΄Π΅ фиксированныС массивы Π² 1Π‘ становятся СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, сравним ΠΈΡ… с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ экономят рСсурсы систСмы. А Π΅Ρ‰Ρ‘ β€” раскроСм малоизвСстныС Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΠΈΡˆΡƒΡ‚ Π² стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ фиксированный массив Π² 1Π‘ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ устроСн

Ѐиксированный массив (ΠΈΠ»ΠΈ массив фиксированной Π΄Π»ΠΈΠ½Ρ‹) β€” это структура Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаётся ΠΏΡ€ΠΈ создании ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ массив создаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора Новый Массив(Π Π°Π·ΠΌΠ΅Ρ€, [Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΠΎΠ£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ]), Π³Π΄Π΅ Π Π°Π·ΠΌΠ΅Ρ€ β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания фиксированного массива Π½Π° 10 элСмСнтов, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ НСопрСдСлСно:

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ² = Новый Массив(10);

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ фиксированного массива β€” статичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ. БистСма выдСляСт Π±Π»ΠΎΠΊ памяти ΠΏΠΎΠ΄ всС элСмСнты сразу, Ρ‡Ρ‚ΠΎ ускоряСт доступ ΠΊ Π½ΠΈΠΌ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ динамичСских массивов, Π³Π΄Π΅ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ пСрСраспрСдСлСниС памяти (Π° это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ), фиксированныС массивы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ прСдсказуСмо.

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

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ фиксированный массив Π½Π΅ являСтся "ΡƒΡ€Π΅Π·Π°Π½Π½ΠΎΠΉ" вСрсиСй динамичСского. Π­Ρ‚ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для спСцифичСских Π·Π°Π΄Π°Ρ‡. НапримСр, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π¦ΠΈΠΊΠ» Для... ΠΏΠΎ фиксированному массиву 1Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ‡Π΅ΠΌ для динамичСского.

πŸ“Š Как часто Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ фиксированныС массивы Π² 1Π‘?
ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ
Иногда
Π Π΅Π΄Π΅ΠΊΠΎ
Никогда
НС знаю, Ρ‡Ρ‚ΠΎ это

2. Когда фиксированный массив обязатСлСн: 3 ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… случая

Π•ΡΡ‚ΡŒ ситуации, Π³Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ фиксированного массива Π½Π΅ просто ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π˜Ρ… ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам выполнСния, ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎΠΌΡƒ замСдлСнию ΠΊΠΎΠ΄Π°. Рассмотрим Ρ‚Ρ€ΠΈ самых распространённых сцСнария.

2.1. Π Π°Π±ΠΎΡ‚Π° с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ записи Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΡ‚ΠΎΠΊ ΠΈΠ»ΠΈ Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅) фиксированныС массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив, систСма Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ "ΠΏΡ€ΠΎ запас", Ρ‡Ρ‚ΠΎ снизит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ чтСния Ρ„Π°ΠΉΠ»Π° порциями ΠΏΠΎ 4096 Π±Π°ΠΉΡ‚:

Π‘ΡƒΡ„Π΅Ρ€ = Новый Массив(4096);

ΠŸΠΎΡ‚ΠΎΠΊ = Новый Π§Ρ‚Π΅Π½ΠΈΠ΅Π”Π°Π½Π½Ρ‹Ρ…(ИмяЀайла);

Пока ΠŸΠΎΡ‚ΠΎΠΊ.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ(Π‘ΡƒΡ„Π΅Ρ€) > 0 Π¦ΠΈΠΊΠ»

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…

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

Π—Π΄Π΅ΡΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° 4096 Π²Ρ‹Π±Ρ€Π°Π½ Π½Π΅ случайно β€” это стандартный Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы NTFS, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

2.2. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с внСшними систСмами Ρ‡Π΅Ρ€Π΅Π· API

МногиС внСшниС сСрвисы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, REST API ΠΈΠ»ΠΈ SOAP) Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ с фиксированным количСством ΠΏΠΎΠ»Π΅ΠΉ. Если Π²Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ запрос с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ динамичСского массива, Π΅ΡΡ‚ΡŒ риск, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ лишнСго элСмСнта сСрвСр Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ 400 Bad Request.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π² API 1Π‘:Π­Π”Πž:

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ = Новый Массив(5);

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ[0] = Π˜ΠΠΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°;

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ[1] = НомСрДокумСнта;

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ[2] = Π”Π°Ρ‚Π°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°;

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ[3] = Π‘ΡƒΠΌΠΌΠ°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°;

Π”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ[4] = Π’Π°Π»ΡŽΡ‚Π°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°;

Если Π±Ρ‹ здСсь использовался динамичСский массив, случайноС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡˆΠ΅ΡΡ‚ΠΎΠ³ΠΎ элСмСнта ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ привСсти ΠΊ сбою ΠΏΡ€ΠΈ сСриализации Π΄Π°Π½Π½Ρ‹Ρ….

2.3. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ² с извСстным числом ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ

Когда количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»Π° Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π½Π΅ΠΉ Π² мСсяцС ΠΈΠ»ΠΈ элСмСнтов фиксированной структуры), фиксированныС массивы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° 15–30% быстрСС, Ρ‡Π΅ΠΌ динамичСскиС. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ доступ ΠΊ памяти Π·Π°Ρ€Π°Π½Π΅Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ расчёта срСднСмСсячной Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹:

Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ = Новый Массив(31); // Ѐиксированно 31 дСнь

Для Инд = 0 По 30 Π¦ΠΈΠΊΠ»

Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹[Инд] = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ(Инд + 1);

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

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

πŸ’‘

ЀиксированныС массивы ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ…, Π³Π΄Π΅ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Π°ΠΆΠ½Π΅Π΅ гибкости. Π˜Ρ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, внСшними API ΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ с извСстным числом ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.

3. Ѐиксированный vs динамичСский массив: сравнСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, насколько фиксированныС массивы эффСктивнСС динамичСских, ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСст Π½Π° основС Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ β€” Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива 10 000 элСмСнтов случайными числами. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ’Π°ΠΉΠΌΠΡƒΡ‚() для Π·Π°ΠΌΠ΅Ρ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’ΠΈΠΏ массива ВрСмя выполнСния (мс) ΠŸΠ°ΠΌΡΡ‚ΡŒ (Π±Π°ΠΉΡ‚) ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ
Ѐиксированный 12 83 886 080 ΠŸΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° сразу, Π½Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅
ДинамичСский (с Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) 45 83 886 080 ΠŸΠ°ΠΌΡΡ‚ΡŒ рСзСрвируСтся Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, Π΅ΡΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π³Ρ€Π°Π½ΠΈΡ†
ДинамичСский (Π±Π΅Π· рСзСрвирования) 187 125 829 120 ΠŸΠ°ΠΌΡΡ‚ΡŒ пСрСраспрСдСляСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, фиксированный массив Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ быстрСС, Π½ΠΎ ΠΈ экономнСС ΠΏΠΎ памяти Π² долгосрочной пСрспСктивС. ДинамичСский массив Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ рСзСрвирования (Массив.Π Π΅Π·Π΅Ρ€Π²()) ΠΏΠΎΠΊΠ°Π·Π°Π» Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ·-Π·Π° постоянного пСрСраспрСдСлСния памяти.

Однако Π΅ΡΡ‚ΡŒ нюанс: Ссли Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстно Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство элСмСнтов, Π½ΠΎ извСстно максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

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

Массив.Π Π΅Π·Π΅Ρ€Π²(10000); // Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ 10 000 элСмСнтов

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСраспрСдСлСния памяти ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов, сохраняя Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ часто Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² массив, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство нСизвСстно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ динамичСский массив с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (Массив.Π Π΅Π·Π΅Ρ€Π²()). Π­Ρ‚ΠΎ сочСтаСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

4. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с фиксированными массивами

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с фиксированными массивами. Рассмотрим самыС распространённыС ΠΈΠ· Π½ΠΈΡ… ΠΈ способы ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ.

4.1. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° записи Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива

Бамая частая ошибка β€” ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ индСксу. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языков программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JavaScript, Π³Π΄Π΅ массив просто Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡΡ), Π² 1Π‘ это ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ:

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

Массив[5] = 10; // ΠžΠ¨Π˜Π‘ΠšΠ: ИндСкс Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† массива!

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: индСксация Π² 1Π‘ начинаСтся с 0, поэтому послСдний элСмСнт массива Ρ€Π°Π·ΠΌΠ΅Ρ€Π° N ΠΈΠΌΠ΅Π΅Ρ‚ индСкс N-1.

4.2. НСэффСктивноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ фиксированного массива Ρ‡Π΅Ρ€Π΅Π· Массив2 = Массив1 создаёт ссылку, Π° Π½Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ копию. ИзмСнСния Π² Массив2 ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° Массив1! Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ копию, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Массив2 = Новый Массив(Массив1.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() + 1);

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

Массив2[Инд] = Массив1[Инд];

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

4.3. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ()

МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фиксированным массивом Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ. Однако Ссли массив содСрТит ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠžΠ±ΡŠΠ΅ΠΊΡ‚.Бсылка), это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Массив.ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ();

Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ Π² Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… процСссах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… заданиях.

НС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ индСксов|Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСзависимыС ΠΊΠΎΠΏΠΈΠΈ ΠΏΡ€ΠΈ нСобходимости|ΠžΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ массив послС использования|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΠ΅Ρ€Π΅Π΄ опСрациями-->

5. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фиксированными массивами

ЀиксированныС массивы Π² 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для простого хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Рассмотрим нСсколько ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

5.1. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ фиксированныС массивы

Π₯отя Π² 1Π‘ Π½Π΅Ρ‚ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массивов массивов. НапримСр, для создания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ 10Γ—10:

Π’Π°Π±Π»ΠΈΡ†Π° = Новый Массив(10);

Для Π‘Ρ‚Ρ€ΠΎΠΊΠΈ = 0 По 9 Π¦ΠΈΠΊΠ»

Π’Π°Π±Π»ΠΈΡ†Π°[Π‘Ρ‚Ρ€ΠΎΠΊΠΈ] = Новый Массив(10);

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

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ матСматичСских вычислСний.

5.2. ИспользованиС фиксированных массивов для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

ЀиксированныС массивы идСально подходят для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ справочнику "НомСнклатура" ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ Π² массив ΠΏΡ€ΠΈ стартС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ:

ΠšΡΡˆΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹ = Новый Массив(1000); // ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1000 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ

Запрос = Новый Запрос;

Запрос.ВСкст = "ВЫБРАВЬ Код, Бсылка Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ();

Пока Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ() Π¦ΠΈΠΊΠ»

ΠšΡΡˆΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹[Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Код] = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Бсылка;

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

Π­Ρ‚ΠΎ снизит Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° счёт увСличСния потрСблСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

5.3. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ сортировки

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ фиксированный массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() с явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ направлСния. Π­Ρ‚ΠΎ быстрСС, Ρ‡Π΅ΠΌ ручная сортировка:

Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(НаправлСниСБортировки.Π’ΠΎΠ·Ρ€); // По Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(НаправлСниСБортировки.Π£Π±Ρ‹Π²); // По ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов (Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов) ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ быстрой сортировки (QuickSort), Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сортировка массивов Π² 1Π‘?

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки Π² 1Π‘ зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива:

- Для массивов Π΄ΠΎ 100 элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сортировка вставками (Insertion Sort).

- Для массивов ΠΎΡ‚ 100 Π΄ΠΎ 10 000 элСмСнтов β€” быстрая сортировка (QuickSort).

- Для массивов Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов β€” Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (QuickSort + Insertion Sort для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… подмассивов).

Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ сортировка ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… массивов ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ оТидаСтся.

6. Когда фиксированный массив Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚: Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹

НСсмотря Π½Π° всС прСимущСства, фиксированныС массивы Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π•ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, Π³Π΄Π΅ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ нСцСлСсообразно ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ€Π΅Π΄Π½ΠΎ.

6.1. Π Π°Π±ΠΎΡ‚Π° с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ количСством Π΄Π°Π½Π½Ρ‹Ρ…

Если Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстно, сколько элСмСнтов потрСбуСтся (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π±Π°Π·Ρ‹), Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • πŸ“Œ ДинамичСский массив β€” Ссли элСмСнтов Π½Π΅ слишком ΠΌΠ½ΠΎΠ³ΠΎ (Π΄ΠΎ 100 000).
  • πŸ“– Бписок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” Ссли Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Найти() ΠΈΠ»ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ()).
  • πŸ—ƒοΈ Π’Π°Π±Π»ΠΈΡ†Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” Ссли Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ структуру (ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈ строки).

6.2. ЧастыС вставки/удалСния Π² сСрСдинС массива

ЀиксированныС массивы ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивны, Ссли трСбуСтся часто Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π² сСрСдинС. Π’ этом случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· придётся ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ O(n) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π»ΡƒΡ‡ΡˆΠ΅ подходят:

  • πŸ”— Бвязанный список (ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ).
  • πŸ“‘ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ БоотвСтствиС β€” Ссли Π½ΡƒΠΆΠ½Ρ‹ ассоциативныС связи.

6.3. Π Π°Π±ΠΎΡ‚Π° с ΠΎΡ‡Π΅Π½ΡŒ большими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

Если массив Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ элСмСнтов, фиксированный массив ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ памяти. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ:

  • πŸ’Ύ Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
  • πŸ“‚ Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ кэш β€” для Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: фиксированный массив β€” это инструмСнт для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Π½Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π•Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ осознанно, исходя ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ часто ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π²Π°ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БписокЗначСний с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (Бписок.Π Π΅Π·Π΅Ρ€Π²()). Π­Ρ‚ΠΎ даст Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ динамичСского массива с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ фиксированному.

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования фиксированных массивов

Рассмотрим нСсколько практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π³Π΄Π΅ фиксированныС массивы Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ свою ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

7.1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· рСгистра накоплСния

Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ остатки ΠΏΠΎ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Π΅ Π·Π° мСсяц (31 дСнь). ΠœΡ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ 31 элСмСнт:

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠŸΠΎΠ”Π½ΡΠΌ = Новый Массив(31);

Для Π”Π΅Π½ΡŒ = 1 По 31 Π¦ΠΈΠΊΠ»

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠŸΠΎΠ”Π½ΡΠΌ[Π”Π΅Π½ΡŒ - 1] = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠžΡΡ‚Π°Ρ‚ΠΎΠΊΠΠ°Π”Π΅Π½ΡŒ(Π”Π΅Π½ΡŒ);

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

ИспользованиС фиксированного массива здСсь ускоряСт доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ†ΠΈΠΊΠ»Π°.

7.2. Π Π°Π±ΠΎΡ‚Π° с пиксСлями изобраТСния

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль прСдставляСтся ΠΊΠ°ΠΊ элСмСнт массива. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 800Γ—600), Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ фиксированный массив:

Π¨ΠΈΡ€ΠΈΠ½Π° = 800;

Высота = 600;

ПиксСли = Новый Массив(Π¨ΠΈΡ€ΠΈΠ½Π° * Высота);

Для Y = 0 По Высота - 1 Π¦ΠΈΠΊΠ»

Для X = 0 По Π¨ΠΈΡ€ΠΈΠ½Π° - 1 Π¦ΠΈΠΊΠ»

ПиксСли[Y * Π¨ΠΈΡ€ΠΈΠ½Π° + X] = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ¦Π²Π΅Ρ‚ΠŸΠΈΠΊΡΠ΅Π»Ρ(X, Y);

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

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

7.3. РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° "ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°"

Π’ Π·Π°Π΄Π°Ρ‡Π°Ρ… Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, расчёт ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ срСднСго) фиксированный массив позволяСт эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ "ΠΎΠΊΠ½ΠΎΠΌ" Π΄Π°Π½Π½Ρ‹Ρ…:

Π Π°Π·ΠΌΠ΅Ρ€ΠžΠΊΠ½Π° = 5;

Окно = Новый Массив(Π Π°Π·ΠΌΠ΅Ρ€ΠžΠΊΠ½Π°);

Для i = 0 По Π”Π°Π½Π½Ρ‹Π΅.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 Π¦ΠΈΠΊΠ»

Окно[i % Π Π°Π·ΠΌΠ΅Ρ€ΠžΠΊΠ½Π°] = Π”Π°Π½Π½Ρ‹Π΅[i];

Если i >= Π Π°Π·ΠΌΠ΅Ρ€ΠžΠΊΠ½Π° - 1 Π’ΠΎΠ³Π΄Π°

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ = Π‘Ρ€Π΅Π΄Π½Π΅Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅(Окно);

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

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

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

Π—Π΄Π΅ΡΡŒ фиксированный массив позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ постоянного создания Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

8. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°: совСты ΠΎΡ‚ экспСртов

Π§Ρ‚ΠΎΠ±Ρ‹ максимально эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ фиксированныС массивы, слСдуйтС этим рСкомСндациям ΠΎΡ‚ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² 1Π‘:

  • πŸ› οΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() вмСсто Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ вычислСний.
  • πŸ” ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ Для Ρ†ΠΈΠΊΠ»Π°ΠΌ Пока. Для фиксированных массивов 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ»Ρ‹ Для, дСлая ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ быстрСС Π½Π° 10–15%.
  • 🧹 ΠžΡ‡ΠΈΡ‰Π°ΠΉΡ‚Π΅ массивы послС использования. Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ Π² сСрвСрных процСссах, Π³Π΄Π΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ падСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • πŸ“ Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива с запасом. Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΡ‡Π½ΠΎΠΌ количСствС элСмСнтов, Π»ΡƒΡ‡ΡˆΠ΅ Π²Π·ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° 10–20% большС, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π­Ρ‚ΠΎ дСшСвлС ΠΏΠΎ памяти, Ρ‡Π΅ΠΌ динамичСскоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅.
  • πŸ”„ Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎ большим массивам. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π²Π° массива Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N ΠΈ M, алгоритмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ составит O(NΓ—M), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… N ΠΈ M.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ контСкстС выполнСния. На ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ фиксированныС массивы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС, Ρ‡Π΅ΠΌ Π½Π° сСрвСрС, ΠΈΠ·-Π·Π° особСнностСй управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ большиС массивы ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π₯ранилищСЗначСния.

πŸ’‘

Для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ с фиксированными массивами Π½Π° сСрвСрС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ компиляции &ΠΠ°Π‘Π΅Ρ€Π²Π΅Ρ€Π΅Π‘Π΅Π·ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π°. Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ контСкста ΠΈ ускорит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 5–10%.

FAQ: ЧастыС вопросы ΠΎ фиксированных массивах Π² 1Π‘

МоТно Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ фиксированного массива послС создания?

НСт, Ρ€Π°Π·ΠΌΠ΅Ρ€ фиксированного массива нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС создания. Если Π²Π°ΠΌ потрСбуСтся массив Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, придётся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· старого. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ индСксу Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ массива ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС выполнСния.

Какой массив быстрСС: фиксированный ΠΈΠ»ΠΈ динамичСский?

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

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ фиксированный массив для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² 1Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочников)?

Π”Π°, фиксированный массив ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1Π‘, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ элСмСнты справочников ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Однако ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² этом случаС массив содСрТит Π½Π΅ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° ссылки Π½Π° Π½ΠΈΡ…. ΠŸΡ€ΠΈ очисткС массива (Массив.ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ()) ссылки ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, Π½ΠΎ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ.

Как ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ фиксированный массив?

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ копию фиксированного массива, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС элСмСнты:

КопияМассива = Новый Массив(Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() + 1);

Для Инд = 0 По Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

КопияМассива[Инд] = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²[Инд];

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

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ присваиваниС Массив2 = Массив1 создаёт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²ΡƒΡŽ ссылку Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив.

Π•ΡΡ‚ΡŒ Π»ΠΈ Π² 1Π‘ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ фиксированныС массивы?

НСт, Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π½Π΅Ρ‚ встроСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. Однако ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, создавая массивы массивов. НапримСр, для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива 10Γ—10 ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΈΠ· 10 элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ являСтся массивом ΠΈΠ· 10 элСмСнтов.

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (Π±ΠΎΠ»Π΅Π΅ 1 000 000 элСмСнтов) ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ограничСния памяти, особСнно Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° части ΠΈΠ»ΠΈ использованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….