we use size_t when we deal w/ size and we want to be able to express largest size for a variable like in a calculation or data structure so the size is ALWAYS guaranteed to be able to represent 2^32 distinct positive integers
No, size_t is not necessarily an unsigned int. It is an implementation defined unsigned type, which means it could be an unsigned char or maybe unsigned long or maybe even an unsigned int. Never assume a size_t is a particular size.

From final draft C++11 standard: section 18.2 Types [support.types]

6
The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size
in bytes of any object.
Many of the standard functions use size_t. For example the std::vector.size() function returns a size_t. You should always use size_t when dealing with functions that use or return this type.

We should stick to size_t for portability (b/c of size issues across different machines where size is too little or something
But remember that size_t is not a fixed size. Today most systems may typedef this to unsigned int but tomorrow these same systems may redefine size_t to a different sized type.


Jim