C/C++ Ready | Программирование
Фотография
нажмите — покажем
нажмите — покажем
Почему reserve() не добавляет элементы в vector?
reserve() часто используют перед заполнением vector:
std::vector<int> nums;
nums.reserve(10);
После этого у vector действительно появляется место под 10 элементов, но размер остаётся нулевым:
std::cout << nums.size() << '\n'; // 0
std::cout << nums.capacity() << '\n'; // 10
Важно не путать size и capacity.
Такой код ошибочный:
std::vector<int> nums;
nums.reserve(10);
nums[0] = 42; // undefined behavior
Индексатор работает только с уже существующими элементами. reserve() выделяет память, но не создаёт объекты внутри vector.
Если нужно добавить значения, используй push_back():
nums.push_back(42);
nums.push_back(100);
А если нужны именно 10 готовых элементов, нужен resize():
std::vector<int> nums;
nums.resize(10);
nums[0] = 42;
reserve() полезен, когда ты заранее знаешь примерное количество будущих элементов:
std::vector<std::string> logs;
logs.reserve(1000);
for (auto line : input) {
logs.push_back(line);
}
Так vector реже перевыделяет память при росте.
📣 C++ Ready | #совет
14 · 2.8K ·