Хочу, наконец, перейти с делфи на с++, поэтому хотелось бы спросить, какую кто литературу посоветует? Когда-то начинал читать Страуструпа, но это жесть, я тогда голову сломал. Потом купил себе "Самоучитель С++" Шилдта, но в нем необходимы знания С. Сейчас решаю подряд задачи из книги Шеня "Программирование: теоремы и задачи", а что не знаю — ищу в интернете. Вроде нормально, но хочется более систематизированных знаний.
И еще вопрос: как отформатировать вещественное число в "cout"? Задать кол-во знаков после разделителя или отображать ли нули? Я искал, но находил примеры лишь для сишной функции printf.
cout.precision(количество знаков после запятой);
cout<<fixed<<x;
Или так:
cout << fixed << setprecision(количество знаков после запятой) << x;
Тоже переходил с дельфи на с++. Я просто решал задачи с informatics.mccme.ru, и то, что не знал искал в инете. И используйте scanf/printf по возможности, чем cout.
А чем cout хуже? Какие преимущества у scanf/printf? За ссылку спасибо, интересно.
UPD в принципе, я когда учил делфи, то тоже просто брал конкретную задачу, и искал в инете если не знал чего. Этот подход хорош, но можно упустить некоторые мелочи, которые вплывут позднее. Я вот, например, только недавно узнал, что в делфи есть простая функция, определяющая четное число или нет — хотя начинал учить язык еще лет 5 назад.
scanf/printf по умолчанию быстрее. Однако лечится sync_with_stdio(false), потому придерживаюсь противоположного мнения
Вы просто не умеете их готовить. scanf/printf мощнее, если ими уметь пользоваться. Например я сходу не умею cin'ом читать "пока символы из данного набора" или просто считать три числа в формате "12.04.2012". И определять сколько штук считалось тоже. И выводить как надо например в длинке с лидирующими нулями тоже не умею.
И о чем это нам должно сказать?
Можно аналог для printf("%0*d",baselen,v[i]); с использованием cout? Буду благодарен, я так делать не умею.
cout << setfill('0') << setw(baselen) << v[i];
Но я, вообще, не о том. Есть два механизма, один из них подходит лучше для одних задач, другой для других. Спорить, что из них "мощнее", не стоит.
Клево. Я не знал что так можно. Буду иметь ввиду. Давайте сойдемся на том что это дело привычки. Видимо с тем что спор бесполезен мы согласны оба.
Тогда, когда мне нужен scanf/printf, я их юзаю. Например, вывожу даблы я обычно printf'ом(хотя тут скорее дело привычки и нежелания 1 раз запомнить, как это делается цином).
Однако, зачем их юзать "по умолчанию", я не понимаю. Кроме того, что раздражает писать формат, так еще и описка в формате дает трудноловимые баги, да и менять формат надо, если тип переменной сменился. Я уж не говорю про I64d/lld здесь.
Про I64d/lld лечится дефайном, который разберется сам (см. любую мою посылку). Трудноловимые баги лечатся -Wall -Wextra -Werror. Дисциплинирует. Рекомендую. Но вообще на самом деле дело привычки. А sync_with_stdio(false)... С ним можно нарваться на случайно сделанный endl или еще какое-нибудь сбрасывание всего подряд. Или на еще какую-то нетривиальную реализацию. Я все таки предпочитаю пользоваться тем, что понимаю как работает.
Ну дефайн я в силах написать, спасибо.
Насчет -W*, да, согласен, справедливо, хотя как по мне костыльно.
А
sync_with_stdio
не кажется мне более непонятным, чем scanf, так что в целом не убедилВидимо, придется остановится на этом, хотя и писал ты эту фразу про строки компиляции:)
Вообще нет. Как раз про cin/scanf.
Cо scanf дофига проблем в задачах на строки (тут лучше cin).
Я когда-то давно давно переходил с Delphi на C++, но я к тому времени C++ уже довольно неплохо знал. Ускорил переход Topсoder с возможностью смотреть чужой код после контестов. Сейчас отлично и Codeforces для этого подходит.
Насчет литературы. Я бы все-таки посоветовал справиться со Страуструпом, сам с него начинал. В книге есть пугающие новичков вторая и третья глава, их можно опустить при первом чтении, а так вроде бы не особо сложное чтиво. Если совсем никак, можно попробовать, например, следующие книги, которые часто советуют новичкам:
Thinking in C++: Introduction to Standard C++
C++ Primer
Accelerated C++: Practical Programming by Example
Сам ничего из этого не читал, сказать ничего не могу. Насчет Шилдта... Вообще, я мало видел настолько критикуемых авторов, как он. Почти все его книги в свое время на accu.org получали оценку "Not recommended". Есть даже жаргонное слово :)
Успехов!