Plus que débutant (niveau ignare) je bute sur cette instruction: for (--pos; a[pos] == 0; --pos);. Quelqu'un pourrait-il m'aider?
Merci d'avance.
Plus que débutant (niveau ignare) je bute sur cette instruction: for (--pos; a[pos] == 0; --pos);. Quelqu'un pourrait-il m'aider?
Merci d'avance.
Salut,
un for est une structure de contrôle assez simple, elle se décompose en trois parties séparées par des points-virgules :
- instruction d'initialisation (exécutée à la première entrée dans la boucle),
- condition(s) de bouclage (si l'instruction renvoie faux on sort de la boucle),
- instruction(s) itérative(s) (exécutée(s) à chaque passage dans la boucle).
Un for peut comporter un block de code (entre accolades) exécuté à chaque itération.
S'il n'en a pas il est suivi d'un point-virgule.
Avec ça tu devrais comprendre la ligne que tu nous présentes.
Plus je connais de langages, plus j'aime le C.
Hello,
a est un tableau, pos est un index pour le parcourir. Cette boucle apparait surement dans un contexte proche deAu final cette boucle recherche l'index du premier élément différent de 0, en partant de la fin (et seg fault si le tableau ne contient que des 0).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 std::vector<int> a; // le tableau à parcourir int pos = a.size(); // pos == taille du tableau for(--pos; a[pos] == 0; --pos); // décrémenter pos pour soit "sauter" le dernier élément, soit si pos == taille pour "pointer" sur le dernier élément, puis // tant que l'élément "pos" du tableau est 0 on exécute le corps de la boucle // ici le corps de la boucle se résume à ";", cad rien // puis on décrémente pos pour passer à l'élément suivant
Ca peut se réécrire (plus explicite, mais syntaxe plus compliquée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 std::vector<int> a; auto it = std::find(a.rbegin(), a.rend(), [](int elt)-> bool { return elt != 0 }); // ou peut être find_if, trou de mémoire *_* if(it != a.rend()) { // élément trouvé int pos = std::distance(a.rbegin(), it); int elt = *it; // ou elt = a[pos]; }
std::find_if (prend un prédicat) et non std::find (qui prend une valeur).
(Personnellement, j'utilise size_t pour les indices (mais il faut faire attention si on compte faire des "reverse" boucle avec).)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager