"printf" sends its output to the Standard Output, or "stdout". Most of the time that will be your screen on a command line application, or it may be redirected to the Standard Input (stdin) of some other program.
"cout" does the same thing, only it uses different buffers and different formatting rules. If you use "printf" and "cout" in the same program, you're asking for heartburn due to issues with different buffers. You'll expect your output to be intermingled, but instead, all of the buffer from one output command will be completed before starting the buffer from the other.
"cout" happens to be located in the "std" namespace (standard), and many times a programmer will start a file with the line:
using namespace std;
If that is NOT done, then you MUST use "std::cout" to specify explicitly what namespace the variable is located in.
You can also use "std::cout" when "using namespace std", but it's just redundant.