
Andrew Sutton wrote:
With the RV convention change that I proposed on github (always point before the first element that is out-of-order with respect to its predecessor, rather than the first that is out-of-order with respect to its successor), it would be exactly the same, so I think we may be stuck with this name, even though I agree that it sounds like it should return a bool.
I'm not sure I understand the recommendation. Are you saying that if I write:
auto i = is_ordered(f, l, r)
Then I should have:
is_increasing(f, i);
Or, writing using std algorithms:
auto i = is_sorted_until(f, l, r) assert(is_sorted(f, i));
I wondered about this when I looked at the docs and was going to suggest "the docs should be explicit about which iterator they return"; then I decided that there was (obviously!) only one thing that could sensibly be returned. I.e. if the input is 1,2,3,4,5,0,42,12 then the result should be an iterator referring to the 0 element. Surely this what it does, no?
On a side note, I think the algorithm can be trivially implemented using adjacent_find, and should have the same iterator requirements.
return adjacent_find(f, l, not2(pred));
Right, except that that returns the "wrong" iterator of the pair, i.e. it would return an iterator returning to the 5 in the example above. You can fix that by incrementing the iterator, but that has to consider the end case specially. Regards, Phil.