Вывод 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
Временная сложность: O (M * N). Для обхода матрицы требуется O (m * n) времени.
Дополнительный пробел: O(1). Дополнительный пробел не требуется.
Введение в std::array
Хотя фиксированные и динамические массивы очень полезны и активно используются в языке C++, у них также есть свои недостатки: фиксированные массивы распадаются в указатели, теряя информацию о своей длине; в динамических массивах проблемы могут возникнуть с освобождением памяти и с попытками изменить их длину после выделения.
Поэтому в Стандартную библиотеку C++ добавили функционал, который упрощает процесс управления массивами: array и vector. Сейчас мы рассмотрим array, а на последующих лекциях —vector.
Представленный в C++11, std::array — это фиксированный массив, который не распадается в указатель при передаче в функцию. std::array определяется в заголовочном файле array, внутри пространства имен std. std::array автоматически делает все очистки после себя, когда выходит из области видимости, поэтому нет необходимостипрописывать это вручную.
Объявление переменной std::array следующее:
array имя_массива; class T Определяет тип данных элементов массива
std::size_t N Указывает количество элементов в массиве
Пример:
#include std::array myarray; // объявляем массив типа int длиной 4
Подобно обычным фиксированным массивам, длина std::array должна быть установлена во время компиляции. std::array можно инициализировать с использованием списка инициализаторов или uniform-инициализации:
std::array myarray = { 8, 6, 4, 1 }; // список инициализаторов
std::array myarray2 { 8, 6, 4, 1 }; // uniform-инициализация
В отличие от стандартных фиксированных массивов, в std::array вы не можете пропустить (не указывать) длину массива: