В языке C++ массивы бывают двух основных типов: обычные C-массивы и более безопасные, оборачивающие их структуры — например, std::array. В этой статье мы рассмотрим, что такое std::array, чем он отличается от std::vector и C-массивов, как его правильно использовать и когда стоит предпочесть именно его.
std::array — это контейнер фиксированного размера, который находится в заголовочном файле <array>. Он оборачивает C-массив, добавляя к нему:
- Безопасный доступ
- Совместимость с алгоритмами STL (
std::sort,std::for_eachи др.) - Итераторы
- Поддержку
range-based forи других C++ фич
Объявление и инициализация std::array
#include <array>
std::array<int, 5> arr = {1, 2, 3, 4, 5};
Первый параметр — тип элементов
Второй — размер массива (фиксированный во время компиляции)
Примеры использования
Доступ к элементам
arr[2]; // Обычный доступ arr.at(2); // Безопасный доступ с проверкой границ (бросает std::out_of_range) arr.front(); // Первый элемент arr.back(); // Последний элемент
Использование в цикле
for (int val : arr) {
std::cout << val << " ";
}
Работа с алгоритмами STL
#include <algorithm> std::sort(arr.begin(), arr.end());
Размер массива
arr.size(); // Возвращает фиксированное количество элементов
Копирование и сравнение
std::array поддерживает операторы ==, !=, =, что делает его удобным:
std::array<int, 3> a1 = {1, 2, 3};
std::array<int, 3> a2 = {1, 2, 3};
if (a1 == a2)
std::cout << "Равны";
Отличия от других контейнеров
| Характеристика | std::array | std::vector | C-массив int arr[5] |
|---|---|---|---|
| Размер | Фиксированный на этапе компиляции | Динамический | Фиксированный |
| Безопасность | Поддержка .at() | Поддержка .at() | Нет |
| Совместимость с STL | Полная | Полная | Ограниченная |
| Сравнение | Поддерживает ==, < и т.д. | Да | Нет |
| Хранение в стеке | Да | Зависит от аллокатора | Да |
| Производительность | Очень высокая | Немного медленнее | Высокая |
Важные замечания
- Размер
std::arrayне может быть изменён. Для динамического размера используйтеstd::vector. std::arrayинициализируется полностью — даже если вы указали только часть значений:
std::array<int, 5> a = {1, 2}; // Остальные элементы будут инициализированы нулями
Когда использовать std::array?
Используйте std::array, если:
- Размер массива известен на этапе компиляции
- Нужна совместимость с STL
- Требуется производительность и предсказуемость
- Не нужен
push_backили изменение длины массива
std::array — это мощная альтернатива обычным C-массивам. Он сочетает в себе простоту, безопасность и мощь STL. Для фиксированных по размеру данных он предпочтительнее std::vector, обеспечивая лучшую производительность и меньшие накладные расходы.
