En C++ se pueden declarar paquetes, que definen diferentes ámbitos para las variables, clases y funciones. Por ejemplo, a la hora de declarar variables, puedes hacer lo siguiente:
namespace paquete1 {
int a;
}
namespace paquete2 {
int a;
}
Ahi tienes dos variables que se llaman igual, pero cada una dentro de un paquete. Para acceder a ellas pondrias paquete1::a , o paquete2::a.
Una forma alternativa de hacerlo es poner 'using namespace paquete1'. Así le dices al compilador que aunque pongas solo 'a', busque dentro de paquete1 esa variable.
Ahora al tema. En C++, la mayoría de las funciones que antes estaban sueltas en C, ahora van dentro del paquete std. Y como sería un engorro tener que escribir std::cout y cosas de esas todo el rato, pos se suele poner 'using namespace std' al principio para poder acceder al paquete std.