Je sais que le titre est désordonné comme l'enfer, je ne pourrais pas mieux le décrire en si peu de mots. Considérez ce code:Enlever une chaîne du vecteur <string> à l'index défini dans le vecteur <int>
#include <vector>
#include <string>
using std::string;
using std::vector;
int main() {
vector<string> s = { "foo", "bar", "random_word" };
vector<int> i = { 0, 1 };
for (int n = 0; n < i.size(); n++) {
s.erase(s.begin() + (i[n]));
}
}
Je voudrais supprimer des éléments de vecteur s
basés sur les indices d'un autre vecteur i
. Le programme actuel est plus compliqué que cela, mais en quelques mots, cette boucle se bloque (même si elle compile bien, en utilisant Visual C++).
EDIT: Ceci est le code réel qui a causé le problème:
// The vector in which the elements to be deleted are defined consists of
// { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 } (the
// name is i)
// The other vector (s) consists of
// { "Bancheri", "Bertagna", "Buzzoni", "Canepa", "De Vita", "Di Bella",
// "Drago", "Esposito", "Fossati", "Francini", "Frontini", "Lorenzi",
// "Marusceac", "Miscio", "Padovani", "Scarfo'", "Sieni", "Thea Cioni",
// "Zunino" };
}
for (int p = 0; p < i.size(); p++) {
s.erase(s.begin() + (s[i]))
}
// This is how I fixed it:
{
int r = i.size() - 1;
while (r > 0) {
s.erase(s.begin() + i[r]);
r -= 1;
}
}
Comme vous pouvez le voir, je simplement fait une autre boucle qui va dans le sens inverse.
Vous devriez retirer de l'index le plus grand vers le bas. – Jarod42
@ Rakete1111 oui, corrigé maintenant –
Vous n'initialisez pas 'n'? –