Вот мой ответ, который я использовал в своем приложении. Он показывает текст в центре экрана.
<TextView
android:id="@+id/txtSubject"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/subject"
android:layout_margin="10dp"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
Вероятно, scanf работает несколько быстрее, чем использование потоков. Хотя потоки обеспечивают большую безопасность типов и не должны анализировать строки формата во время выполнения, обычно у них есть то преимущество, что они не требуют чрезмерного выделения памяти (это зависит от вашего компилятора и времени выполнения). Тем не менее, если производительность не является вашей единственной конечной целью и вы не находитесь на критическом пути, вам действительно следует отдавать предпочтение более безопасным (более медленным) методам.
Здесь есть очень вкусная статья, написанная Хербом Саттером » The String Formatters из Manor Farm ", который подробно описывает работу таких программ форматирования строк, как sscanf
и lexical_cast
, а также то, что заставляло их работать медленно или быстро. Это вроде аналогично, вероятно, к тем вещам, которые могут повлиять на производительность между стилями ввода-вывода C и стилем C ++. Основное различие с форматерами, как правило, заключается в безопасности типов и количестве выделений памяти.
Существуют реализации stdio ( libio ), которые реализуют FILE * как streambuf C ++ и fprintf как синтаксический анализатор формата времени выполнения. Потоки ввода-вывода не нуждаются в синтаксическом анализе формата времени выполнения, все это делается во время компиляции. Итак, с общими бэкэндами, разумно ожидать, что iostreams будет быстрее во время выполнения.
Если вам важны как производительность, так и форматирование строк, обратите внимание на FastFormat Мэтью Уилсона библиотека.
edit - ссылка на публикацию в этой библиотеке: http://accu.org/index.php/journals/1539
Проблема в том, что cin
имеет много накладных расходов, потому что он дает вам уровень абстракции выше scanf ()
звонков. Вы не должны использовать scanf ()
вместо cin
, если вы пишете программное обеспечение на C ++, потому что это want cin
для. Если вам нужна производительность, вы, вероятно, все равно не будете писать ввод-вывод на C ++.
Даже если бы scanf
был быстрее, чем cin
, это не имело бы значения. В большинстве случаев вы будете читать с жесткого диска или клавиатуры. Загрузка необработанных данных в ваше приложение занимает на порядки больше времени, чем требуется scanf
или cin
для их обработки.
Я только что провел вечер, работая над проблемой в UVa Online (Factovisors, очень интересная проблема, проверьте это):
Я получал TLE (превышен лимит времени) на мои заявки. На этих сайтах онлайн-судей по решению проблем у вас есть ограничение по времени в 2-3 секунды, чтобы обработать потенциально тысячи тестовых примеров, используемых для оценки вашего решения. Для таких ресурсоемких задач, как эта, на счету каждая микросекунда.
Я использовал предложенный алгоритм (читайте об этом в дискуссионных форумах сайта), но все еще получал TLE.
Я просто изменил "cin >> n >> m" на "scanf ("% d% d ", & n, & m)" и несколько крошечных "couts"
Конечно, смешно использовать cstdio вместо iostream. По крайней мере, когда вы разрабатываете программное обеспечение (если вы уже используете c ++ вместо c, то пройдите весь путь и используйте его преимущества вместо того, чтобы страдать от его недостатков).
Но по мнению онлайн-судьи, вы не разрабатываете программное обеспечение, вы создаете программу, которая должна уметь делать то, что программное обеспечение Microsoft выполняет за 60 секунд за 3 секунды !!!
Итак, в этом случае золотое правило выглядит примерно так (конечно, если у вас не возникнет еще больше проблем с использованием java)