0
votes

Pourquoi l'itération via un vecteur de char est plus rapide que l'itération via une chaîne en C ++

Je pratique un défi de codage où je dois inverser les voyelles dans une chaîne .

Ma première approche a échoué à cause de la limite de temps précédente. My première approche utilisant une itération de chaîne pour inverser les voyelles dans une chaîne. xxx

Ma deuxième approche en utilisant l'itération du vecteur de charme avait passé tous les tests. ICI est ma deuxième approche xxx

pourriez-vous expliquer pourquoi ma première méthode a échoué les tests, mais la deuxième méthode passa les tests


0 commentaires

3 Réponses :


1
votes

remplacer str = str + x; avec str.push_back (x); ou str + = x; , et vous Vérifiez probablement la même performance que possible avec vecteur .

str = str + x; fait une copie de STR , ajoute le caractère à cette copie, puis apporte une autre copie lors de l'attribution de STR . En conséquence, votre algorithme est quadratique, sans bonne raison.


0 commentaires

1
votes

C'est parce que vous faites str = str + x , qui crée une copie inutile de str , mais std :: vecteur :: push_back ou std :: string :: push_back appendez un caractère au vecteur ou à la chaîne, ce qui est beaucoup plus rapide que de créer une copie de STR .


0 commentaires

0
votes

str = str + x Cela crée une copie supplémentaire de STR lors de la copie. std :: vecteur :: push_back Cette ligne droite ajoute à la chaîne de vecteur


0 commentaires