Beaucoup de réponses précises, mais je pense qu'il vaut la peine d'écrire l'équivalent de la boucle while.
for (u = b.size(), v = b.back(); u--; v = p[v])
b[u] = v;
Est équivalent à:
u = b.size();
v = b.back();
while(u--) {
b[u] = v;
v = p[v];
}
Vous pourriez envisager de refactoring pour le while() format que vous le traduire en C#. À mon avis c'est plus clair, moins d'un piège pour les nouveaux programmeurs, et tout aussi efficace.
Comme d'autres l'ont souligné-mais pour faire ma réponse complète-pour rendre le travail en C# vous auriez besoin de changer de while(u--)
de while(u-- != 0)
.
... ou while(u-- >0)
seulement dans le cas où u commence négatif. (OK, b.size()
ne sera jamais négatif-mais considérons le cas général où, peut-être quelque chose d'autre initialisé u).
Ou, pour le rendre encore plus clair:
u = b.size();
v = b.back();
while(u>0) {
u--;
b[u] = v;
v = p[v];
}
Il vaut mieux être clair que pour être laconique.