Учебники

2) Массивы в C ++

Что такое массив?

Массив — это структура данных, в которой последовательно хранится элемент одного и того же типа данных. Массив C ++ имеет фиксированный размер.

Вы можете увидеть массив как набор переменных схожего типа данных. Вместо того, чтобы объявлять каждую переменную и присваивать ей значение по отдельности, вы можете объявить одну переменную (массив) и добавить к ней значения различных переменных. Каждое добавленное значение в массив идентифицируется индексом.

В этом уроке C ++ вы узнаете:

Зачем нам нужны массивы?

Массивы очень важны на любом языке программирования. Они предоставляют более удобный способ хранения переменных или набора данных схожего типа данных вместо того, чтобы хранить их отдельно. Каждое значение массива будет доступно отдельно.

Объявить массив в C ++

Объявление массива в C ++ включает указание типа, а также количества элементов, которые будут сохранены в массиве. Синтаксис:

type array-Name [ array-Size ];

Правила объявления одномерного массива в C ++.

  • Тип: тип — это тип элементов, которые должны храниться в массиве, и это должен быть допустимый тип данных C ++.
  • Array-Name: имя- массива — это имя, которое будет присвоено массиву.
  • Размер массива : Размер массива — это количество элементов, которые будут сохранены в массиве. Это должно быть целое число и больше 0.

Например, вы можете создать массив с именем age и сохранить возраст 5 учеников следующим образом:

int age[5];

В массиве age будут храниться 5 целых чисел, представляющих возраст разных учеников.

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

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

В случае массива age первый элемент будет сохранен с индексом 0, а последний элемент будет сохранен с индексом 4.

Давайте используем массив age, чтобы продемонстрировать, как можно выполнить инициализацию массива:

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 будет 4- м элементом массива.

Типы массивов

Существует два типа массивов C ++:

  • Одномерный массив
  • Многомерный массив
  • Указатель на массив

Одномерный массив

Это массив, в котором элементы данных расположены линейно только в одном измерении. Обычно его называют одномерным массивом. Синтаксис:

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

Например:

#include <iostream>
using namespace std;

int main()
{
	int age[5] = { 19, 18, 21, 20, 17 };
	for (int x = 0; x < 5; x++)
	{
		cout <<age[x]<<"\n";
	}
}

Вывод:

Вот скриншот кода:

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

  1. Включение заголовочного файла iostream в наш код. Это позволит нам читать и писать в консоль.
  2. Включая пространство имен std, чтобы использовать его классы и функции без его вызова.
  3. Вызов функции main (), внутри которой должна быть добавлена ​​логика программы.
  4. Начало тела функции main ().
  5. Объявление массива с именем age для хранения 5 целых чисел. 5 целых чисел также были инициализированы.
  6. Создайте целочисленную переменную x, используя цикл for.
  7. Начало тела цикла for.
  8. Используя переменную цикла x для перебора значений возраста массива и вывода их на консоль. \ N — это символ новой строки, который печатается в новой строке после каждой итерации.
  9. Конец тела для цикла.
  10. Конец тела функции main ().

Многомерный массив

Это массив, в котором элементы данных расположены для формирования массива массивов. Многомерный массив может иметь любое количество измерений, но двумерные и трехмерные массивы являются общими. Синтаксис:

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

Имя-массива — это имя массива, который будет иметь n измерений. Например:

Двумерный массив

2D-массив хранит данные в виде списка с 1-D массивом. Это матрица со строками и столбцами. Чтобы объявить 2D-массив, используйте следующий синтаксис:

type array-Name [ x ][ y ];

Тип должен быть допустимым типом данных C ++. Смотрите двумерный массив в виде таблицы, где x обозначает количество строк, а y обозначает количество столбцов. Это означает, что вы идентифицируете каждый элемент в двумерном массиве, используя форму a [x] [y], где x — номер строки, а y — количество столбцов, к которым принадлежит элемент.

Вот пример того, как инициализировать двумерный массив:

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

In above example, we have a 2D array which can be seen as a 2×3 matrix. There are 2 rows and 3 columns. The element 0 can be accessed as a[0][1] because it is located at the intersection of row indexed 0 and column indexed 1. The element 3 can be accessed as a[1][2] because it is located at the intersection of row indexed 1 and column indexed 2.

Note that we simply added curly braces to differentiate the different rows of elements. The initialization could also have been done as follows:

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

The following C++ example demonstrates how to initialize and traverse a 2D array:

#include <iostream>
using namespace std;
int main() 
{
	// a 2x3 array
	int a[3][2] = { {0, 2}, {1, 4}, {3, 7} };

	// traverse array elements

	for (int i=0; i<3; i++)
		for (int j=0; j<2; j++) 
		
		{
			cout << "a[" <<i<< "][" <<j<< "]: ";
			cout << a[i][j] << endl;
		}
	return 0;
}

Output:

Here is a screenshot of the above code:

Code Explanation:

  1. Including the iostream header file in our code. It will allow us to read from and write to the console.
  2. Including the std namespace so as to use its classes and functions without calling it.
  3. Calling the main() function within which code should be added.
  4. Start of the body of the main() function.
  5. A comment. The C++ compiler will skip this.
  6. Declaring a 2D array of 3 rows and 2 columns. Items have also been added to the array.
  7. A comment. The C++ compiler will skip this.
  8. Creating a variable i using a for a loop. This variable will iterate over the row indexes of the array.
  9. Создание переменной j с использованием цикла for. Эта переменная будет перебирать индексы столбцов массива.
  10. Начало тела петель.
  11. Выведите значения переменных i и j на консоли в квадратных скобках на консоли.
  12. Выведите значение, хранящееся в индексе [i] [j] массива a.
  13. Конец тела петли.
  14. Функция main () должна возвращать целочисленное значение, если программа работает нормально.
  15. Конец тела функции main ().

Трехмерный массив

3D-массив — это массив массивов. Каждый элемент в трехмерном массиве идентифицируется набором из 3 индексов. Чтобы получить доступ к элементам трехмерного массива, мы используем три цикла for. Например:

#include<iostream>
using 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. Начало тела функции main ().
  5. Объявление трехмерного массива с именем размером 2x3x2. Значения массива также были инициализированы.
  6. Доступ к элементу, хранящемуся в индексе [0] [1] [0] массива, и печать его на консоли.
  7. Доступ к элементу, хранящемуся в индексе [0] [1] [1] массива, и печать его на консоли.
  8. Конец тела функции main ().

Указатель на массив

Указатель — это переменная, которая содержит адрес. Помимо использования указателя для хранения адреса переменной, мы можем использовать его для хранения адреса ячейки массива. Имя массива постоянно указывает на его первый элемент. Рассмотрим декларацию, приведенную ниже:

int age[5];

Age — указатель на $ age [0], адрес первого элемента массива с именем age. Рассмотрим следующий пример:

#include <iostream>
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. Начало тела функции main ().
  5. Объявление переменной-указателя с именем * john.
  6. Объявление целочисленного массива с именем age для хранения 5 целых чисел. Значения целых чисел также были инициализированы.
  7. Присвоение переменной john значения адреса элемента, хранящегося в первом индексе массива age.
  8. Печать значения переменной john, которая является адресом элемента, хранящегося в первом индексе возраста массива.
  9. Печать первого значения, хранящегося в массиве age.
  10. Конец тела функции main ().

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

#include <iostream>
using namespace std;

int main() {
	// an array of 5 elements.
	int age[5] = { 19, 18, 21, 20, 17 };
	int *p;

	p = age;

	// output array values

	cout << "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 значение адреса первого элемента массива age.
  8. Комментарий. Компилятор C ++ пропустит это.
  9. Распечатайте текст на консоли.
  10. Создайте целое число x, используя цикл. {Отмечает начало тела цикла for.
  11. Распечатайте значения x в сочетании с другим текстом на консоли.
  12. Распечатайте значения * (p + x) на консоли.
  13. Конец тела для цикла.
  14. Распечатайте текст на консоли.
  15. Создайте переменную x, используя цикл. {Отмечает начало тела цикла for.
  16. Распечатайте значения x от 0 до 4 вместе с другим текстом.
  17. Распечатайте значения * (возраст + х).
  18. Конец тела цикла for.
  19. Возвращаемое значение, если программа работает успешно.
  20. Конец тела функции main ().

Доступ к значениям массива

Доступ к элементам массива осуществляется с использованием их соответствующих индексов. Индекс элемента, к которому осуществляется доступ, добавляется в квадратных скобках [] сразу после имени массива. Например:

int john = age[2];

В приведенном выше примере мы просто заявляем, что возраст Джона хранится в индексе 2 массива с именем age. Это означает, что возраст Джона является третьим значением в возрасте массива. Вот полный пример C ++, который показывает, как получить доступ и распечатать это значение:

#include<iostream>

using namespace std;

int main()
{

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

	int john = age[2];

	cout << "The age of John is:"<<john;
}

Вывод:

Вот скриншот кода:

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

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

Преимущества массива в C ++

Вот преимущества и преимущества использования Array в C ++:

  • Элементы массива могут быть легко пройдены.
  • Легко манипулировать массивом данных.
  • Элементы массива могут быть доступны в случайном порядке.
  • Массивы облегчают оптимизацию кода; следовательно, мы можем выполнять большую работу, используя меньше кода.
  • Легко сортировать массив данных.

Недостатки массива в C ++

  • Массив имеет фиксированный размер; следовательно, мы не можем добавлять новые элементы к нему после инициализации.
  • Выделение большего объема памяти, чем требуется, приводит к неэффективному использованию памяти, а меньшее выделение памяти может создать проблему.
  • Количество элементов, которые должны храниться в массиве, должно быть известно заранее.

Резюме

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