To follow up on Noah's answer, boost's format library allows for several different syntaxes, including printf like syntax. It works by overloading the % operator, and so at first appears a little strange. But, something I rather like, it allows you to reuse arguments. For example
cout << format("%1% %2% %1%") % 1 % 2 << endl;
will print
1 2 1
It's pretty versatile and if you can get used to the % signs everywhere, gives you the best of both worlds. As I agree, printf style is often much much easier.
http://beta.boost.org/doc/libs/1_43_0/libs/format/doc/format.html