Подтвердить что ты не робот

Memset на векторном С++

Существует ли эквивалентная функция memset для векторов в С++?

(Не clear() или erase() метод, я хочу сохранить размер вектора, я просто хочу инициализировать все значения.)

4b9b3361

Ответ 1

Используйте std::fill():

std::fill(myVector.begin(), myVector.end(), 0);

Ответ 2

Если ваш вектор содержит POD, безопасно использовать memset на нем - хранение вектора гарантированно будет смежным.

memset(&vec[0], 0, sizeof(vec[0]) * vec.size());

Изменить: Извините, что выбрал для вас термин undefined - POD означает Обычные старые данные, т.е. типы, которые были доступны в C, и построенные из них структуры.

Изменить еще раз: Как указано в комментариях, хотя bool является простым типом данных, vector<bool> представляет собой интересное исключение и потерпит неудачу, если вы попытаетесь использовать memset на нем, ответ Адама Розенфилда в этом случае прекрасно работает.

Ответ 3

Еще один способ, я думаю, что сначала увидел его в книге Мейерса:

// Swaps with a temporary.
vec.swap( std::vector<int>(vec.size(), 0) );

Единственным недостатком является то, что он делает копию.