C++ hasn't always had namespaces; not named ones, anyway. There used to just be global stuff. i.e. all the stuff was scattered out on the floor for anyone to use. Messy, messy.
Then, they decided to let programmers define namespaces. This lets us take all our stuff, clean it off the floor, and put it into nice little packages. We can use what we want from each package without leaving everything else strewn all over the place. Standard C++'s stuff is all in one box, and it's called "std." It has a bunch of cool stuff in it... vector, string, ostream, pair, map, binary_function, istreambuf_iterator... stuff you use every day.
Now, think of "using namespace std;" as taking that box and dumping it all out on the floor. You get all that stuff plus about 12,000 other things you've never even heard of. That's the way used to be. That makes it easier to work with older programs that expect to have everything on the floor, but that's really the only reason to use it (that and teaching newbies C++).
Statements like "using std::vector" are the more civilized, more correct way of doing things. Think of them as taking a specific item out of the box and using it. It's more explicit, it's neater, it enforces the "least access" ideal, and it's just all around better practice.