Основи програмування на С ++ для початківців

Массиви в C++ (відео)

массивы в c++, массивы в с++, одномерный массивМассивы чрезвычайно важная тема в C . У програмах вони використовуються дуже часто і розібратися в цій темі необхідно досконально. Відразу вас порадую – понять и научиться применять массивы достаточно просто даже начинающему.

Итак, зачем же нужны массивы и что они из себя представляют? К настоящему моменту вы уже хорошо знаете, что данные программы хранятся в объявленных нами змінних певного типу (int, double, char… ). Но бывает так, что программе необходимо хранить сотни (а то и больше) переменных однотипных данных, а также необходимо с ними работать – присваивать значения, изменять их и т.д.  

К примеру, надо хранить порядковые номера строк. Согласитесь –  будь-якому стане страшно від думки, что надо создать пятьсот переменных типа int, кожної дати унікальне ім'я і привласнити значення від 1-го до 500-та. (мне уже страшно :) В таком случае, массивы нас просто спасут.

Отметим основное и перейдем к практическому примеру:

  • массив в С – это совокупность определенного количества однотипных переменных, имеющих одно имя. К примеру, int array [3];. Эта запись означает, что мы объявили массив с именем array , которыйсодержит в себе 3 переменные типа int;
  • переменные массива называют элементами ;
  • кожен елемент має свій унікальний індекс - свій порядковий номер. Используя индекс мы можем обращаться к конкретному элементу. ВАЖНО – индексация элементов массива начинается с 0. Так в массиве int array [3] первый элемент имеет индекс 0, а последний – 2. Чтобы обратиться, например, к нулевому элементу массива и изменить его значение, треба вказати ім'я масиву та в квадратних дужках вказати індекс елементу– array [0] = 33.

Рассмотрим пример:

У рядку 12 ми визначаємо целочисленную константу SIZE, которая будет хранить размер массива (определённое нами, количество его элементов). У рядку 13 оголошуємо масив: указываем тип данных, которые будут храниться в ячейках массива,  даємо ім'я і вказуємо розмір в квадратних дужках.

Важливо, что в квадратные скобки мы можем записывать только целые константные значения. Надо либо сразу вписать целое число в квадратные скобки при объявлении массива (int firstArray[100];), либо определить целочисленную константу до объявления массива и ввести в квадратные скобки имя этой константы (как в нашем примере).

Второй способ использовать предпочтительней, если в ходе программы вам придется несколько раз обращаться к массиву через цикл. Объясняется это тем, что когда мы объявляем цикл, в ньому можна вказати умову зміни лічильника до значенняSIZE.

Вот представьте, что нам необходимо изменить размер массива с 10 элементов на 200. В этом случае, нам залишається всього на всього змінити значення целочисленной константи, и таким образом у нас автоматически подставятся новые значения размера и в массив, и во все циклы программы.

Можете попробовать в нашем примере внести любую другую цифру в константу SIZE. И вы увидите, что программа будет прекрасно работать – создаст массив на столько элементов, на сколько вы укажете, внесет данные и отобразит их на экране.

У рядках 15 – 19 определяем цикл for. Его счетчик i будет служить индексом элементов массива. В самом начале, он равен 0 и с каждым шагом будет увеличиваться на единицу до тех пор, пока не станет равным SIZE –  кількості елементів масиву.

Зверніть увагу, в одному циклі ми і присвоюємо різні значення елементів масиву і в наступному рядку звертаємося до них, чтобы вывести данные, которые они хранят, на екран.

Запускаем программу и видим результат:

массивы в c++, массивы в с++, одномерный массив

Присвоить значение элементам массива можно разными способами – инициализировать его при создании либо с помощью цикла. Если размер массива большой, есть прекрасная возможность использовать цикл for  или while  для ініціалізації його елементів. Так мы сделали в нашем примере. Можно заполнить массив случайными числами – об этом у нас есть отдельная статья.

А якщо масив зовсім невеликий, к примеру на 5 элементов, форматувати його можна відразу при оголошенні:

массивы в c  , масиви в с ++, одновимірний масив

Так элементу с индексом 0 – firstArray[0] – будет присвоено значение 11, а последнему элементу массива firstArray[4] – значение 15. Есть такая фишка – вы можете не указывать размер массива в квадратных скобках и сделать такую запись:

массивы в c  , масиви в с ++, одновимірний масив

Предыдущая запись эквивалентна этой. Только во втором случае компилятор автоматически вычислит размер массива, по количеству данных в фигурных скобках.

Так же при начальной инициализации элементов массива, когда массив необходимо очистить от «мусора» (остаточных данных других программ в памяти) лучше сразу присвоить всем элементам значение 0.  Це виглядає так:

массивы в c  , масиви в с ++, одновимірний масив

Следует запомнить, что такая инициализация возможна только для заполнения нулями. Если необходимо заполнить элементы массива какими-либо другими числами, краще застосовувати цикл. У C ++ 11 (стандарт кодирования) при использовании списковой инициализации (инициализации с фигурными скобками) дозволяється навіть відкинути знак= .

массивы в c  , масиви в с ++, одновимірний масив

Хочется показать еще один прием инициализации при создании массива. К примеру, для массива из 30-ти элементов нам надо внести значения 33 і 44 только в ячейки с индексом 0 і 1 соответственно, а остальные заполнить нулями. Тогда делаем так:

массивы в c  , масиви в с ++, одновимірний масив

эти данные будут внесены в нулевую и первую ячейки, а остальные автоматически примут значение 0.

Организовать заполнение массива можно и при помощи оператора cin:

Чтобы присвоить или изменить значение конкретного элемента, надо обратиться к нему, використовуючи його індекс. Наприклад, все значения массива из 500-та элементов нас устраивают, але необхідно змінити значення лише одного. Тоді ми звертаємося до нього за його індексом :  firstArray[255] = 7;

З цим розібралися, теперь давайте посмотрим, яким же чином масив розташовується в оперативній пам'яті. Масив типу int з п'яти елементів займе 20 байт памяти – 4 байта (int) * 5 (количество элементов) – и эти данные будут располагаться в памяти последовательно, как показано на рисунке:

массивы в c  , масиви в с ++, одновимірний масив
массив int из пяти элементов в оперативной памяти

 Подведем итог и отметим всё самое важное о массивах:

  • синтаксис объявления массива :

         тіп_Данних_Массіва імя_массіва [размер];

    • переменные массива называются элементами, а каждый элемент имеет свой порядковый номер – индекс.

 

    • нумерація індексів елементів масиву починається з нуля!!!

 

    • форматувати масив можна тільки при його створенні – int firstArray[3] = {1, 2, 3};  Виконувати ініціалізацію пізніше вже не допускається:   firstArray[3] = {1, 2, 3};  Якщо масив ні инициализирован на початку, можно присвоить значения его элементам, використовуючи цикли або просто звертаючись до необхідного елементу через його індекс.

 

  • масив може бути одновимірним – таким, как рассмотрен в этом примере, і багатовимірним –  dvumernиm, трехмерным… (их мы рассмотрим в одной из наших следующих статей).

Не забывайте о необходимости практиковаться в решении задач – Завдання: Массиви в C++ . Хочете дізнатися більше про масивах в C ++ (в том числе о символьных массивах и строках)? Подивіться ці відео-уроки:

25 думки про "Массиви в C++ (відео)

  1. Тепер я знаю, як просто зберігати безліч однотипних даних з допомогою масивів в С++. Дякую за доступність викладання матеріалу!

  2. Коли відзначав найважливіше, треба було вказати, що довільний доступ до елемента масиву виконується за O(1). У тексті статті ІМХО варто пояснити, що таке час довільного доступу забезпечується тим, що розмір елементів масиву фіксований і елементи розміщуються у пам'яті послідовно.
    Якось красиво намалювати картинку для прикладу типу:
    [код]
    int a[99];
    a[5] = 1; // еквівалентно (a + sizeof(int) * 5) = 1
    [/код]
    Тобто,. звернення до елемента a[99999] відбудеться також швидко, як до a[2], например.
    Можна це якось гарно намалювати.

    Це багато в чому ключовий момент, т.к. час доступу – це один із ключових факторів вибору структури даних, до яких належать масиви.

    т.к. це вступна стаття, можна порівнювати масиви з іншими структурами даних, дуже поверхово, не вдаючись до деталей реалізації інших структур. Подивитися такі порівняння можна у книжках за алгоритмами, наприклад у Скієни.

    Я тут же про динамічні масиви написав. Статтю взагалі видалив би і написав би заново. У статті купа ляпів та неточностей. З термінологією біда.

  3. Все ось ці преамбули я прибрав би:
    [quote]
    Масиви надзвичайно важлива тема С++.

    Відразу вас порадую - зрозуміти і навчитися застосовувати масиви досить просто навіть початківцю.

    Отметим основное и перейдем к практическому примеру:

    Ну і ще один спосіб присвоєння значень – це звертатися до кожного елементу масиву окремо.

    ….
    [/quote]

    Просто порівняйте 2 фрагменту:
    [quote]

    массив в С – это совокупность определенного количества однотипных переменных, мають одне ім'я – наприклад, int array [3];. Эта запись означает, що ми оголосили масив з назвою array , який містить у собі 3 змінні типу int;
    переменные массива называют элементами ;
    кожен елемент має свій унікальний індекс - свій порядковий номер. Используя индекс мы можем обращаться к конкретному элементу. ВАЖЛИВО – індексація елементів масиву починається з 0. Так у масиві int array [3] первый элемент имеет индекс 0, а последний – 2. Чтобы обратиться, наприклад, к нулевому элементу массива и изменить его значение, треба вказати ім'я масиву та в квадратних дужках вказати індекс елементу – array [0] = 33.
    [/quote]
    [quote]

    синтаксис объявления массива :

    тіп_Данних_Массіва імя_массіва [размер];

    подивившись на синтаксис можна дати визначення: масив – це певна кількість однотипних даних, об'єднаних спільним ім'ям.
    переменные массива называются элементами, а каждый элемент имеет свой порядковый номер – индекс.
    нумерація елементів масиву починається з нуля!!!
    ініціалізувати масив можна або за його створення, або використовуючи цикли.
    масив може бути одномірним – таким, как рассмотрен в этом примере, і багатовимірним – двомірним, трехмерным… (их мы рассмотрим в одной из наших следующих статей).
    [/quote]

  4. Володимир, дякую за Ваші коментарі. думаю, багатьом буде не зайвим почитати додаткову інформацію про масиви.
    Щодо написання статей – орієнтуюся на новачків у програмуванні та намагаюся писати максимально доступно. Вам, як фахівцю , це звичайно здається примітивним, але програмісти-початківці оцінять. Кому знадобиться більш глибокий розгляд теми, той не одну книгу ще прочитає.
    p.s. Номери рядків – змінили.

  5. Ну окей, щоб тисячу разів не говорити:
    “нумерація елементів масиву починається з нуля!!!”
    просто називай перший елемент нульовим.

    Ініціалізація з фігурними дужками – це тонкість, яка, ІМХО, новачкам взагалі не потрібна особа. Не всі компілятори це підтримують. А якщо стаття орієнтується на студентів, то треба врахувати, що у наших ВНЗ люблять давати студентам усілякі античні компілятори типу BC3.1.

    1. цікаво, чому ВНЗ дають ці “античні” компілятори, якщо visual express у вільному доступі

      1. не чув, щоб вузи нам щось нав'язували старе! звичайно, хочеш у Code::Пишуть блоки, хоч у Visual Studio, не пам'ятаю коли під Борланд що писав, але пам'ятають руки старі часи!!!
        смішно згадати але починав з Dev-C++ айдішки) ех був час!

    2. Володимир, по-перше цей сайт для початківців, так що не варто суворо судити все, що тут написано! Як мені здається, то новачкам тут буде саме те! Не треба тут говорити, як кому вчитися, я думаю що багато хто розбереться. По-друге, якщо у Вас є зауваження щодо тексту, або виправлення помилок – то Орфус Вам на допомогу, не треба засмічувати чат!
      По-третє, автор сайту краще знає як викладати код, не треба тут нав'язувати свою думку, як треба що робити, це ж обучаловка для майбутніх тру програмістів, а не для профі, так що “Ініціалізація з фігурними дужками – це тонкість, яка, ІМХО, новачкам взагалі не потрібна особа”, вважаю цей текст дурним, адже це тонкощі мови (!), і тут все важливо, потрібно все знати, як і що пишеться, що б у майбутньому в чужому коді не витріщати очі “а це що таке і чому”!!!

      Всього доброго! Хай прибуде Буст у Вами!

  6. Так народ, не заважайте Адміну працювати!!!_) Він і сам знає який матеріал викладати… приймаються лише слушні поради та зауваження! Не забувайте, бачите помилку, “бийте” в Орфус, Ctrl + Enter Вам на допомогу!!!

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *