int result = 0; // Значение возврата
for each (String^ name in toBeFound) { // Для каждого элемента
result = Array::BinarySearch(names, name); // Поиск имен
if (result < 0) // Проверка результата поиска
Console::WriteLine("{0} в списке не найден.", name);
Else
Console::WriteLine("{0} весит {1} кг.",
name, weights[result]); // Вывод имени и веса
}
Console::ReadLine();
return 0;
}
/* Вывод:
Борис весит 90 кг.
Иван весит 75 кг.
Максим весит 72 кг.
Антон весит 84 кг.
Федор в списке не найден.
*/
Массивы массивов
В следующих примерах показаны различные варианты объявления и инициализации массива массивов, а также доступа к его элементам.
// Объявление массива массивов
array<array<int^>^>^ arr = gcnew array<array<int^>^>(3);
arr[0] = gcnew array<int^>(4);
arr[1] = gcnew array<int^>(5);
arr[2] = gcnew array<int^>(3);
// Объявление массива массивов и инициализация его элементов
array<array<int^>^>^ arr = gcnew array<array<int^>^>(3);
arr[0] = gcnew array<int^> { 1, 2, 3, 4 };
arr[1] = gcnew array<int^> { 9, 7, 5, 3, 1 };
arr[2] = gcnew array<int^> { 11, 33, 22 };
// Альтернативный синтаксис инициализации массива массивов
array<array<int^>^>^ arr = gcnew array<array<int^>^> {
gcnew array<int^> { 1, 2, 3, 4 },
gcnew array<int^> { 9, 7, 5, 3, 1 },
gcnew array<int^> { 11, 33, 22 }
};
// Доступ к отдельным элементам массива
arr[0][1] = 102;
arr[2][1] = 133;
Пример 7.10. Создание массива массивов и вывод на экран его элементов.
#include "stdafx.h"
using namespace System;
int main(array<System::String^>^ args) {
// Объявление массива, состоящего из 3-х массивов
array<array<int^>^>^ arr = gcnew array<array<int^>^>(3);
// Инициализация элементов
arr[0] = gcnew array<int^> { 1, 2, 3, 4 };
arr[1] = gcnew array<int^> { 9, 7, 5, 3, 1 };
arr[2] = gcnew array<int^> { 11, 33, 22 };
// Вывод на экран элементов массива
Console::WriteLine("Массив массивов содержит {0} массива(ов):",
arr->Length);
for (int i = 0; i < arr->Length; i++) {
|
Console::Write("Элементы массива ({0}):", i);
for (int j = 0; j < arr[i]->Length; j++)
Console::Write(" {0}", arr[i][j]);
Console::WriteLine();
}
Console::ReadLine();
return 0;
}
/* Вывод:
Массив массивов содержит 3 массива(ов):
Элементы массива (0): 1 2 3 4
Элементы массива (1): 9 7 5 3 1
Элементы массива (2): 11 33 22
*/
Массивы указателей
Указатели можно сохранять в массиве. При объявлении массива указателей используется следующий синтаксис:
тип *имяМассива[количество_элементов];
Пример использования массива указателей:
int *p[3]; // Массив указателей из трех элементов
int x = 10, y = 20, z = 30;
p[0] = &x;
p[1] = &y;
p[2] = &z;
for (int i = 0; i < 3; i++)
System::Console::Write("{0,4}", *p[i]); // Вывод: 10 20 30
System::Console::WriteLine();
Динамические массивы
Динамическое выделение памяти под массив и ее освобождение производится следующим образом:
<указатель> = new <Тип>[<Количество_элементов>];
Выполнение операций с массивом
delete [] <указатель>;
Пример 7.11. Динамическое выделение памяти под массив.
#include "stdafx.h"
using namespace System;
int main() {
const short SIZE = 3; // Размер массива
int *p = 0; // Создание указателя
p = new int[SIZE]; // Выделение памяти под массив
p[0] = 10; //
p[1] = 20; // Использование памяти
p[2] = 30; //
for (int i=0; i<SIZE; ++i)
Console::Write("{0,4}", p[i]); // Вывод: 10 20 30
Console::WriteLine();
delete [] p; // Освобождение памяти
p = 0; // Обнуление указателя
Console::ReadLine();
return 0;
}
Пример 7.13. Нахождение простых чисел, используя для их размещения динамическую память.
#include "stdafx.h"
#include <new>
using namespace System;
int main() {
long* pprime(nullptr); // Указатель на массив простых чисел
|
Long trial(5); // Кандидат в простые числа
Int count(3); // Счетчик найденных простых чисел
Int found(0); // Признак обнаружения простого числа
Int max(0); // Количество требуемых простых чисел
Console::Write("Введите количество простых чисел, " +
"которые хотите получить (минимум 4): ");
//String^ input = Console::ReadLine();
max = Int32::Parse(Console::Read());
// Проверка ввода пользователя, чтобы значение было не меньше 4.
// Если же указано меньше, то принудительное назначение количества.
if (max < 4) max = 4;
pprime = new long[max];
// Если выделить область памяти не удастся, то
// программа в этой точке будет прервана исключением.
*pprime = 2; // Вставить
*(pprime + 1) = 3; // три первых
*(pprime + 2) = 5; // простых числа
do {
trial += 2; // Следующее значение для проверки
found = 0; // Установка признака "найдено"
for (int i = 0; i < count; i++) { // Деление на ранее
// найденные простые числа
// Истинно, если делится без остатка,
// а значит, число не простое.
found = (trial % *(pprime + i)) == 0;
if (found) break;
}
if (found == 0) // Найдено...
*(pprime + count++) = trial; //... сохраняем в массиве
// простых чисел
} while (count < max);
// Вывести по 5 простых чисел в строке
for (int i = 0; i < max; i++) {
if (i % 5 == 0) // Перевод строки перед первым и
Console::WriteLine(); // каждым пятым элементом
Console::Write("{0,8}", *(pprime + i));
}
Console::WriteLine();
delete [] pprime; // Освободить память и
pprime = nullptr; // обнулить указатель
Console::ReadLine();
return 0;
}
/* Вывод: