Sudoku Grid special purpose Iterators
In my first quick scan through, here are some things I want to bring up:


If you are going to overload operators, do it the way the users of the language expect, or don't do it at all.  I expect operator++ to return something, not be a void.
Does block_offset really need to be public?
On that same note, do your actual concrete implementations of the iterators need to be public, since you have methods to create them that are public?  Would it make sense for anyone to ever want to create them a different way?