51 votes

Memset sur le vecteur C ++

Existe-t-il une fonction équivalente de memset pour les vecteurs en C ++?

(Pas la méthode clear() ou erase() , je veux conserver la taille du vecteur, je veux juste initialiser toutes les valeurs.)

100voto

Adam Rosenfield Points 176408

Utilisez std::fill() :

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

30voto

Mark Ransom Points 132545

Si votre vecteur contient POD types, il est sûr à utiliser memset sur - le stockage d'un vecteur est la garantie d'être contigus.

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

Edit: Désolé de jeter un terme non défini à vous - POD est synonyme de Plain Old Données, c'est à dire les types qui ont été disponibles en C et les structures construites à partir d'eux.

Edit encore: Comme l'a souligné dans les commentaires, même si, bool est un type de données simple, vector<bool> est une exception intéressante et échouent lamentablement si vous essayez d'utiliser memset sur elle. Adam Rosenfield réponse fonctionne encore parfaitement dans ce cas.

2voto

Tim Finer Points 31

Une autre façon, je pense que je l'ai vu en premier dans le livre Meyers:

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

Son seul inconvénient est qu'il fait une copie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X