Namespace jak sama nazwa wskazuje jest to wykorzystywana przestrzeń nazw. Dzięki deklaracji na początku pliku "using namespace XXX" nie musisz dopisywać przedrostków przed każdą funkcją znajdującą się w tej przestrzeni. Najbardzie powszechnym przykładem jest użycie przestrzeni nazw std, jeżeli nie zadeklarował byś tej przestrzeni do przed każdym cin czy cout musiałbyś dopisać przedrostek std::. Po co są stosowane te przestrzenie? A po to, żeby unikać konfliktów nazw w dużych projektach, które wykorzystują dużą ilość bibliotek w których funkcje, klasy i obiekty mogą mieć te same nazwy.
Pozdrawiam!