Thaddy schrieb:

The comparison in the UTF-8 string example is very questionable. First ch(i) is not equivalent to ch, not even closely related, and the claim of O(N^2) operations deserves an proof - IMO it's simply wrong.

Yes, this caught my eye as well: O(N^2) seems only the case if "length" would be evaluated every time.

This would apply to zero-terminated C strings, but not to counted Pascal strings. Most probably the text was copied from a C site, and that essential difference was not taken into account in the Pascal adaptation.

> Since you should not modify the index
(although this is possible with some tricks in Delphi) the compiler should optimize it away. If you look at the algorithm, however, the statement is correct: it implies/reads: "evaluate length every iteration", whereas "for..in" evaluates the index value only once.

This also is a weak argument, since the behaviour of the iterator is not taken into account. When the iterator checks the length before moving to the next element, and the determination of the length would be O(N), then the order of the iterated loop still is O(N^2).


But you spot an essential pro of iterators: the user does not have to know about the implementation of the container, and can not choose a wrong function for the loop termination condition.

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to