Казалось бы, простой вопрос. Но копирование array работает совсем не так, как у vector.
Проблема: в C++ массивы не копируются обычным
=. Но std::array копируется. Как?⚡️ Ключевое отличие: std::array — это агрегатный тип, а агрегаты копируются поэлементно.
std::array<int, 3> a = {1, 2, 3};
std::array<int, 3> b = a; // Копируются ВСЕ элементы!Под капотом компилятор генерирует:
b._data[0] = a._data[0];
b._data[1] = a._data[1];
b._data[2] = a._data[2];
❗️ Важно: это происходит на этапе компиляции. Для
array<int, 1000> будет сгенерировано 1000 операций присваивания. Или одна memcpy, если компилятор умный.❌ Ловушка: копирование большого array может быть дорогим. В отличие от vector (копируется только указатель при move), array всегда копирует данные целиком.
Практический вывод: передавайте большие array по ссылке (
const std::array<T, N>&), иначе каждый вызов функции скопирует все N элементов.Библиотека C/C++ разработчика
#под_капотом