Thanks all for your insightful replies. In summary I will probably:
not use last in this context anymore,
mark BrowserUK's version as the most maintainable one, that I really should be using,
often use tobyink's version, just to save one line of code,
and examine the iterator's interface carefully to make sure nothing unexpected can happen.
I also share Laurent_R's view that there should not be any taboos related to breaking out of loops as long as it helps to make the code clearer and supports the intention of the coder.