§ 11. Структураваны тып даных масіў

11.1. Паняцце масіву

У сучасным свеце штосекундна адбываецца апрацоўка вялізнай колькасці даных з дапамогай камп’ютара. Калі неабходна апрацоўваць даныя аднаго тыпу — лікі, сімвалы, радкі і інш., то для іх захоўвання можна выкарыстаць тып даных, які называецца масіў.

Масіў — упарадкаваная паслядоўнасць даных, якая абазначаецца адным імем і складаецца з канечнай колькасці элементаў, што маюць адзін і той жа тып.

Масіў з’яўляецца структураваным (састаўным) тыпам даных. Гэта азначае, што велічыня, апісаная як масіў, складаецца з канечнай колькасці іншых велічынь. Так, напрыклад, можна стварыць масівы з 10 цэлых ці 100 рэчаісных лікаў. Тып элементаў масіву называюць базавым тыпам. Усе элементы масіву ўпарадкаваны па індэксах (нумарах элементаў), якія вызначаюць месцазнаходжанне элемента ў масіве. У мове С++ элементы масіву заўсёды нумаруюцца з нуля.

Масіву прысвойваецца імя, пры дапамозе якога можна спасылацца на яго як на адзінае цэлае. Элементы масіву ўпарадкаваны так, што кожнаму элементу адпавядае нумар (індэкс), які вызначае яго месца ў агульнай паслядоўнасці (прыклады 11.1—11.3). Індэксы могуць быць выразам, значэнне якога належыць любому простаму  тыпу, акрамя рэчыўнага. Індэксы павінны быць неадмоўнымі. Доступ да кожнага асобнага элемента ажыццяўляецца зваротам да імя масіву з указаннем індэкса патрэбнага элемента, індэкс элемента запісваецца пасля імя ў квадратных дужках (прыклад 11.4).

Калі зварот да элементаў масіву ажыццяўляецца пры дапамозе толькі аднаго індэкса, то такія масівы называюць аднамернымі або лінейнымі. Для захоўвання масіву ў памяці камп’ютара вылучаецца бесперапынны ўчастак, у якім элементы размяшчаюцца паслядоўна адзін за адным.

Упершыню тып даных масіў з’явіўся ў мове Фартран (створана ў перыяд з 1954 па 1957 г. у карпарацыі IBM). Ужо першыя версіі мовы падтрымлівалі трохмерныя масівы (у 1980 г. максімальная размернасць масіву была павялічана да 7). Масівы былі неабходны для стварэння матэматычных бібліятэк, у прыватнасці тых, што змяшчалі працэдуры рашэння сістэм лінейных ураўненняў.

Прыклад 11.1. У 10 «А» класе 25 навучэнцаў. Вядомы рост кожнага ў сантыметрах. Для захоўвання значэнняў росту можна выкарыстоўваць масіў А, які складаецца з 25 цэлых лікаў.

Індэкс кожнага элемента — парадкавы нумар навучэнца са спіса ў класным журнале. Паколькі элементы масіву нумаруюцца ад нуля, то запіс а[5] — рост навучэнца, які ў журнале запісаны пад нумарам 6.

Прыклад 11.2. Кожны дзень у снежні вымяралі тэмпературу паветра. Для захоўвання значэнняў тэмпературы можна выкарыстоўваць масіў t, які складаецца з 31 рэчаіснага ліку.

Індэкс элемента — нумар дня ў снежні са зрухам на 1. Запіс t[15] — тэмпература паветра 16 снежня.

Прыклад 11.3. У 10 «Б» класе 27 навучэнцаў. У класным журнале паказаны прозвішча і імя кожнага навучэнца. Для захоўвання спіса навучэнцаў можна выкарыстоўваць масіў s, які складаецца з 27 радкоў.

Індэкс кожнага элемента — парадкавы нумар навучэнца са спіса ў класным журнале. Тады запіс s[5] — прозвішча і імя навучэнца пад № 6.

Прыклад 11.4. Зварот да элемента масіву: а[3], t[i], s[n-1].

Мова праграміравання С++ падтрымлівае работу з масівамі, якія дасталіся ёй ў спадчыну ад мовы С. Аднак работа з такімі масівамі патрабуе глыбокага разумення таго, як яны змяшчаюцца ў памяці камп’ютара. У якасці альтэрнатывы рэкамендуецца выкарыстоўваць шаблоны класаў, якія апісаны ў стандартнай бібліятэцы: array<> і vector<>.