В този урок ще се научим да работим с масиви. Ще се научим да декларираме, инициализираме и достъпваме елементи от масив в програмирането на C ++ с помощта на примери.
В C ++ масивът е променлива, която може да съхранява множество стойности от един и същи тип. Например,
Да предположим, че един клас има 27 ученика и трябва да съхраним оценките на всички тях. Вместо да създаваме 27 отделни променливи, можем просто да създадем масив:
double grade(27);
Тук степента е масив, който може да побере максимум 27 елемента от double
тип.
В C ++ размерът и видът на масивите не могат да се променят след декларирането му.
Декларация за масив C ++
dataType arrayName(arraySize);
Например,
int x(6);
Тук,
int
- тип елемент, който да се съхранява- x - име на масива
6
- размер на масива
Достъп до елементи в масив C ++
В C ++ всеки елемент в масив е свързан с число. Числото е известно като индекс на масив. Можем да получим достъп до елементи от масив, като използваме тези индекси.
// syntax to access array elements array(index);
Помислете за масива x, който видяхме по-горе.
Елементи на масив в C ++Малко неща за запомняне:
- Индексите на масива започват с
0
. Значение x (0) е първият елемент, съхраняван в индекс0
. - Ако размерът на масив е
n
, последният елемент се съхранява в индекс(n-1)
. В този пример x (5) е последният елемент. - Елементите на масив имат последователни адреси. Да предположим например, че началният адрес на
x(0)
е 2120d. След това адресът на следващия елементx(1)
ще бъде 2124d, адресът наx(2)
ще бъде 2128d и т.н.
Тук размерът на всеки елемент се увеличава с 4. Това е така, защото размерът наint
е 4 байта.
Инициализация на масив C ++
В C ++ е възможно да се инициализира масив по време на декларация. Например,
// declare and initialize and array int x(6) = (19, 10, 8, 17, 9, 15);
Елементи на масив C ++ и техните данни
Друг метод за инициализиране на масив по време на декларация:
// declare and initialize an array int x() = (19, 10, 8, 17, 9, 15);
Тук не сме споменали размера на масива. В такива случаи компилаторът автоматично изчислява размера.
C ++ масив с празни членове
В C ++, ако масивът има размер n
, можем да съхраняваме до n брой елементи в масива. Какво обаче ще се случи, ако съхраним по-малко от n броя елементи.
Например,
// store only 3 elements in the array int x(6) = (19, 10, 8);
Тук масивът x има размер 6
. Ние обаче сме го инициализирали само с 3 елемента.
В такива случаи компилаторът присвоява произволни стойности на останалите места. Често тази произволна стойност е просто 0
.
Как да вмъкнете и отпечатате елементи на масив?
int mark(5) = (19, 10, 8, 17, 9) // change 4th element to 9 mark(3) = 9; // take input from the user // store the value at third position cin>> mark(2); // take input from the user // insert at ith position cin>> mark(i-1); // print first element of the array cout <> mark(i-1);
Пример 1: Показване на масивни елементи
#include using namespace std; int main() ( int numbers(5) = (7, 5, 6, 12, 35); cout << "The numbers are: "; // Printing array elements // using range based for loop for (const int &n : numbers) ( cout << n << " "; ) cout << "The numbers are: "; // Printing array elements // using traditional for loop for (int i = 0; i < 5; ++i) ( cout << numbers(i) << " "; ) return 0; )
Изход
Числата са: 7 5 6 12 35 Числата са: 7 5 6 12 35
Тук използвахме for
цикъл за итерация от i = 0
до i = 4
. Във всяка итерация сме отпечатали numbers(i)
.
Отново използвахме диапазон, базиран на цикъл, за да отпечатаме елементите на масива. За да научите повече за този цикъл, проверете C ++ Ranged за Loop.
Забележка: В нашия цикъл, базиран на диапазон, ние използвахме кода const int &n
вместо int n
като декларация за диапазон. Въпреки това, това const int &n
е по-предпочитано, защото:
- Използването
int n
просто копира елементите на масива към променливата n по време на всяка итерация. Това не е ефективно за паметта.
& n обаче използва адреса на паметта на елементите на масива за достъп до техните данни, без да ги копира в нова променлива. Това е ефективно за паметта. - Ние просто отпечатваме елементите на масива, а не ги модифицираме. Следователно използваме
const
, за да не сменим случайно стойностите на масива.
Пример 2: Вземете входове от потребителя и ги съхранявайте в масив
#include using namespace std; int main() ( int numbers(5); cout << "Enter 5 numbers: " << endl; // store input from user to array for (int i = 0; i > numbers(i); ) cout << "The numbers are: "; // print array elements for (int n = 0; n < 5; ++n) ( cout << numbers(n) << " "; ) return 0; )
Изход
Enter 5 numbers: 11 12 13 14 15 The numbers are: 11 12 13 14 15
Once again, we have used a for
loop to iterate from i = 0
to i = 4
. In each iteration, we took an input from the user and stored it in numbers(i)
.
Then, we used another for
loop to print all the array elements.
Example 3: Display Sum and Average of Array Elements Using for Loop
#include using namespace std; int main() ( // initialize an array without specifying size double numbers() = (7, 5, 6, 12, 35, 27); double sum = 0; double count = 0; double average; cout << "The numbers are: "; // print array elements // use of range-based for loop for (const double &n : numbers) ( cout << n << " "; // calculate the sum sum += n; // count the no. of array elements ++count; ) // print the sum cout << "Their Sum = " << sum << endl; // find the average average = sum / count; cout << "Their Average = " << average << endl; return 0; )
Output
The numbers are: 7 5 6 12 35 27 Their Sum = 92 Their Average = 15.3333
In this program:
- We have initialized a double array named numbers but without specifying its size. We also declared three double variables sum, count, and average.
Here,sum =0
andcount = 0
. - Then we used a range based
for
loop to print the array elements. In each iteration of the loop, we add the current array element to sum. - Също така увеличаваме стойността на count чрез
1
всяка итерация, за да можем да получим размера на масива до края на цикъла for. - След като отпечатаме всички елементи, отпечатваме сумата и средната стойност на всички числа. Средната стойност на числата се дава от
average = sum / count;
Забележка: Използвахме for
цикъла с диапазон вместо нормален for
цикъл.
Нормалният for
цикъл изисква от нас да зададем броя итерации, който се дава от размера на масива.
Но for
веригата с обхват не изисква такива спецификации.
C ++ масив извън границите
Ако декларираме масив с размер 10, тогава масивът ще съдържа елементи от индекс 0 до 9.
Ако обаче се опитаме да осъществим достъп до елемента с индекс 10 или повече от 10, това ще доведе до недефинирано поведение.