Ответ 1
Используйте std::fill()
:
std::fill(myVector.begin(), myVector.end(), 0);
Существует ли эквивалентная функция memset
для векторов в С++?
(Не clear()
или erase()
метод, я хочу сохранить размер вектора, я просто хочу инициализировать все значения.)
Используйте std::fill()
:
std::fill(myVector.begin(), myVector.end(), 0);
Если ваш вектор содержит POD, безопасно использовать memset на нем - хранение вектора гарантированно будет смежным.
memset(&vec[0], 0, sizeof(vec[0]) * vec.size());
Изменить: Извините, что выбрал для вас термин undefined - POD означает Обычные старые данные, т.е. типы, которые были доступны в C, и построенные из них структуры.
Изменить еще раз: Как указано в комментариях, хотя bool
является простым типом данных, vector<bool>
представляет собой интересное исключение и потерпит неудачу, если вы попытаетесь использовать memset на нем, ответ Адама Розенфилда в этом случае прекрасно работает.
Еще один способ, я думаю, что сначала увидел его в книге Мейерса:
// Swaps with a temporary.
vec.swap( std::vector<int>(vec.size(), 0) );
Единственным недостатком является то, что он делает копию.