difference_type usually denotes the type suitable to denote a distance in an array or similar. The following wording is from the allocator requirements, but whenever the standard talks about difference_type it means the same concept:


  a type that can represent the difference between any two pointers in
  the allocation model


The natural type for this is ptrdiff_t.

For the size_type it says:


  a type that can represent the size of the largest object in the
  allocation model.


The natural type here is size_t.

Now for the count of any elements in a range (or an array) does need at least the type suitable to specify the difference last-first. It seems most natural to chose that one. 

Why does the C++ standard algorithm "count" return a ptrdiff_t instead of size_t?

  Brian plays a game in which two fair, six-sided dice are rolled
  simultaneously. For each die, an even number means that he wins that
  amount of money and an odd number means that he loses that amount of
  money. What is the probability that Brian makes money on his first
  roll?


To find the probability, do we need to find the even numbers only. There are 36 outcomes from the two dies. So is there an easy  way to get the arrangements? 
