Должен ли я смешивать использование printf с std :: cin? - PullRequest
2 голосов
/ 06 апреля 2020

Update2: буфер - это то, что я искал во втором вопросе. Спасибо.


Обновление: спасибо за ответы. Я буду больше изучать и практиковать потоки ввода / вывода.

Еще один вопрос, если вы не возражаете:

У меня есть некоторый опыт в области химического машиностроения, и нам часто приходится сталкиваться с накоплением сверх время между потоками ввода / вывода.

Это может быть странным вопросом, учитывая, что цифровые сигналы более или менее совершенны (?) по сравнению с физическими материальными потоками. Но, практически говоря, есть ли сценарий ios, что-то подобное может произойти?

Возможно, важной областью будет сетевая безопасность?


Я пытаюсь практиковать C ++ параллельно C, и я знаю, что C ++ намного более универсален и безопасен, когда речь идет о таких вещах, как стандартный ввод / вывод.

Тем не менее, это невероятно неприятно пытаться разбить предложение на маленькие куски, используя std::cout. Работа становится экспоненциально утомительной, когда вам нужно набрать длинную строку. Это просто слишком противоречиво по сравнению с более простым printf.

Например:

// The same line of code with printf()
     printf("#%2d", i);

// Compared to C++ where I have to include the formatting library.

Мой вопрос, безопасно ли использовать printf строго для вывода и std::cin для ввода, если безопасность - весь смысл библиотеки iostream?

1 Ответ

3 голосов
/ 06 апреля 2020

Итак, ваш вопрос: безопасно ли смешивать использование printf с cin?

Ответ - да! Да, мы можем, вы можете использовать C функции и библиотеки в C ++, хотя библиотеки C ++ намного безопаснее и должны быть оптимизированы, но иногда printf работает намного быстрее, чем cin, но это зависит от того, что вы пытаетесь Распечатать. printf должен проанализировать введенную вами строку, в то время как cin также должен выполнить некоторые сложные вещи. Также, как указал @Sebastian, скорость будет зависеть от того, насколько вы буферизуете sh входной буфер.

Предположим, я хочу напечатать строку «Hello, World» 10000 раз без новой строки, используя printf и std :: cout, попробовав это на своей машине, я получил следующий результат:

printf занял 11619360 [мкс] -> 11.61936 [с]

cout занял 3243804 [мкс] -> 3.243804 [s]

Ниже приведен следующий код:

#include <iostream>
#include <chrono>
#include <stdio.h>
int main()
{
    std::chrono::steady_clock::time_point time1 = std::chrono::steady_clock::now();
    for(unsigned int i=0;i<10000;i++)
    {
        printf("Hello, World");
        //std::cout << "Hello, World";
    }
    std::chrono::steady_clock::time_point time2 = std::chrono::steady_clock::now();

    std::cout << "Duration " << std::chrono::duration_cast<std::chrono::microseconds>(time2 - time1).count() << " [µs]" << std::endl;
    return 0;
}

Здесь std :: cout был быстрее, чем printf, но все зависит от того, что вы пытаетесь напечатать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...