Многомерные массивы в C++11

Многомерные массивы в C++11

Что же нового мы можем сказать о многомерных массивах в C++? С внедрением С++11 мы получили новый класс в стандартной библиотеке: std::array. Мы также получили другие "фичи" языка, как, например, template aliases (псевдонимы шаблонов) и variadic templates (шаблоны с неограниченным количеством аргументов). В статье опишется метод их взаимодействия.

Все начинается с простого вопроса: как сделать многомерный массив с помощью std::array? Это отличный пример обманчиво-простых вещей. Что вы можете сказать о массивах, описанных ниже. Одинаковы ли они за смыслом?

Int native[3][4]; std::array<std::array<int, 3>, 4> arr;

Нет, не одинаковы! Фактически, arr больше выглядит как: int[4][3]. Посмотрите на разницу в опредлении. Первый массив это массив из 3 элементов, каждый из которых внутри содержит массив на 4 элемента. 3 строки, 4 столбца. Чтобы определить массив нужной размерности, правильно писать так: std::array<std::array<int, 4>, 3> arr;

Немного страшновато, правда? Подуймате о массивах большей размерности. Здесь нам помогут template aliases. Они дают возможность задания синонимов для других типов, включая частично определенные шаблоны. В C++03 typedef позволяет вам использовать только полностью определенные шаблоны для создания "псевдонима".

Template

<class T, size_t ROW, size_t COL<using Matrix = std::array<std::array<T, COL>, ROW>

>;

Matrix<float, 3, 4> mat;


Карта сайта


Информационный сайт Webavtocat.ru