Часто возникает необходимость хранить не одну переменную, а набор однотипных переменных. Например, список учащихся класса – это набор данных строкового типа, координаты вершин многоугольника или коэффициенты многочлена – это набор числовых данных. Для хранения наборов данных используются структуры данных. Основная структура данных – это массив.
Массив — это структура однотипных данных, занимающих непрерывную область памяти. Массив имеет размер — количество элементов в нем. Каждый элемент массива имеет свой номер (также называемый индексом), обращение к элементу массива осуществляется путем указания его индекса. В языке C++ элементы нумеруются начиная с 0, поэтому последний элемент массива имеет номер на 1 меньше размера массива.
Массив в языке C задается следующим образом:
тип_элементов идентификатор[размер];
где тип_элементов — произвольный тип данных языка C++,
который будут иметь элементы массива, например, int
, double
и т.д.; идентификатор — имя массива, размер — число
элементов в нем.
По стандарту языков C и C++, размер массива должен быть константой,
определенной на момент компиляции программы, то есть можно определить
массив в виде int A[10 + 5]
, но нельзя это сделать в виде
int A[n]
. Однако, компилятор gcc, которым мы пользуемся,
допускает объявления второго вида, но при этом нет никаких гарантий,
что ваша программа будет откомпилирована каким-либо другим компилятором.
К элементу массива можно обращаться, как идентификатор[
индекс]
.
Например, если было сделано объявление
double A[5];
то таким образом создается 5 элементов массива типа double
:
A[0]
, A[1]
, A[2]
, A[3]
, A[4]
.
Пример программы, которая создает массив типа int[]
,
заданного пользователем размера, считывает с клавиатуры его элементы, затем прибавляет к каждому элементу массива
число 1
, затем выводит результат на экран:
#include <iostream> using namespace std; int main() { int n; // Размер массива int i; // Счетчик в циклах cin >> n; // Считываем размер массива int A[n]; // Объявление массива // Считываем массив for (i = 0; i < n; ++i) { cin >> A[i]; } // Прибавляем по 1 к каждому элементу for (i = 0; i < n; ++i) { A[i] += 1; } // Выводим массив на экран for (i = 0; i < n; ++i) { cout << A[i] << " "; } // Переведем курсор на новую строку cout << endl; return 0; }
В этом примере при помощи //
обозначается начало комментария, весь текст
после начала комментария и до конца строки компилятором игнорируется.
Второй способ объявления комментария: в начале комментария поставить
знаки /*
, а в конце – */
. Это позволяет
делать комментарии, занимающие несколько строк. В языке C допустимы только
такие комментарии.
В языке C++ появился более удобный, по сравнению с классическим массивом в языке C, контейнер vector. Он является аналогом обычных массивов, но поддерживает дополнительные возможности, например, его размер можно изменять по ходу программы.
Для использования контейнера vector необходимо в начале программы подключить заголовочный файл
vector
:
#include <vector>
Вектор A
данных типа int
объявляется так:
vector <int> A;
В данном случае будет создан вектор нулевого размера. При необходимости создать вектор нужного размера можно задать размер вектора в качестве параметра конструктора:
vector <int> A(n);
В любой момент можно изменить размер вектора при помощи вызова метода resize
.
Текущий размер вектора можно узнать про помощи метода size
.
Обращение к элементам вектора осуществляется так же, как к элементам массива, при помощи квадратных скобок.