Ответ 1
Краткий ответ
Быстрее: printf
Более гибкий: cout
Длинный ответ
По сравнению с семейством sprintf потоки С++ должны быть более медленными (в 6 раз, если я вспомню элемент Exceptional С++, Herb Sutter). Тем не менее, большую часть времени вам не нужна эта скорость, но вы должны быть уверены, что ваш код не будет прослушиваться.
И легко сделать что-то не так с семейством функций printf, будь то неправильное количество аргументов, неправильные типы или даже ввести потенциальную уязвимость безопасности (спецификатор% n приходит в голову) в вашем коде.
Если это действительно не нужно (а потом, это называется саботаж), почти невозможно ошибиться с потоками С++. Они легко обрабатывают все известные типы (встроенные, std:: строки и т.д.), И его легко расширить. Например, допустим, у меня есть объект "Coordinate3D", и я хочу распечатать его данные:
#include <iostream>
struct Coordinate3D
{
    int x ;
    int y ;
    int z ;
} ;
std::ostream & operator << (std::ostream & p_stream
                          , const Coordinate3D & p_c)
{
    return p_stream << "{ x : " << p_c.x
                   << " , y : " << p_c.y
                   << " , z : " << p_c.z << " }" ;
}
int main(int argc, char * argv[])
{
    Coordinate3D A = {25,42,77} ;
    std::cout << A << std::endl ;
          // will print "{ x : 25 , y : 42 , z : 77 }"
    return 0 ;
}
Проблема с потоком заключается в том, что их довольно сложно правильно обрабатывать, когда вы хотите указать формат некоторых данных (например, пробелы для чисел), и иногда вам действительно нужно идти быстро. Затем вернитесь к printf или попробуйте использовать некоторые высокоскоростные альтернативы С++ (FastFormat).
  Изменить: Обратите внимание, что серия тестов Thomas показывает интересные результаты (которые я воспроизвел прямо сейчас на своем компьютере), то есть:  cout и printf имеют схожие характеристики, когда один из них избегает использования std::endl (который очищает вывод в дополнение к выводу \n).
