← Назад к вопросам

Можно ли вызвать push_back без параметров у std::vector?

1.8 Middle🔥 61 комментариев
#STL контейнеры и алгоритмы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Нет, нельзя вызвать push_back без параметров

push_back в std::vector обязательно требует параметр — элемент, который нужно добавить в вектор. Это постоянное требование сигнатуры метода.

Сигнатура push_back

template<class T>
void push_back(const T& value);  // C++98-C++17

template<class T>
void push_back(T&& value);  // C++11 и выше (rvalue reference)

Оба варианта требуют передачи аргумента. Без параметра вызов приведёт к ошибке компиляции.

Пример ошибки

std::vector<int> v;
v.push_back();  // ❌ Ошибка компиляции: no matching function
v.push_back(42);  // ✅ Корректно

Альтернативы для добавления элемента

Если нужно добавить элемент по умолчанию, есть несколько подходов:

1. emplace_back (C++11+) — конструирование на месте

v.emplace_back();  // Создаёт элемент default-constructor'ом
v.emplace_back(10, 20);  // Передаёт аргументы конструктору

2. push_back с default value

v.push_back(T());  // Создаёт временный объект по умолчанию

3. resize

v.resize(v.size() + 1);  // Добавляет один элемент со значением по умолчанию

Почему push_back требует параметр

Это сделано в целях безопасности типов и ясности кода. Вектор хранит конкретный тип T, и компилятор должен знать, какое значение добавлять. Разработчик должен явно указать, что именно он добавляет.

Различие между push_back и emplace_back

  • push_back(value) — копирует или перемещает готовый объект
  • emplace_back(args...) — конструирует объект прямо в контейнере из аргументов

emplace_back() без аргументов работает и создаёт элемент через default constructor:

struct Point { Point() : x(0), y(0) {} int x, y; };
std::vector<Point> points;
points.emplace_back();  // ✅ Создаёт Point(0, 0)

Итог: push_back обязательно требует параметр, это незаменяемая часть API. Для более удобного добавления элементов используй emplace_back или методы типа resize.

Можно ли вызвать push_back без параметров у std::vector? | PrepBro