Массивы
(https://msdn.microsoft.com/ru-ru/library/7wkxxx2e.aspx)
Arr[0] | Arr[1] | Arr[2] | Arr[3] | Arr[4] | Arr[5] | Arr[6] | а) |
ArrM[0, 0] | ArrM[0, 1] | ArrM[0, 2] | ArrM[0, 3] | ArrM[0, 4] | ArrM[0, 5] | ArrM[0, 6] | |
ArrM[1, 0] | ArrM[1, 1] | ArrM[1, 2] | ArrM[1, 3] | ArrM[1, 4] | ArrM[1, 5] | ArrM[1, 6] | |
ArrM[2, 0] | ArrM[2, 1] | ArrM[2, 2] | ArrM[2, 3] | ArrM[2, 4] | ArrM[2, 5] | ArrM[2, 6] | б) |
ArrM[3, 0] | ArrM[3, 1] | ArrM[3, 2] | ArrM[3, 3] | ArrM[3, 4] | ArrM[3, 5] | ArrM[3, 6] | |
ArrM[4, 0] | ArrM[4, 1] | ArrM[4, 2] | ArrM[4, 3] | ArrM[4, 4] | ArrM[4, 5] | ArrM[4, 6] |
Рис.7.1. Концептуальная раскладка массива: одномерного (а) и многомерного (б)
Объявление массивов
Формат объявления массива имеет следующий вид:
тип имяМассива[количество_элементов];
тип имяМассива[];
тип имяМассива[количество_элементов][количество_элементов]...;
тип имяМассива[][количество_элементов]...;
Примерами объявлений массивов могут служить следующие:
long data[100]; // Объявление массива из 100 элементов типа long.
char name[15]; // Объявление массива из 15 элементов типа char.
int i2[5][7]; // Объявление двумерного (5×7) массива типа int.
Вместе с объявлением массива возможна и его инициализация, при этом значения в списке инициализации указываются через запятую, а сам список заключается в фигурные скобки.
тип имяМассива[количество_элементов] = { список_значений };
тип имяМассива[] = { список_значений };
Примерами объявлений и инициализации массивов могут служить следующие:
int num[5] = {20, 25, 30, 35, 40 }; // Инициализация массива.
int num[] = {20, 25, 30, 35, 40 }; // То же, размер массива
// определяет компилятор.
long data[100] = {0}; // Инициализация всех элементов массива нулями
char name[15] = "Алексей Петров"; // Инициализация массива.
char name[] = "Алексей Петров"; // То же, размер массива
// определяет компилятор.
При инициализации многомерных массивов следует указывать столько вложенных фигурных скобок для групп инициализирующих значений, сколько измерений в массиве.
// Объявление и инициализация двумерного (2×5) массива типа int.
int number[3][5] = { // или int number[][5] = {
{ 1, 2, 3, 4, 5 },
{ 11, 12, 13, 14, 15 },
{ 21, 22, 23, 24, 25 }
};
Можно пропустить инициализацию значений в любой строке, в этом случае остальные элементы массива инициализируются нулевыми значениями (для числовых типов данных), например.
int number[3][5] = { // или int number[][5] = {
{ 1, 2, 3, 4 }, // Неуказанные элементы
{ 11, 12, 13 }, // инициализируются нулями.
{ 21, 22 }
};
int data[3][5] = {0}; // Инициализация всего массива нулями.
Пример 7.1. Создание и вывод на экран массива из 10-ти случайных целых чисел.
#include "stdafx.h"
using namespace System;
int main(array<System::String^>^ args) {
int arr[10]; // Объявление массива.
Random^ rnd = gcnew Random; // Создание объекта типа Random.
for (int i = 0; i < 10; i++) { // Цикл заполнения массива.
// Генерация случайных значений в диапазоне от 0 до 99.
arr[i] = rnd->Next(100);
// Вывод значения элемента массива в поле шириной 4 позиции
Console::Write("{0,4}", arr[i]);
// или с указателем: Console::Write("{0,4}", *(arr + i));
}
Console::WriteLine();
Console::ReadLine();
return 0;
}
// Вывод: 15 38 2 82 28 95 52 46 84 93
Массивы среды CLR
Синтаксис объявления переменной массива имеет следующий вид:
array<тип_элемента>^ переменная_массива;
Пример объявления переменной массива и создания массива CLR с использованием оператора gcnew:
array<int>^ data;
data = gcnew array<int>(100);
Объявить переменную массива и создать массив CLR можно и одновременно.
array<int>^ data = gcnew array<int>(100); // Создание массива
// на 100 целых чисел
Также создать массив data можно, используя функциональную форму записи.
array<int>^ data(gcnew array<int>(100)); // Создание массива
// на 100 целых чисел
Обращение к элементам массива CLR осуществляется также, как и к элементам массивов "родного" С++. Индексация элементов также начинается с нуля. Например:
for (int i = 0; i < 100; i++) // Элементам массива присваиваются
data[i] = 2 * (i + l); // значения: 2, 4, 6,... 200.
Инициализировать массив можно и при его создании, например:
array<int>^ values = { 3, 5, 6, 8, 6 }; // Массив из 5-ти элементов
array<String^>^ names = { "Виктор", "Антон", "Максим", "Евгений" };
// Строковый массив из 4-х элементов
Объявление переменной массива и создание массива с его инициализацией можно выполнить и иначе:
array<String^>^ names; // Объявление переменной массива
names = gcnew array<String^> { "Виктор", "Антон", "Максим", "Иван" };
// Создание и инициализация массива
Пример 7.2. Создание массива, содержащего случайные вещественные значения, и поиск среди них максимального значения.
#include "stdafx.h"
using namespace System;
// Использование массива CLR.
int main(array<System::String^>^ args) {
array<double>^ samples = gcnew array<double>(50);
// Заполнение массива случайными значениями.
Random^ generator = gcnew Random; // Создание объекта типа Random
for (int i = 0; i < samples->Length; i++)
// Генерация случайных значений в диапазоне от 0,0 до 100,0.
samples[i] = 100.0 * generator->NextDouble();
// Вывод содержимого массива samples.
Console::WriteLine("Массив содержит следующие значения:");
for (int i = 0; i < samples->Length; i++) {
// Вывод значения в поле шириной 10 символов с двумя
// десятичными разрядами и выравниванием по правому краю.
Console::Write("{0,10:F2}", samples[i]);
if ((i + 1) % 5 == 0) // Перевод строки после вывода
Console::WriteLine(); // каждого пятого элемента.
}
// Поиск максимального значения элементов массива.
double max = 0.0;