std::array в C++: статический массив с возможностями STL

Автор: | 12 июня, 2025

В языке 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::arraystd::vectorC-массив 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, обеспечивая лучшую производительность и меньшие накладные расходы.