Изучение работы с массивами Если с группой величин данного типа требуется выполнить однообразные действия, им дают одно имя, а различают по порядковому номеру или индексy, определяющему его место среди других элементов. Конечная именованная последовательность однотипных величин называется массивом. Первому элементу в массиве обычно соответствует порядковый номер 0. Массивы могут иметь различные размеры. Один массив может состоять из трех элементов, другой – из сорока, третий из шести. Массив может не иметь элементов вообще. Одномерные массивы. Одномерные массивы — простейший вариант массива. Так как элементы массива занимают непрерывный участок памяти, то одномерный массив является просто последовательность ячеек памяти, размера достаточного, чтобы разместить все элементы. Многомерные массивы. В большинстве случаев это двумерные или трехмерные массивы. Объявляя такие массивы в квадратных скобках нужно указать число элементов в каждой размерности, начиная с первой: int MyArray[10][5]; Здесь объявлен двумерный статический массив целых чисел из пятидесяти элементов по пять в каждой строке. При инициализации многомерного массива, он предоставляется либо как массив из массивов либо задается общий список элементов в том порядке, в котором они располагаются в памяти. Удаляются динамические массивы всегда одинаково. Следует помнить, что элементы массива могут быть практически любого типа, а не только стандартного. Следующая программа показывает пример использования массива. В ней на вход подается некоторая фиксированной длины последовательность целых (можно и не целых) чисел, а на выходе выдается их сумма. #include <iostream.h> #define n 10 int main() { int MyArray[n]; // объявляется массив из 10 целых чисел int i=0; // Счетчик цикла int s=0; // Начальное значение суммы while (i<n) { // Пока не будут введены все элементы cout << "MyArray["<<i<<"]="; //Вывести приглашение cin>>MyArray[i]; //Ввести элемент s+=MyArray[i]; //Прибавить к сумме i++; //Увеличить счетчик на единицу } //Конец цикла cout<<"s="<<s; //Вывести сумму }//Конец main Операции с массивами Типичными операциями при работе с массивами являются: – вывод массива; – ввод массива; – поиск максимального или минимального элемента массива; – поиск заданного элемента массива; – сортировка массива. Объявление одномерного массива : тип имя[размер_массива], где: • тип — это тип данных ВСЕХ переменных массива,то есть нельзя чтоб в массиве были переменные разного типа! • имя — имя которое эти переменные объединяет и по которому они доступны. • размер массива — количество элементов в массиве. Доступ к элементам массива осуществляется через имя массива вместе с индексом элемента, расположенного в квадратных скобках за именем массива. Элементы массива индексируются с нуля, соответственно индекс 0 эквивалентен первому элементу массива, индекс 1 — второму и так далее. • Массивы инициализируются так же как и обычные переменные: каждому элементу массива ставится в соответствие значение: int a[3] = {1, 2, 3}. Если инициализация больше чем размерность, то ошибка. Если при инициализации число элементов не соответствует количеству элементов в списке инициализации, то, либо массив дополняется нулевыми значениями, либо часть элементов в конце списка инициализации не используется. Массивы в языке С++ могут быть статическими или динамическими. Динамические массивы: Создаются с помощью операции new при этом необходимо указать тип и размерность. Динамические массивы нельзя при создании инициализировать и они не обнуляются. Преимущество таких массивов состоит в том, что размерность может быть переменной, т.е. объем памяти выделяемой под массив определяется на этапе выполнения программы. Освобождение динамической памяти delete [] ; Многомерный динамический массив можно объявить, например следующим образом: int N1 = 5; int ** MyArray = (int **) new int [N1][10]; или, например как массив массива: int N1, N2; cout << " Введите количество строк и столбцов :"; cin >> N1 >> N2; int ** MyArray = new int *[N1]; for(int i = 0; i<N1; 1++) MyArray [i] = new int [N2]; Следующая программа является модификацией предыдущей, и в ней используется динамический массив. #include <iostream.h> int main() { int N; cout<<"Enter number of elements of a file: ";// Введите число //элементов cin>>N;//Ввод числа элементов int* MyArray=new int[N];//Создание массива int i=0;// Счетчик цикла int S=0;// Начальное значение суммы while (i<N)// Пока не будут введены все элементы { cout<<"MyArray["<<i<<"]=";//Вывести приглашение cin>>MyArray[i];//Ввести элемент S+=MyArray[i];//Прибавить к сумме i++;//Увеличить счетчик на единицу }//Конец цикла delete[] MyArray;// Удаление массива и освобождение памяти cout<<"S="<<S;//Вывести сумму }//Конец main Статического массив: Признаком объявления массива являются квадратные скобки, а статическим он называется потому, что выделенная компилятором память не может быть увеличена или уменьшена Память под массив выделяется одним блоком, элементы в ней размещаются подряд, от начала к концу. Имя массива указывает на начало этого блока (и таким образом является указателем). По сравнению с массивами Basic или Pascal массивы С++ имеют особенности: • нумерация элементов всегда начинается с нуля; • при объявлении массива в квадратных скобках указывается именно число элементов, а не верхняя граница индекса; • если массив инициализируется при объявлении (т.е. определяется), то число элементов можно не указывать; • если при инициализации число элементов не соответствует количеству элементов в списке инициализации, то, либо массив дополняется нулевыми значениями, либо часть элементов в конце списка инициализации не используется. |