Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная_2_курс_2013.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
396.8 Кб
Скачать

Задание 2. Массивы – члены класса

Цель задания – получение практических навыков создания и использования классов в случае, когда членами класса являются мссивы.

Основные понятия

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

Одномерный массив представляет собой совокупность однотипных элементов, имеющих одно имя (имя массива), при этом доступ к каждому элементу массива осуществляется по имени массива и индексу элемента. Индекс первого элемента всегда 0, далее следуют 1, 2, и т.д.

int b[10]; // объявление массива b из 10 целых чисел

int a[5] = {1, 2 ,3, 4, 5}; // объявление и иинициализация массива

int c = a[2]; // c = 3

for(int i = 0; i < 5; i++) // доступ к элементам массиваa удобнее

cout<<a[i]<<’ ‘; // всего осуществлять, пользуясь циклом for

// или *(a+i), т. к. имя массива является указателем на начало массива

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

int a[4]; int *pa; // указатель pa на тип int

pa = a; // pa присваивается адрес массива a

for(int i = 0; i < 4; i++)

cout<<*pa++<<’ ‘; // доступ к элементам массива

// или cout<<*(pa+i); или cout<<pa[i];

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

Чаще всего одномерные массивы используются для создания символьных строк. В С++ строка определяется как массив значений типа char, который завершается нулевым символом (‘\0’). Доступ к элементам строки осуществляется так же, как доступ к элементам любого массива.

char[] = “123456”; // инициализация строки

gets(str); // ввод строки

cout<<"stroka== "<<str<<endl; // вывод строки

for(i = 0; str[i]; i++);

cout<<str[i]; // доступ к элементам строки

Двумерный массив (матрица) – представляет собой массив одномерных массивов. Каждый элемент массива имеет два индекса – номер строки и номер столбца, которые указываются в отдельных квадратных скобках. Например:

int b[3][4]; // объявление двумерного массива

int a[2][2] = {{1, 2}, // явная инициализация 0-й строки

{3, 4}}; // явная инициализация 1-й строки

for(int i = 0; i < 3; i++) // запонение и обработку матриц производят,

for(int j = 0; j < 4; j++) // пользуясь вложенными циклами

cout<<a[i][j]<<’ ‘; // доступ к элементам массива или *(a[i]+j)

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

Динамические массивы – это массивы, для которых выделяется память и определяется размер во время выполнения программы. Создаётся динамический массив с помощью операции new и указателя. После завершения использования массива выделенную под массив память освобождают с помощью операции delete. Явно инициализировать динамические массивы нельзя.

Создание одномерного динамического массива:

int n; cin>>n; // ввод размерности массива n

int *p; // объявление указателя p на целый тип

p= new int[n]; // выделение памяти для массива

delete [] p; // удаление выделенной памяти

for(int i = 0; i < 4; i++)

cout<<p[i]<<’ ‘; // доступ к элементам массива с индексом i

// или *(p+i)

Если с помощью операции new невозможно выделить требуемый объём памяти, то операция new возвратит нулевой указатель. ого массива с индексом i допускаются выражения.

Создание динамической строки :

char *pstr; cin>> len;

pstr = new char[len];

delete [] pstr; // удаление строки

Создание двумерного динамического массива из n строк и m столбцов:

int n, m; int ** p; // указатель p на массив указателей

cin>>n; cin>>m;

p = new *int[n]; // память под массив указателей на строки

for(int i; i < n; i++)

p [i] = new int[m]; // выделение памяти для каждой строки

for(int i = 0; i < 3; i++) // доступа к элементам массива

for(int j = 0; j < 4; j++)

cout<< p [i][j]<<’ ‘ // или *( p [i] + j) или *(*( p + i) + j)

Удаление двумерного динамического массива происходит в несколько этапов:

for(int i = 0; i < n; i++) // удаление одномерных массивов (строк)

delete [] p[i];

delete [] p; // удаление массива указателей на строки

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