Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_ekzamenu.docx
Скачиваний:
17
Добавлен:
01.07.2025
Размер:
54.23 Кб
Скачать

Структурированные типы данных. Массивы

Массив – это структура данных с фиксированным и упорядоченным набором однотипных элементов (компонентов).

Описать массив в C++ можно так:

Тип имя_массива [размерность];

Размерность — это количество элементов в массиве. Например:

float a[20]; // описание массива из 20 вещественных чисел

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

const int n=15; // определенна целая положительная константа

double B[n]; // описан массив из 15 вещественных чисел

Доступ к какому-либо из элементов массива осуществляется по имени и номеру (индексу) этого элемента. Количество индексов определяет мерность массива, так например чаще всего встречаются одномерные (вектора) и двумерные массивы (матрицы). 

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

имя_массива [индекс];

Например: int x[10]; // описание массива из 10 целых чисел, нумерация от 0 до 9

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

имя_массива [строка] [столец];

1

2

3

4

5

6

7

8

Например: int x[4][2];

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

тип имя_переменной [размерность] = {элемент_0, элемент_1, …};

Например:

float a[6] = {1.23, 2.4, 5.6, 6.1};

//формируется массив из шести вещественных чисел,

//значения элементам присваиваются по порядку,

//элементы, значения которых не указаны обнуляются:

//a[0]=1.23, a[1]=2.4, a[2]=5.6, a[3]=6.1, a[4]=0, a[5]=0

Ввод и вывод элементов массива осуществляется поэлементно.

Структурированные типы данных. Динамические массивы.

Динамический массив — массив переменной длины, память под который выделяется в процессе выполнения программы.

Реализация простого динамического массива основывается на следующих манипуляциях. Выделяется массив фиксированного размера. Он делиться на две части: первая хранит элементы динамического массива, а вторая является резервным пространством, которое, по мере необходимости, может быть задействовано. Такая организация, позволяет добавлять элементы в конец динамического массива, а также удалять их, причем делать это за константное время. Если массив заполнен полностью (заполнены обе части исходного массива),  то говорят, что исчерпан физический размер; количество элементов, используемых для динамического содержимого массива, называют логическим размером.

Для работы с дин.мас-и имеются встроенные операторы или функции.

операторы new и delete

Пример создания и очистки целочисленного динамического массива, состоящего из 10 элементов:

float *A=new int[10];         //создание

// Выделено столько памяти, сколько необходимо для хранения 10 величин типа int.

delete []A;                            //удаление

функции malloccallocrealloc и free;

Пример создания и очистки целочисленного динамического массива, состоящего из 10 элементов:

int *A = malloc(sizeof(int) *10);          //создание

free(A);                                               //удаление

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

Фактически, в переменной A хранится адрес нулевого элемента динамического массива. Следовательно, адрес следующего, первого элемента, в выделенном участке памяти - A+1, а A+i является адресом i-го элемента. Обращение к i-му элементу динамического массива можно выполнить, как обычно A[i], или другим способом *(A +i). Важно следить за тем, чтобы не выйти за границы выделенного участка памяти.

Обычный статический массив выигрывает у динамического в быстродействии, что компенсируется расширенным функционалом последнего.