Масиви в C ++ - Декларирайте - Инициализиране - Посока към примери за масив

Съдържание:

Anonim

Какво е масив?

Масивът е структура от данни, която последователно съхранява елемент от същия тип данни. Масивът C ++ има фиксиран размер.

Можете да видите масив като колекция от променливи от подобен тип данни. Вместо да декларирате всяка променлива и да й присвоявате стойност поотделно, можете да декларирате една променлива (масива) и да добавите стойностите на различните променливи към нея. Всяка добавена стойност към масива се идентифицира с индекс.

В този урок за C ++ ще научите:

  • Какво е масив?
  • Защо се нуждаем от масиви?
  • Декларирайте масив в C ++
  • Инициализация на масива
  • Видове масиви
    • Едномерен масив
    • Многоизмерен масив
    • Двуизмерен масив
    • Триизмерен масив
    • Показалец към масив
  • Достъп до стойностите на масив
  • Предимства на масив в C ++
  • Недостатъци на масив в C ++

Защо се нуждаем от масиви?

Масивите са много важни във всеки език за програмиране. Те осигуряват по-удобен начин за съхраняване на променливи или събиране на данни от подобен тип данни заедно, вместо да се съхраняват поотделно. Всяка стойност на масива ще бъде достъпна поотделно.

Декларирайте масив в C ++

Декларацията за масив в C ++ включва посочване на типа, както и броя на елементите, които трябва да се съхраняват от масива. Синтаксис:

type array-Name [ array-Size ];

Правила за деклариране на едноизмерен масив в C ++.

  • Тип: Типът е типът елементи, които трябва да се съхраняват в масива, и трябва да е валиден тип данни на C ++.
  • Array-Name: Array-Name е името, което трябва да бъде присвоено на масива.
  • Array-Size: Array-Size е броят на елементите, които трябва да се съхраняват в масива. Трябва да е цяло число и по-голямо от 0.

Например можете да създадете масив с име age и да съхранявате възрастта на 5 ученици, както следва:

int age[5];

Възрастта на масива ще съхранява 5 цели числа, представящи възрастта на различните ученици.

Инициализация на масива

Инициализацията на масива е процес на присвояване / съхраняване на елементи към масив. Инициализацията може да се извърши в един израз или един по един. Обърнете внимание, че първият елемент в масива се съхранява с индекс 0, докато последният елемент се съхранява с индекс n-1, където n е общият брой елементи в масива.

В случай на възрастов масив, първият елемент ще се съхранява с индекс 0, докато последният елемент ще се съхранява с индекс 4.

Нека използваме възрастовия масив, за да покажем как може да се направи инициализация на масив:

int age[5] = {19, 18, 21, 20, 17};

Общият брой елементи в {} не може да надвишава стойността, посочена в []. Елементът 19 е с индекс 0, 18 с индекс 1, 21 с индекс 2, 20 с индекс 3 и 17 с индекс 4. Ако не посочите броя на елементите, които трябва да се съхраняват в масива в рамките на [], масивът ще бъде достатъчно голям, за да събере елементите, добавени в {}. Например:

int age[] = {19, 18, 21, 20, 17};

Горното изявление ще създаде точно същия масив като предишния. Можете също да присвоите един елемент на масив, използвайки неговия индекс. Например:

age[3] = 20;

Горното изявление ще съхранява стойността 20 в индекс 3 на масива с име age. Това означава, че 20 ще бъде четвъртият елемент от масива.

Видове масиви

Има два типа масиви C ++:

  • Едномерен масив
  • Многоизмерен масив
  • Показалец към масив

Едномерен масив

Това е масив, в който елементите от данни са подредени линейно само в едно измерение. Обикновено се нарича 1-D масив. Синтаксис:

datatype array-name[size];
  • Името на масива е името на масива.
  • Размерът е броят на елементите, които трябва да се съхраняват в масива.

Например:

#include using namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };for (int x = 0; x < 5; x++){cout <

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main (), в която трябва да се добави логиката на програмата.
  4. Начало на тялото на основната () функция.
  5. Деклариране на масив с име age за съхраняване на 5 цели числа. 5-те цели числа също са инициализирани.
  6. Създайте целочислена променлива x, използвайки цикъл for.
  7. Началото на тялото на цикъла for.
  8. Използвайки променливата на цикъла x, за да прегледате стойностите на възрастта на масива и да ги отпечатате на конзолата. Символът "\ n" е нов ред и се отпечатва в нов ред след всяка итерация.
  9. Край на тялото на цикъла за.
  10. Край на тялото на основната () функция.

Многоизмерен масив

Това е масив, в който елементите от данни са подредени така, че да образуват масив от масиви. Многомерният масив може да има произволен брой измерения, но двуизмерните и триизмерните масиви са често срещани. Синтаксис:

datatype array-name[d1][d2][d3]… [dn];

Името на масива е името на масива, който ще има n размери. Например:

Двуизмерен масив

2D масив съхранява данни в списък с 1-D масив. Това е матрица с редове и колони. За да декларирате 2D масив, използвайте следния синтаксис:

type array-Name [ x ][ y ];

Типът трябва да е валиден тип данни на C ++. Вижте 2D масив като таблица, където x означава броя на редовете, докато y означава броя на колоните. Това означава, че идентифицирате всеки елемент в 2D масив, използвайки формата a [x] [y], където x е броят на реда, а y броят на колоните, в които елементът принадлежи.

Ето пример за това как да инициализираме 2D масив:

int a[2][3] = {{0, 2, 1} , /* row at index 0 */{4, 3, 7} , /* row at index 1 */};

В горния пример имаме 2D масив, който може да се разглежда като матрица 2x3. Има 2 реда и 3 колони. Елементът 0 може да бъде достъпен като [0] [1], тъй като се намира в пресечната точка на ред с индекс 0 и индекс с колона 1. Елемент 3 може да бъде достъпен като [1] [2], тъй като се намира в пресичане на ред с индекс 1 и колона с индекс 2.

Имайте предвид, че ние просто добавихме къдрави скоби, за да разграничим различните редове от елементи. Инициализацията може да бъде направена както следва:

int a[2][3] = {0, 2, 1, 4, 3, 7};};

Следващият пример за C ++ демонстрира как да се инициализира и пресече 2D масив:

#include using namespace std;int main(){// a 2x3 arrayint a[3][2] = { {0, 2}, {1, 4}, {3, 7} };// traverse array elementsfor (int i=0; i<3; i++)for (int j=0; j<2; j++){cout << "a[" <

Изход:

Ето екранна снимка на горния код:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main (), в която трябва да се добави код.
  4. Начало на тялото на основната () функция.
  5. Коментар. Компилаторът на C ++ ще пропусне това.
  6. Деклариране на 2D масив от 3 реда и 2 колони. Елементите също са добавени към масива.
  7. Коментар. Компилаторът на C ++ ще пропусне това.
  8. Създаване на променлива i с помощта на за цикъл. Тази променлива ще се повтори над редовите индекси на масива.
  9. Създаване на променлива j с помощта на a за цикъл. Тази променлива ще се повтори над индексите на колоните на масива.
  10. Начало на тялото на бримките.
  11. Отпечатайте стойностите на променливи i и j на конзолата в квадратни скоби на конзолата.
  12. Отпечатайте стойността, съхранена в индекс [i] [j] на масива a.
  13. Край на тялото на бримките.
  14. Функцията main () трябва да върне цяло число, ако програмата работи добре.
  15. Край на тялото на основната () функция.

Триизмерен масив

3D масивът е масив от масиви. Всеки елемент в 3D масив се идентифицира от набор от 3 индекса. За достъп до елементите на 3D масив използваме три за цикли. Например:

#includeusing namespace std;void main(){int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}};cout << "a[0][1][0] = " << a[0][1][0] << "\n";cout << "a[0][1][1] = " << a[0][1][1] << "\n";}

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main (), в която трябва да се добави логиката на програмата.
  4. Начало на тялото на основната () функция.
  5. Деклариране на 3D масив с име 2x с размери 2x3x2. Стойностите на масива също са инициализирани.
  6. Достъп до елемента, съхраняван в индекс [0] [1] [0] на масива, и отпечатването му на конзолата.
  7. Достъп до елемента, съхраняван с индекс [0] [1] [1] на масива, и отпечатването му на конзолата.
  8. Край на тялото на основната () функция.

Показалец към масив

Указателят е променлива, която съдържа адрес. Освен използването на указател за съхраняване на адреса на променлива, ние можем да го използваме за съхраняване на адреса на клетка на масив. Името на масив постоянно сочи към първия му елемент. Помислете за декларацията, дадена по-долу:

int age[5];

Възрастта е указател на $ age [0], адресът на първия елемент на масив с име age. Помислете за следния пример:

#include using namespace std;int main(){int *john;int age[5] = { 19, 18, 21, 20, 17 };john = age;cout << john << "\n";cout << *john;}

Изход:

Обърнете внимание, че първата стойност на горния изход може да върне различна стойност в зависимост от адреса, присвоен на първия елемент от масива в паметта на вашия компютър.

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main (), в която трябва да се добави логиката на програмата.
  4. Начало на тялото на основната () функция.
  5. Деклариране на променлива на указател с име * john.
  6. Деклариране на целочислен масив с име age за съхраняване на 5 цели числа. Стойностите на целите числа също са инициализирани.
  7. Присвояване на променливата john на стойността на адреса на елемента, съхраняван в първия индекс на възрастта на масива.
  8. Отпечатва стойността на променлива john, която е адресът на елемента, съхраняван в първия индекс на възрастта на масива.
  9. Отпечатване на първата стойност, съхранена във възрастта на масива.
  10. Край на тялото на основната () функция.

Имената на масивите могат да се използват като постоянни указатели и обратно е също вярно. Това означава, че можете да получите достъп до стойността, съхранена в индекс 3 на възрастта на масива с * (възраст + 3). Например:

#include using namespace std;int main() {// an array of 5 elements.int age[5] = { 19, 18, 21, 20, 17 };int *p;p = age;// output array valuescout << "Using pointer: " << endl;for (int x=0; x<5; x++) {cout << "*(p + " << x << ") : ";cout << *(p + x) << endl;}cout << "Using age as address: " << endl;for (int x = 0; x < 5; x++) {cout << "*(age + " << x << ") : ";cout << *(age + x) << endl;}return 0;}

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main () и начало на тялото на функцията main ().
  4. Коментар. Компилаторът на C ++ ще пропусне това.
  5. Деклариране на масив с име age за съхраняване на 5 цели числа.
  6. Създаване на целочислен указател p.
  7. Присвояване на p на стойността на адреса на първия елемент от възрастта на масива.
  8. Коментар. Компилаторът на C ++ ще пропусне това.
  9. Отпечатайте малко текст на конзолата.
  10. Създайте цяло число x, използвайки a за цикъл. {Маркира началото на тялото на цикъла за.
  11. Отпечатайте стойностите на x, комбинирани с друг текст на конзолата.
  12. Отпечатайте стойностите на * (p + x) на конзолата.
  13. Край на тялото на цикъла за.
  14. Отпечатайте малко текст на конзолата.
  15. Създайте променлива x, използвайки a за цикъл. {Отбелязва началото на тялото на цикъла for.
  16. Отпечатайте стойностите на x от 0 до 4 заедно с друг текст.
  17. Отпечатайте стойностите на * (възраст + x).
  18. Край на тялото на цикъла for.
  19. Връща стойност, ако програмата работи успешно.
  20. Край на тялото на основната () функция.

Достъп до стойностите на масив

Достъпът до елементите на масив се извършва чрез съответните им индекси. Индексът на елемента, който ще бъде достъпен, се добавя в квадратни скоби [] непосредствено след името на масива. Например:

int john = age[2];

В горния пример ние просто заявяваме, че възрастта на Джон се съхранява в индекс 2 на масива с име age. Това означава, че възрастта на Джон е третата стойност в възрастта на масива. Ето пълен пример за C ++, който показва как да получите достъп и да разпечатате тази стойност:

#includeusing namespace std;int main(){int age[5] = { 19, 18, 21, 20, 17 };int john = age[2];cout << "The age of John is:"<

Изход:

Ето екранна снимка на кода:

Обяснение на кода:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем на конзолата.
  2. Включително std пространството от имена, за да се използват класовете и функциите му, без да го извиквате.
  3. Извикване на функцията main (), в която трябва да се добави код.
  4. Старт на тяло на основната () функция.
  5. Деклариране на масив с име age за съхраняване на 5 цели числа.
  6. Достъп до стойността, съхранявана в индекс 2 на възрастта на масива, и съхраняване на стойността й в променлива с име john
  7. Отпечатване на стойността на променлива john на конзолата заедно с друг текст.

Предимства на масив в C ++

Ето плюсовете / ползите от използването на Array в C ++:

  • Елементите на масива могат да бъдат прехвърляни лесно.
  • Лесно за манипулиране на масивни данни.
  • Елементите на масива могат да бъдат достъпни произволно.
  • Масивите улесняват оптимизирането на кода; следователно можем да извършим много работа, като използваме по-малко код.
  • Лесно сортиране на масивни данни.

Недостатъци на масив в C ++

  • Масивът има фиксиран размер; следователно не можем да добавяме нови елементи към него след инициализация.
  • Разпределянето на повече памет от изискването води до загуба на място в паметта и по-малкото разпределение на паметта може да създаде проблем.
  • Броят на елементите, които трябва да се съхраняват в масив, трябва да бъде известен предварително.

Обобщение

  • Масивът е структура от данни, която съхранява елементи от същия тип данни.
  • Елементите на масива се съхраняват последователно.
  • Елементите на масива се обозначават с помощта на съответните им индекси. Първият елемент е с индекс 0, докато последният елемент е с индекс n-1, където е общият брой на елементите на масива.
  • Декларирането на масив включва дефиниране на типовете данни на елементите на масива, както и броя на елементите, които трябва да се съхраняват в масива.
  • Едномерният масив съхранява елементи последователно.
  • Двуизмерен масив съхранява елементи в редове и колони.
  • Триизмерен масив е масив от масиви.
  • Елементите могат да се добавят към масив, използвайки техните индекси.
  • Елементите на масива са достъпни с помощта на техните индекси.
  • Многомерният масив има повече от едно измерение.
  • Името на масива сочи към първия му елемент.
  • Масивите имат фиксиран размер, което означава, че нови елементи не могат да се добавят към масива след инициализирането му.