Bonjour à tous,
Comme exercice j'essaie d'écrire un générateur de nombres premiers à l'aide de la STL et d'itérateurs.
J'ai réussi à faire quelque chose qui fonctionne, mais il y a des détails qui m'ennuient.
Voici le programme:
Le résultat final est correct (le vecteur résultata contient 2, 3, 5, 7 comme prévu pour b=10). Mais voici la sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include <vector> #include <set> #include <iostream> using namespace std; int main() { int b; // obligé d'utiliser un set au lieu d'un vector pour s car on doit pouvoir supprimer des éléments au milieu du tableau. set<int> s; vector<int> t; // génère les prime jusque b b = 10; // on génère un set allant de 2 à b. for (int i = 2; i != b; i++) { s.insert(i); } int i = 0; while (s.size() != 0) { i++; cout << "Iteration = " << i << endl; t.push_back(*s.begin()); for (set<int>::iterator it = s.begin() ; it != s.end(); ++it) { cout << " s = " << *it << endl; if (*it % t.back() == 0) s.erase(it); } } cout << "++++++++++++++++++++++++++++" << endl; cout << "affichage des nombres premiers stockés dans le vecteur t" << endl; cout << "taille t = " << t.size() << endl; for (vector<int>::iterator it = t.begin() ; it != t.end(); ++it) { cout << "t = " << *it << endl; } return 0; }
Lors de l'itération 1, *it prend les valeurs 2, 3, 4 puis revient à 3. C'es là que je ne comprend pas comment fonctionne l'itérateur. Le problème vient a priori du fait que je modifie s dans le for et qu'on se mélange les pinceaux dans les adresses mémoires. Malheureusement je ne trouve pas d'explication sur ce qu'il se passe (je pense que lorsque je supprime un élement de s, ça décale tout vers la droite mais je ne comprend toujours pas pourquoi ça revient à 3 au lieu de passer à 5... Quelqu'un pourrait-il m'éclairer?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Iteration = 1 s = 2 s = 3 s = 4 s = 3 s = 5 s = 6 s = 7 s = 8 s = 7 s = 9 Iteration = 2 s = 3 s = 5 s = 7 s = 9 s = 7 Iteration = 3 s = 5 s = 7 Iteration = 4 s = 7
Partager