J'ai lu sur Internet que si vous effacez un std::vector
répétitivement (dans une boucle serrée), il pourrait être préférable d'utiliser resize(0)
au lieu de clear()
, car il peut être plus rapide. Je ne suis pas certain de cela. Quelqu'un at-il une réponse définitive à cela?Vecteur effacer vs redimensionner
Répondre
Je suppose que vous voulez dire resize(0)
au lieu de setsize
, et appelant qu'au lieu de clear()
, et que vous parlez std::vector
. IIRC une réponse récente discuté ce (ne peut pas trouver le lien), et sur les implémentations STL modernes, clear()
est probablement identique à resize(0)
.
L'effacement préalable d'un vecteur peut libérer toute sa mémoire (sa capacité est également réduite à zéro), entraînant des réaffectations lorsque vous recommencez à ajouter des éléments, contrairement à resize(0)
en conservant la capacité de sorte qu'il y ait moins de réaffectations. Cependant, je pense que dans les bibliothèques modernes de STL, il n'y a pas de différence. Si vous utilisez une ancienne implémentation STL, ou si vous êtes simplement parano, resize(0)
pourrait être plus rapide.
Ou en utilisant MFC, sa classe array (ie vector) a un setize qui est effectivement un redimensionnement –
Je ne sais pas sur les conteneurs de MFC, le vecteur OP dit donc je supposais qu'ils signifient 'std :: vector
Cette implémentation sonore spécifique, est un travail pour vous, votre bibliothèque et un profileur. Mais comme je le vois, je ne vois pas pourquoi resize (0) devrait être plus rapide quand les deux vont en effet appeler erase (begin(), end()).
Regarder Dinkumware source STL, à la fois appeler efficacement erase(begin(), end());
clear()
est un peu plus efficace, sans surprise., Comme il l'a juste un cas à traiter. mais je ne m'attendrais pas à ce que ce soit mesurable.
Il semble y avoir une différence entre clear et resize (0) lorsque le vecteur contient des objets d'une classe qui n'a pas de constructeur par défaut. Par exemple, le code suivant compilera:
#include <vector>
class A {
private:
int x,y;
public:
A(int x,int y) :x(x), y(y) {}
};
int main() {
std::vector <A> aa;
aa.clear();
}
Mais si vous remplacez le aa.clear()
par aa.resize(0)
, vous obtenez une erreur de compilation:
error: no matching function for call to 'A::A()'
Je suppose que c'est parce que le redimensionnement a besoin du constructeur par défaut afin qu'il puisse par défaut construire de nouveaux éléments si vous redimensionnez à une taille plus grande que la taille actuelle. –
- 1. Pourquoi ne pas redimensionner et effacer fonctionne dans GotW 54?
- 2. Vecteur vs Collections.synchronizedList (ArrayList)
- 3. J2me - Tableaux vs vecteur?
- 4. Redimensionner vs Recadrer
- 5. Comment effacer des entrées de vecteur en C++?
- 6. désactiver la valeur de remplissage de vecteur sur redimensionner? C++
- 7. redimensionner jpg à l'intérieur VS 2008
- 8. Images vectorielles Quartz2d vs Description du vecteur OpenGL?
- 9. ActionScript 3 Vecteur. <T> VS. Array
- 10. PIL vs Python-GD pour recadrer et redimensionner
- 11. view-port redimensionnement vs document redimensionner dans IE
- 12. Vecteur d'initialisation de vecteur
- 13. vecteur de vecteur
- 14. Vecteur 2D au vecteur 3D
- 15. C vecteur comme char *** vecteur
- 16. std :: le vecteur est très lent?
- 17. Comment puis-je éviter une erreur de segmentation tout redimensionner un vecteur comme celui-ci
- 18. vector redimensionner() remplissage automatique
- 19. Comment créer Vecteur de vecteur dans R
- 20. std :: map :: effacer la boucle infinie
- 21. Redimensionner l'image en Java. Comment redimensionner
- 22. Redimensionner un graphique sur parent div redimensionner
- 23. NSOpenGLView redimensionner sur la fenêtre redimensionner
- 24. template vecteur
- 25. vecteur d'objets
- 26. C/C++ Serialize Rapide: Boost vs Cpickle vs JSON vs tampon de protocole
- 27. Vector initialisé avec la taille, impossible à effacer
- 28. C++ - question de vecteur STL
- 29. Redimensionner flash.media.Video
- 30. extendedDataTable redimensionner
Pouvez-vous essayer dans les deux sens et nous dire comment ça se passait? –
supposons que vous voulez dire 'resize (0)'? – Roddy