0Pricing
C++ Academy · Урок

Вектор, std::array и массив C

Сравнивайте три последовательных контейнера и выбирайте один с учётом размера, владения и производительности.

«Вектор, std::array и массив C» — бесплатный урок C++ Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Три последовательных контейнера

В C++ есть три способа хранить непрерывную последовательность:

  • std::vector — динамический размер, хранение в куче
  • std::array — фиксированный размер во время компиляции, хранение в стеке
  • Массив в стиле C — фиксированный размер, низкоуровневый

Массивы в стиле C

Самая старая форма. Размер является частью типа. При передаче в функции преобразуется в указатель — размер теряется.

int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2];   // 3

Проблемы массивов в стиле C

В большинстве контекстов они теряют информацию о размере, не проверяют выход за границы и легко приводят к ошибкам. В новом коде лучше использовать std::array или std::vector.

std::array (C++11)

Тонкая оболочка над массивом фиксированного размера. Производительность такая же, как у массива C, но есть полноценный тип и корректные функции-члены.

#include <array>
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::cout << a.size();   // 5
std::cout << a.at(2);    // bounds-checked

std::array хранится в стеке

В отличие от вектора, std::array хранит свои элементы непосредственно. Выделения памяти в куче нет. Размер является параметром шаблона.

std::vector для динамического размера

Используйте std::vector, когда размер неизвестен во время компиляции или будет изменяться во время выполнения.

Сравнение производительности

При фиксированных размерах все три варианта работают примерно одинаково. std::vector добавляет небольшие накладные расходы на хранение указателя и размера, а также одну косвенную адресацию.

Передача в функции

Передавайте вектор или std::array по константной ссылке, чтобы избежать копирования. Массивы C при передаче без владения следует заменять на std::span (C++20).

void process(const std::vector<int>& v);
void process(const std::array<int, 5>& a);

#include <span>
void process(std::span<const int> data);  // accepts both

std::span (C++20)

Невладеющее представление непрерывной последовательности. Подобно паре «указатель + длина». Единообразно работает с векторами, std::array и массивами C.

Как выбрать подходящий вариант

Дерево решений:

  • Нужен динамический размер → std::vector
  • Фиксированный размер, без выделения памяти → std::array
  • Передача без владения → std::span
  • Совместимость с кодом на C → массив C

Преобразование между ними

Элементы можно копировать между типами с помощью диапазонов или алгоритмов.

std::array<int, 3> a = {1, 2, 3};
std::vector<int> v(a.begin(), a.end());
int c[3];
std::copy(a.begin(), a.end(), c);

Быстрая проверка

Какой контейнер хранит элементы в стеке и имеет размер, известный во время компиляции?

Итоги

Предпочитайте std::vector для динамического размера, а std::array — для фиксированного. Массивы в стиле C редко бывают лучшим выбором в современном коде. Используйте std::span, чтобы передавать последовательность без владения ею.

Часто задаваемые вопросы

Урок «Вектор, std::array и массив C» бесплатный?

Да — полный текст урока «Вектор, std::array и массив C» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Вектор, std::array и массив C»?

Сравнивайте три последовательных контейнера и выбирайте один с учётом размера, владения и производительности. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Вектор, std::array и массив C»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы std::vector: push_back, size, capacity
  2. Перебор векторов: индекс, range-for, итераторы
  3. Изменение векторов: insert, erase, clear
  4. Вектор, std::array и массив C
← Назад к C++ Academy