There are only two kinds of loops: while and for. Both can be used for all purposes, but in general, a for loop is for a pre-determined amount of iterations (e.g. until i = 10, until i = array.size(), etc.) and a while loop is for conditional iterations.
A simple example:
For some reason, you're going to be holding your breath. There are two options:
-Hold your breath for 10 seconds.
-Hold your breath until you no longer can.
The first would be a for loop (it's going to be 10 seconds, no matter what happens) and the second is a while loop ('until you no longer can' could be 5 seconds or could be 50 seconds, depending on your ability and the moment).
dowhile is pretty much the same as a while with the exception that a while can skip the first iteration if something prior doesn't work out right.
A while will work in any instance that a dowhile will work and I think any performance gained to go with the added complexity is absolutely negligible (you perform the conditional one fewer times). I never use the dowhile.