Массив фиксированного размера std::array
Безопасная замена массива C
«Массив фиксированного размера std::array» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Безопасный массив C
std::array<T, N> — это массив фиксированного размера, который знает собственный размер и ведёт себя как полноценный контейнер. Подключите <array>.
#include <iostream>
#include <array>
int main() {
std::array<int, 3> a = {1, 2, 3};
std::cout << a[0] << " " << a.size() << "\n";
}Знает свой размер
В отличие от обычного массива, который неявно преобразуется в указатель, std::array всегда сообщает свою длину через size().
#include <iostream>
#include <array>
int main() {
std::array<double, 4> a{};
std::cout << a.size() << "\n"; // 4
}Цикл по диапазону
Поскольку это полноценный контейнер, его можно перебирать с помощью цикла по диапазону.
#include <iostream>
#include <array>
int main() {
std::array<int, 3> a = {10, 20, 30};
for (int x : a) std::cout << x << " ";
std::cout << "\n";
}Проверка границ в at()
at(i) выбрасывает исключение std::out_of_range при недопустимом индексе, а operator[] ничего не проверяет — выбирайте подходящий вариант с учётом требований безопасности.
#include <iostream>
#include <array>
int main() {
std::array<int, 2> a = {1, 2};
try { a.at(5); }
catch (const std::out_of_range&) { std::cout << "out of range\n"; }
}Первый элемент, back и данные
Удобные средства доступа: front() и back() возвращают первый и последний элементы, а data() предоставляет обычный указатель для API языка C.
#include <iostream>
#include <array>
int main() {
std::array<int, 3> a = {7, 8, 9};
std::cout << a.front() << " " << a.back() << "\n";
}Копирование по значению
std::array корректно копируется с помощью = вместе со всеми элементами, в отличие от обычных массивов, которые неявно преобразуются в указатели.
#include <iostream>
#include <array>
int main() {
std::array<int, 3> a = {1, 2, 3};
std::array<int, 3> b = a; // full copy
b[0] = 99;
std::cout << a[0] << " " << b[0] << "\n"; // 1 99
}Работа с алгоритмами
Стандартные алгоритмы принимают итераторы std::array; здесь мы сортируем массив.
#include <iostream>
#include <array>
#include <algorithm>
int main() {
std::array<int, 4> a = {4, 1, 3, 2};
std::sort(a.begin(), a.end());
for (int x : a) std::cout << x << " ";
std::cout << "\n";
}Заполнение и сравнение
fill(value) устанавливает значение каждого элемента; std::array также поддерживает поэлементное сравнение с помощью ==.
#include <iostream>
#include <array>
int main() {
std::array<int, 3> a{};
a.fill(5);
std::array<int, 3> b = {5, 5, 5};
std::cout << (a == b) << "\n"; // 1
}Размер входит в тип
Длина N зафиксирована в типе, поэтому функция, принимающая std::array<int,3>, не примет массив из 4 элементов. Позже здесь поможет std::span.
Выделение памяти в стеке
std::array хранит элементы непосредственно внутри объекта, обычно в стеке, без выделения памяти в куче. Это делает его быстрым и предсказуемым для данных фиксированного размера.
Массив и вектор
Используйте std::array, когда размер известен во время компиляции и не меняется. Используйте std::vector, когда размер может изменяться во время выполнения.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли std::array.
Итоги
Вы изучили std::array:
- Контейнер фиксированного размера, знающий свой размер и не использующий выделение памяти в куче.
at()проверяет границы, а[]— нет.- Поддерживает копирование и сравнение, а также работает с алгоритмами.
- Размер
Nвходит в тип.
Часто задаваемые вопросы
Урок «Массив фиксированного размера std::array» бесплатный?
Да — полный текст урока «Массив фиксированного размера std::array» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Массив фиксированного размера std::array»?
Безопасная замена массива C Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Массив фиксированного размера std::array»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Массив фиксированного размера std::array
- Основы std::span
- Передача span в функции
- Границы и поддиапазоны