printf() is a single function, whereas std::cout is a chain of functions. std::cout is a smart object - printf() isn't. printf() is used in C - std::cout is used in C++. And most importantly, std::cout is safer.
NB: This will not compile with a C compiler only C++ NB: For some reason most C++ compilers let you get away without scope resolution here as it should be std::printf("%d \n", 42);