Answer
A container owns its elements and manages their storage (vector, map). A range is any type providing begin()/end()—which includes containers, views, arrays, and generated sequences. Views are ranges that don't own data. So all containers are ranges, but not all ranges are containers.
Real-world example A function templated on a range accepts vectors, arrays, and lazy views uniformly.