Если ваш вектор содержит 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) );
Единственным недостатком является то, что он делает копию.