Спасибо за страдания мои: За тысячестраничные талмуды, За всратые олдфажные гуи За NULL'ы и взаимные инклуды.
Спасибо, что мой препод-алконавт Не знал, как подключать библиотеки. За goto, за стандарта тухлый драфт, За комитет, застрявший в прошлом веке.
За SFINAE спасибо, за segfault, За void main и мудрости Алены, За Герба, положившего свой болт На крашащие студию шаблоны.
Спасибо за безграмотных юнцов, Упорно в тред постящих говнолабы В надежде, что анон в конце концов Решит их или даст совет хотя бы.
За все я благодарен C++ - Пока сквозь дебри путь держу отважно, Я - программист, а не макак-индус. А остальное, в сущности, неважно.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Q:Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:Окей, я решил вкатиться. Какие же книги мне читать? A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование: Следует пролистать все перед переходом от лаб к написанию настоящего софта. Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать. Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Тонкости языка (для гурманов): Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q:Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q:Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей. A: Вот тебе блоги, факи, референсы и всякое такое:
Q:Я готов начать погроммировать! Куда мне писать код? A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q:Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A: Без проблем:
Q:Мне надоело писать велосипеды, какие у вас тут популярные либы? Q:Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература: Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении: libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se SFML - работа с графикой и аудио - http://www.sfml-dev.org FLTK - графические интерфейсы - http://fltk.org
Q:Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>663494 (OP) >эта смищная картинка с самой блевотной игрой в истории человечества >этот унаследованный стиль обиженки >этот костыль, собирающий статистику
Компилируем его, получаем исполняемый бинарный файл. Как из этого бинарного файла получить что-то типа такого >"\x31\xf6\x4d\x31\xff\x66\x41\xbf\x1f\x16\x66\x41\x81\xef\x10\x11\x41\x57\x49\x89\xe7\x48\xbf\xd0\x9d\x96\x91\xd0\x8c\x97\xff\x48\xff\xc7\x48\xf7\xdf\xf7\xe6\x04\x3b\x57\x54\x5f\x41\xff\xd7" ?
>>664054 Чесно говоря, я недавно книжку скачал и дошёл до первых глав с программированием. Но Кармак-то гений был, знает компьютер отлично. А я мало что знаю.
>>664063 Но я хочу учить не мертворождённый язык. Тем более что я слышал что игры делают в 90% случаев на с++. Ладно, сегодня отдохну, а завтра за работу.
Изучаю книгу "Абстракция данных: стены и зеркала". Дюже удивился, что даже в методе вставки элемента в произвольную позицию списка там делаются проверки на неотрицательность позиции и проверка того, выделилась ли память для ноды, или у калькулятора ее не хватило, и в случае фатала выбрасываются исключения. Это все нужно в реальной работе, или такая дотошность избыточна?
>>664086 Если ты пишешь зачем-то велосипедный контейнер, то да, обязательно. Но обычно ты можешь использовать готовый список, например, std::list, в котором все проверки и исключения инкапсулированы.
>>664111 Для простоты же. Обычно используется size_t и т.п. >>664099 На собеседованиях тебя не заставят писать что-то с учетом всех деталей, как для продакшена. Могут попросить перечислить, какие ты бы сделал проверки, но не более того.
Смотрите, есть задача напечатать список в обратном порядке. Интуитивно я понял, как ее решать, но не могу объяснить себе, почему после вывода последнего элемента выводятся все остальные с конца.
При вызове функций в стек пушится кадр с переданными аргументами, адрес возврата, EBP и создаются локальные переменные. Интересен момент, когда произошел последний вызов функции. Мне кажется, надо было писать std::cout после скобок, тогда было бы проще разобраться. Вот произошел последний вызов с аргументом NULL, и мы оказались сразу за скобками, где std::cout. Печатаем и выполняем ret, из стека выталкивается кадр. Что теперь? Когда вышли из последнего вызова, то снова попадаем на строчку, где происходит печать и т.д.? Объясните мне.
>>664199 Ну представь себе вертикальную стопку книг. Ты накладываешь одну книгу на другую (адресс возврата, локальные переменные и т.д.). С каждым вызовом функции ты накладываешь новые книги. Когда ты выходишь из функции, то ты убираешь книги. На самом деле стек растет вниз, а данные мы никак не убираем, а просто перемещается на этот адрес возврата.
>>664220 Стек я себе представляю, я не могу себе объяснить, почему печатается предыдущий элемент. Мы выходим из вызова предыдущей функции, и - что? Что напечается? Данные из элемента, у которого next передали в функцию, из которой только что вышли?
>>664254 Ну представь, что ты долго раскручиваешь в дизассемблере небольшую программу, которая непонятно как работает. И наконец у тебя складывается полный образ этой программы, ты представляешь все переходы и видишь весь алгоритм. Вот это и есть понимание, а не "карач там функция вызывает сама себя)))"
>>664111 Когда тебе нужно вычесть из unsigned, ты можешь получить отрицательное число. Страуструп и ко сами признались, что зря стали использовать size_t для контейнеров
>>664598 Ну и это не делает им чести, ибо беззнаковость вписывается в идеологию языка. Лучше изредка делать лишние проверки, чем все время держать половину области значений неиспользованной.
Сапчен. тут крч у меня эклипсина ругается. проектик с мейкфайлом и синтаксический анализатор все фичи С++11 выделяет ошибочными все работает но глаз щипит по сути нужет путь к верной stl папочке как лечить? куда рыть??
>>664912 >cin>>n,m; Гугли оператор запятая. Сначала выполнится (cin>>n), а потом (cin>>m). >зачем в string оба метода size и length Для удобства. Все привыкли что длинна строки а не размер. А size скорее всего есть потому, что он есть во всех контейнерах.
>>664921 Зачем или почему так? У тебя преобразовывается -1 в тип unsigned. Его значение будет равным (-1)%(2^32). И будет равным 2^32-1. Что точно больше 5.
>>664925 >Зачем или почему так? Зачем. Можно же просто все unsigned больше отрицательных. Или не -1 в unsigned преобразовывать, а 5u в signed. Хотя и тут могут быть переполнения. Неужели правильно работающего варианта не сделать?
Есть одна задача. Решая в лоб проверяю каждую подстроку и получаю 70% балов. Пытаюсь решить за O(n) и получаю 50%. Условие на пике моё решение здесь https://ideone.com/VrxvVl На тесте 8 6 (())(()) он посчитал ())(() правильно скобочной последовательностью т.к. не обратил внимание на ())((), а смотрел только на крайние скобки. Как исправить чтобы задача решалась за O(n)?
>>665093 Оператор[] должен вернуть объект, у которого есть оператор[]. Если оператор[][] записать в виде методов, то будет obj[j] => obj.operator[](i).operator[](j)
>>665289 Ну тогда да или прокси класс, или operator[] может возвращать одномерный массив, тогда возможны вызовы с [][] - но это естественно не для всего подойдет.
Анон, есть IDE для ньюфага? Лучше всего что-то типа Notepad++, но с компилятором. CODE:: Blocks реально монстр, раньше писал на Dev-C++, но он протух уже год как. VS - это просто пиздец, я же только хеллоуворды пишу пока.
>>665337 Я серьезно. В свое время от блоков, бобов и эклипса обосрался, а как увидел не менее монструозный гринхаус — сразу стало норм. Так что перепробуй сначала все большие IDE, а потом попробуй SciTE и geany.
>>665337 Тебе что нужно от IDE? Assistants? Бери Eclipse или CLion или QtCreator Система сборки? Бери CMake/QMake и не юзай IDE вообще. Дебагер? Бери что угодно. VS он боится, охуеть вообще.
>>665361 > Мой алгоритм работает за O(n) Если ты про >>665250 то там квадрат - один цикл по всей строке, второй внутренний цикл по подстроке не константного размера (размер зависит от условия и может быть порядка размера входной строки). Если у тебя другой алгоритм то судя по "Напиши функцию AreParenthesesBalanced" у тебя тоже там квадрат так как скорее всего на некоторых итерациях (число которых не константно) ты будет просматривать всю подстроку не константного размера.
>>665378 Не надо на меня гнать. Алгоритм конечно хуйня, но далеко не квадратичный. В лучшем случае будет ровно два обращения к каждому элементу, например. >>665384 Просто, без задней мысли, открываешь ideone и заливаешь!
>>665397 Таким образом у тебя квадрат будет. Кроме полного прохода по входной строке, также на неконстантном количестве итераций будет проводится проход (вызов AreParenthesesBalanced) по подстроке не константного размера (которая еще и может быть размером с входную).
Поясните, у меня вопрос - что такое литералы. Как я понял, литералы есть символьные 'q' и строковые "string", это как бы текст в кавычках. Я всё правильно понял?
>>665632 Ты можешь написать x = y, с переменной справа, а можешь написать, скажем, x = 1. В этом случае 1 это литерал, т.е. константа, заданная прямо в коде. Есть числовые литералы, булевы, строковые, символьные, а еще пользовательские, когда ты сам задаешь constexpr-конструируемые значения при помощи специального синтаксиса.
>>665646 И еще подвопрос, он вроде в книге еще не рассматривался, поэтому я не могу ответить: Сформулируйте правило, помогающее решить, безопасно ли то или иное преобразование типов?
>>665653 Это наверное про widening и narrowing преобразования. Преобразования в тип который включает в себя все значения исходного типа безопасно, остальные случаи нет.
А если у меня есть: std::vector<int> v{1}; auto n = v[0]; , то auto у меня будет int или std::vector<int>::value_type? И как вообще можно проверить какой тип в переменной auto?
Была задачка написать что-то типа fizzbuzz'а, но рисовать спиральку квадратную. По выводу видно https://ideone.com/nZWJkc что должно делать и как вырвиглазно сделал я. Попробуйте сами будет весело. А ещё реквестирую версию моей программы с массивом указателей на функции.
Анон хочу написать свой первый фтп клиент на qt. Подрубился к фтп, работает всё. Решил сделать его не консольным, заебенил listview. И теперь в гугле не могу найти, как в этот лист запихнуть файлы из фтп. Подскажите какой метод использовать, чтобы запихнуть. Понятно что ftp->list() передаёт мне данные, как я понял, но как пихнуть в лист нихуя не понимаю. Помогите аноны!
Есть чат сервер на питоне, который печатает айпи клиента при коннекте. Нужно эти айпишники выводить в textbrowser. Так вот, как от QProcess получать сигнал во время выполнения программы, а не после ее окончания? readyRead() и readyReadStandardOutput() не работают - весь output печатается в textbrowser только после того, как сервер падает.
Ананасы, такой вопрос. Наверное не совсем по крестам, но всё же: посоветуйте книгу по OpenGL на Mac. Во всех туторах/книгах, которые я находил, примеры были с использованием ссаного WinAPI, я попробовать OpenGL хочется.
Крестаны, сегодня наткнулся на Juce. И сразу задался вопросами. Как так получилось, что за пять лет моих крестостраданий я впервые о нем слышу? Его кто-нибудь вообще использует? Чем оно лучше Qt или, убереги патлатый, gtk+этовсё_от_гнома?
Могу ли я используя вектор присвоить значения сразу, как я делал это с массивами в С? например вместо vector <string> alph(3); alph[0]=0; alph[1]=1; alph[2]=2;
дописать сразу в первой строке. например с массивом было бы что-то примерно alph[3]={0,1,2}; help
Анон, у меня проблема. Я не понимаю указатели. Вернее я понимаю их суть, но не могу понять где в коде лучше использовать указатели, а где обычные переменные? Крестаны, объясните доступно.
Верно ли то, что результат вычисления CRC16 на little endian и big endian ЭВМ будет одинаков? uint32_t number = 0xffaaccbb; uint16_t crc = crc16(CRC_INIT_VAL, (uint8_t*) &number, 4);
>>666116 >что это не плюсы. Мамка его не плюсы. Докажи ему, приведи пример, что самая лучшая оболочка в nix системах написана с использованием этой библиотеки. Если кукарекает на слоты, расскажи неучу, что в boost тоже есть сигналы и слоты. А если он скажет что boost не кресты, то можешь отчисляться из этой шараги, ты там все равно ничему не научишься.
>>667282 Есть два стула. Эти два стула надо поменять местами. Вот ты смотришь на эти два стула, и в воображении представляешь, как они сменили положение. Что быстрее, поменять эти два стула по настоящему, или просто представить, у себя в голове, что они сменили место? А теперь представь, что эта хуита, про "мысли материальны" реально работает. Или у тебя есть огромная куча говна, но ты пока не знаешь, чем и как эту кучу будешь убирать, допустим это зависит от того, какова структура этого говна. Что ты будешь делать? Перетаскивать гавно то к одному, то к другому инструменту? А может еще и скопируешь это гавно для того чтобы проверить какой инструмент будет удобнее? В любом коде, где можно избежать копирования или смещения реальных данных, используй указатели/ссылки. Простейший пример. int f(int shit){ shit = shit + 1; return shit; } Если ты не будешь использовать тут указатели/ссылки, это дерьмо будет копироваться, а возвращаться совсем другое дерьмо. Так, в твоей памяти, в конце концов будет столько говна, что ты уже ничего не сможешь поделать.
>>663494 (OP) Есть одна dll, которая активно использует стандартные потоки С++. Есть один движок, который из своего компилятора выкинул эти самые потоки. В результате движок нормально работает с Debug версией .dll, но при Release версии вылетает. Как сделать так что бы в Release версии в .dll принудительно оставили все для работы с потоками?
Могу ли я используя вектор присвоить значения сразу, как я делал это с массивами в С? например вместо vector <string> alph(3); alph[0]=0; alph[1]=1; alph[2]=2;
дописать сразу в первой строке. например с массивом было бы что-то примерно alph[3]={0,1,2}; help
Аноны, хелп. Есть Одна Задача на ПОИСК С ВОЗВРАТОМ, суть ее в том, что в некую фирму надо нанять n рабочих на m должностей. При этом есть матрица доходов каждого из рабочих, на всех этих m должностях (обычная матрица, где строка - номер должности, столбец - номер рабочего, значение - доход фирмы при назначении его на эту должность). Необходимо исходя из этого подобрать рабочих так, чтобы фирма имела максимальный доход.
Застрял как раз на бектрекинге, с файла матрицу считал, создал матрицу структур и занес туда все эти данные. Идея была в том, чтобы сначала выбираю на первую должность рабочего с максимальной прибылью, потом на вторую должность так же выбираю рабочего с максимумом и тд, а если этот рабочий уже назначен, то возвращаюсь назад.
Но это нихуя не работает, видимо я не уловил сути бектрекинга, а в интернетах инфы про это толком нет, кроме 500 символов на вики и одного примера.
Помогите хотя бы на словах описать идею реализации этой программы.
Это еще не учтено, кстати, что должностей может быть меньше/больше, чем претендентов, ну да похуй
>>667408 > то возвращаюсь назад Ну вот там куда ты возратился должен находится список рабочих. Ты сначала идешь по первому, если вернулся то помечаешь первого как пройденого и идешь по второму. Если вернулся - помечаешь второго и идешь по третьему и т.д. Алсо у тебя жадный алгоритм который не гарантирует оптимального решения.
>>667340 Не думаю. В CRC применяется деление многочленов из конечного поля Галуа, которые представлены вектором коэффициентов, и если ты сменишь endianess, то коэффициенты расположатся в обратном порядке, и это будут уже другие многочлены.
>>667419 Да-да, именно так я и пытаюсь организовать: есть матрица структур РАБОЧИЙ, где как раз имеется его порядковый номер, доход с определенной должности строка, столбец и переменная, куда я буду заносить значение включался ли он в список или нет. Но вот дойду я допустим до 5-6 должности и пойму что первый рабочий был бы эффективнее тут если он на первой должности имеет максимум дохода и на 6, но разница между следующим по списку доходом меньше в первом, чем в 6 Что в таком случае делать? начинать проход с начала?
Месье, а вы не путаете cmake с make? Ninja и make - две разных билд системы, которые не взаимодействуют. А вот cmake как платформонезависимая билдсистема-прокси умеет генерировать билд файлы и того и другого.
>>667399 >Когда пытаешься использовать ifstream например, просто читать/писать. Я спецом все комментировал чтобы исключить свое говно.
Не комментить надо, а дебагером пройтись. А еще лучше проверить параметры линковки твоей либы. Вангую, что ты используешь билдсистему двига и для твоей либы используют те самые параметры, что убирают fstream. Бинарнику, который подгружает твою либу похуй на все, что не касается экспортируемых символов либы и в самой либе можешь устраивать любую содомию.
>>667548 Эту комбинацию запоминать или стирать? Я так понимаю запоминать надо только тот, который имеет лучшую позицию, те если пятый работник смотрится лучше на третьей должности, чем на первой, то возвращаясь назад я запоминаю его, чтобы с него не начать. Правильно? Но исходя из всего этого никакого алгоритма не выходит толком, точнее алгоритм может какой-то и есть, но это совсем не прхоже на бэктрекинг
>>667557 Тебе нужно понять что такое бектрекинг или решить задачу? В случае если ты решил что пятому работнику лучше будет на третьей должности (а она занята) то ты возвращаешся к хуиле кторой сидит на третьей должности и перемещаешь его дальше из тех что он не занимал еще (тоесть на четвертую) и потом начинаешь спускаться ниже.
>>667630 Бесполезная хуйня и табличка по ссылке и возможная таблица контейнеров. Ты либо знаешь все эти структуры данных и можешь вывести эту оценку как нехуй делать, либо ты макака, которая не знает, что делает.
Тоже самое с контейнерами. Там даже по названию понятно, какая структура данных лежит в основе контейнера.
>>667572 >>667572 Пытаюсь понять трекинг и решить задачу, без понимания же хуй выйдет. Пс, есть как с тобой связаться? Позадаю вопросы, если не влом тебе конечно. Оче интересная задача, хочется с ней разобраться не ради плюсика в зачет, а для себя
>>667913 У тебя не сильно подходящяя задача, так как кроме самого бектрекинга тебе нужно еще и оптимизировать (так как нужен бектрекинг то это метод ветвей и границ). А оптимизации NP-полных задач это посложнее бектрекинга. Его лучше на чем-то типа поиска пути в лабиринте рассматривать. А так ты на слишком большой кусок замахнулся, желательно дробить темы для изучения.
Привет всем. Я учил базу языка C++ уже пару месяцев, задрочил консоль до дыр. Скакал по учебникам, делал задачи, веселился. Теперь встал вопрос о практическом применении. Я решил взять фреймворк QT для начала, но мне интересно, хватит ли мне моих знаний. Из базы выучил почти все, исключая STL и boost, но в этом и проблема: смогу ли я учить QT, если не знаю этих библиотек? В классах вполне шарю, читал книжку по ООП, в низкоуровневой части тоже пока что проблем нет.
>>668054 Скорее дико надрачивался на консоли, так как всякие серьезные дядьки говорили, что если ты не умеешь ваять чудеса в консоли, то тебе не стать программистом. А сейчас понял, что меня где-то наебали.
>>667937 Изучил поиск пути в лабиринте, суть уловил, возможно не полностью. Но ведь там дойдя до тупика мы просто возвращаемся назад, отмечая тупиковые клетки как посещенные. У меня ж так хуй выйдет, погуглил мою задачу, среди похожих только куски решений венгерским алгоритмом, что не совсем необходимо мне. Ладно, спасибо за помощь, анон, буду сидеть и пытаться что-то сделать с этим
>>668389 Если тебе нужен именно бектрекинг тебе нужно понять как представить все возможные комбинации назначений в виде дерева. В корне находится первый сотрудник, от него отходят ребра соотвествующие всем возможныи назначениям. Наследующей уровне несколько вершин соотвествующие доступным назначениям второго работника при соотвествующем назначении первого сотрудника (тоесть от них будет отходить уже на одно ребро меньше чем от первого, так как одна позиция занята), на следующем уровне для третьего и т.д. В самом низу у тебя должно получится n! узлов (листьев) каждое из которых соотвествует одному из возможных вариантов назначения сотрудников. Бектрекингом будет поиск в глубину по этому дереву. Потом тебе останется научится как можно раньше узнавать тупиковые ветви (в которых гарнтировано не будет оптимального решения) и сразу их отбраковывать и возвращатся назад. Но в любом случае это не эффективный способ, так как сложность n!, а у чуваков вон вроде есть за куб решение (венгерский алгоритм).
Ананасы, поясните, пожалуйста, за универсальные ссылки в c++ 11. Нихуя понять не могу, что за rvalue, lvalue - это я еще более-менее усваиваю, а вот когда идет речь о том будет ли применяться копирование или перемещение объекта, переданного по ссылке понять не могу. Читаю Скотта Мейерса, и понимаю, что вот тут то полный пиздец. Либо там все достаточно просто и он развел базар на пол-книги, чтобы продать ее. Посоны, помогайте.
>>669144 Общее правило такое: если есть && сущность (параметр, переменная, что угодно), которая инициализируется с выводом типа (при помощи auto, аргумента шаблона и т.п.), то это универсальная ссылка, для которой выбор между rvalue и lvalue определится инициализирующим значением при выводе типа (например, auto && x = 1 будет rvalue, a auto && x = y - lvalue).
>>669170 Ну и что? Это другое правило. Универсальные ссылки говорят не о "подходит", а о "является". Например, если T && x выведется в rvalue-ссылку, то это один раз жестко зафиксируется, и не получится потом пихнуть туда lvalue.
>>669395 > что я могу в игры он умеет играть в игры -- берём!
написать сможешь, да это проверить легко прямо на собеседовании, задав пару простых вопросов на понимание. к примеру: 1. чем отличаются между собой tcp от udp? 2. как бы ты реализовал проверку доставки пакетов при использовании udp (свой rudp)? 3. и платиновый вопрос на общее знание нетворкинга. ты запускаешь консоль и вводишь в ней ping site.org. какие стеки протоколов/протоколы используются, что вообще происходит?
>>669926 Макака, плиз. То, что ты знаешь какую-то ненужную хуйню - не делает ее какой-то исключительной, а тем более не обязывает остальных знать ее. Рассказываешь, как это знание тебе пригодилось или идёшь нахуй.
>>669930 у меня overдохуя историй, где это всё пригодилось ибо я ебусь с нетворкингом каждый день(рассказывать их тебе я не собираюсь ибо иди нахуй, мудила). он спрашивает про графу нетворкинг в cv. я ответил. вопрос про пинг самый платиновый на собеседовании для нетворкинга. а чего ты петушишься, я не понимаю)))0)
>>669945 В данном случае петушишься ты, обосрав меня за то, что я задал вопрос. По одному посту ты уже решил, что я умею, а что нет.Я знаю такой тип людей, вас объединяет синдром вахтера. Распускай дальше свой павлиний хвост, петушком ты от этого быть не перестанешь.
Думаю, в этом треде могут знать, как использовать use after free уязвимости. А то есть одна в винде дыра, и фикс есть - а эксплойта для исполнения команд - нету. Надо исправить.
>>669870 1. TCP гарантирует корректную передачу данных. UDP - нет. 2. Самый простой путь - как в sftp, через ACK для каждого пакета. 3. ICMP через UDP. Вроде так.
>>669958 Ну и научусь же, для меня это новая тема. По поводу макросов, нужен такого вида: #ifndef debug #define YOBA() #else #define YOBA() yobayoba(1488); #endif Вот только дебаг не отзывается. Что довольно странно. Какие вариации из гугла не пробовал только.
>>663494 (OP) ОП-хуй, Зачем ты упоминаешь глючное, уёбищное говно IDEONE, когда есть божественный REPL.it? Почему я должен был СЛУЧАЙНО найти эту радость?
>>670120 Посмотрел что это. Похоже у неё другие цели. Вот если у тебя компилятора нет, то ты эту хуиту изаешь. А вот чтобы постить в тред луше идеон. 1 раз написал, скомпилил и кинул линк. а ещё я не понял как пользоваться консолью
Далее в моей реализации указатель p продвигаем на position = 3 шага вперед: p = 2; p = 3; p = 4; остановились
Теперь двигаем оба указателя, пока не дойдем до конца списка. Расстояние между ними равно position, поэтому в конце указатель q остановится на нужном элементе.
Итак: p = 5; q = 2; p = 6; q = 3;
Остановились. Как видно, ошибка на единицу, но почему так? На сайте мое решение принимается несмотря на то, что указатель p продвигается вперед на position шагов.
>>670494 >Я так понимаю, всегда нужно указывать =delete для конструкторов, которые не используются? Только если они сгенерируются по-умолчанию. Хотя можно для ясности указывать явно. Там довольно большой список ситуаций, в которых методы неявно помечаются как default или delete. Чтобы не страдать хуйней, заучивая эти правила, можно явно написать.
>>670602 > можно явно написать. Минус в том, что умные дядьки потом у виска могут покрутить, если окажется, что в данной ситуации ни к селу, ни к городу.
>>670494 Я юзаю =delete для методов, которые генерирует компилятор, но мне они не нужны. Например раньше конструктор копирования нужно было создавать с модификатором private, а сейчас можно просто написать =delete.
>>670623 >Минус в том, что умные дядьки потом у виска могут покрутить, если окажется, что в данной ситуации ни к селу, ни к городу. Ну скажут, что не знаешь условия implicit defaulted/deleted declaration и хуле? Зато не будет таких ответов, как у этого Василия, который не знает, что конструктор копирования и оператор присваивания являются implicitly deleted, если есть move аналоги. А когда возникает необходимость делать недоступными эти методы, то аналоги точно есть.
>>670659 > конструктор копирования и оператор присваивания являются implicitly deleted А я это знаю, наизусть помню все эти правила, ибо однажды показалось это важным. Но все же, я имею ввиду ситуацию, когда здоровому человеку ОЧЕВИДНО, что никакие такие конструкторы использоваться не будут вовсе, т.к. объект создается единожды эксплицитным конструктором с параметрами.
В методе класса нужно запустить другой метод в треде. Нагуглил std::thread t2(&Test::calculate, this, 11, 20); почему синтаксис так отличается от вызова извне? Зачем амперсанды и this?
>>670873 Амперсанд не обязателен, как и для глобальной функции (имя Callable-сущности превращается в указатель на нее автоматически, когда прорабатывает std::decay). this указывает конкретный объект, от имени которого должен вызываться метод (в общем случае это может быть указатель на какой-то другой объект, если тебе захочется). Внутренности std::thread распознают, что им передан именно метод класса (при помощи отдельной специализации конструктора) и интерпретируют второй параметр особым образом, вызвав в нужный момент this->calculate (11, 20), а не calculate (this, 11, 20).
>>670873 Когда в конструктор std::thread(f, t1, t2 ...) передается функция-член класса то в результате вызывается или (t1.f)(t2, ..., tN) или ((t1).*f)(t2, ..., tN) в зависимости от переданых аргументов. Поэтому в конструкторе треда вторым аргументом должна быть ссылка или указатель на класс, и нужен указатель на функцию-член (получается указатель на указатель), так как там идет его разименование (какого-то хуя, причины наверное были). Для сравнения если в конструктор будет передана обычная функция то будет вызвано f(t1, t2, ..., tN) http://en.cppreference.com/w/cpp/thread/thread/thread
>>670910 Ну не знаю, возможно, чтобы подчеркнуть, что это именно указатель, первоклассных-то функций не завезли. Я бы посоветовал не заморачиваться и писать как удобнее тебе самому.
А вот если у меня в классе есть метод, который плодит несколько разных тредов - джойнить нужно в нем же, или в деструкторе? Или выделить функцию для о джойна всех этих тредов?
В C++ нет правила, по которому member-функции распадаются (decay) до указателей, как обычные функции. Поэтому нужно указывать явно принадлежность функции классу и взятие адреса амперсандом. Про this вроде бы ясно.
>>671150 Меня сбило с толку именно что thread(calculate, 11, 20) нельзя, выкидывает ошибку, мол, нестатическая йоба, идите нахуй. Теперь понятно как это юзать, не совсем понял за дикей правда, на досуге почитаю обязательно
>>671158 Когда от тебя ожидают аргументом указатель на функцию (напр. void (*)()), а ты передаёшь имя функции (без амперсанда, тип void()), то C и C++ автоматически преобразуют тип функции в указатель на неё. Это и называется function-to-pointer decay. Для мембер-функций такого преобразования нет.
Вопрос наверное уебанский, но всё-таки надеюсь, что ответите. Зачем нужны прототипы функций? Почему нельзя сразу писать функции целиком, а мейн последним?
>>671318 > Почему нельзя сразу писать функции целиком, а мейн последним? Удобнее. И прототипы не для этого зделоли, чтобы ты мог функции после main() писать. > Зачем нужны прототипы функций? Чтобы их вызывать, когда реализации в других модулях линковки.
>>671318 Декларирование нужно в первую очередь для многофайловых программ (ускорения их компиляции после внесения небольших изменений). Функция может находиться в другом .cpp файле (или ее реализации в виде исходного кода вообще может не быть, например в случае использования библиотеки), компилятор устроен таким образом что каждый файл компилируется отдельно (еденица трансляции), соответственно инфу о функции (если она в другом файле) для статического контроля получить неоткуда. Для этого нужно декларирование - декларируя функцию ты обещаешь компилятору что такая функция на самом деле есть, и компилятор спокойно компилирует исходный код в объектный.
>>671421 > Паскаль еще и однопроходный Разве к езыкам с каким-никаким синтаксисом это применимо? Я думал только к ассемблерам. А всякие поц-кали так или иначе надо компилировать в несколько стадий.
>>671426 >Что это? Паскаль со своими секциями type, var, interface и т. п. устроен так, что его можно скомпилировать в один проход. http://fan-5.ru/best/best-69301.php Это не значит, что его в один проход компилируют, но в любом случае жизнь разработчику компилятора упрощена. Например, вот такой код на C++:
int i; yoba(); int j;
Компилятор должен будет выделить память на стеке для i и j сразу, то есть предусмотреть это, а значит, сначала распарсить код и проанализировать его. В случае паскаля же:
var i:Integer;j:Integer; begin yoba()
Уже как только встречен begin компилятор знает что и как выделять на стеке.
>Только на скорость компиляции модули влияют? В основном, да. Еще вместо .h/.cpp можно было бы иметь что-то по типу C# - все в одном файле, но это уже мелочи.
>>671456 И последний вопрос по модулям. Можно не подключать весь модуль, а только часть его функционала? Например не весь algorithm, а только sort из него.
>>671462 Нет, вась, модули в C++ не завезли. Всё лишнее говно в любом случае будет отрезано линковщиком, даже в случае пропускания компилятором по какой-то причине.
>>671474 Как раз из-за того, что у разных членов комитета по стандартизации разные взгляды на то, какими должны быть модули (на самом деле подставь любой FEATURE_NAME вместо курсива), стандарты принимаются так медленно.
>>671462 > часть его функционала В бинарник суется (имеется ввиду статическая линковка) только то что ему нужно. Исключение естественно хедеры, если тебе кажется что хедер дохуя жирный то нужно вручную резать. Кроме теймплейтов, они превращаются в код только при использовании.
>>671515 >>671513 А как сделать так, чтобы он отображался пустым? Т.е. я хочу сделать так, чтобы coins. тут было заместо s пусто, а не пробел. У меня эта буква s в отдельном чаре идёт.
>>671520 Вот строчки кода: int one_cent = 0; std::cin >> one_cent; char one_ending = 's'; if (one_cent == 1) one_ending = '0'; А что в one_ending поставить чтобы там было пусто? У меня потом вывод идёт: std::cout << "You have " << one_cent << " one cent coin" << one_ending << "." << std::endl;
>>671527 Попробуй '\0'. В ascii нет пустого символа, в юникоде должно что-то быть, например есть "\u200B" - "пробел нулевой длины". Второй вариант написать не в одну строку.
>>671951 насколько же ты ущербен, что даже гугл открыть не можешь. при том что он устанавливается уже в три клика. съеби вот просто из программирования в сибирь и сдохни в землянке с медведями.
Анон, какие есть годные среды с автогенерацией кода по uml диаграмме классов, окромя staruml и прочего безгранично старого говна? Или есть какие-то более популярные языки моделирования?
Есть классы Server и Client. Клиент связан с классом Player чтобы отвечать за игровой мех на стороне собсна игрока. Но столкнулся с тем, что на стороне сервера нужен тоже какой-то класс, который обрабатывает этих самых плееров, т.е. аналог Player на другой стороне трубы. Как бы его так обозвать хорошо, чтобы смотришь в проджект эксплорер - и сразу понятно, что эта хуйня делает. Мне очень неловко просить помощи, я редко выхожу из ридонли
>>672541 А что не разумного? Код клиента в своем неймспейсе, код сервера в своем. Если боишся неймспейсов назви PlayerServerModel и PlayerClientModel. Но подобные многосложные имена ничем не лучше неймспейсов - ты просто пытаешся с помощью префикса/суффикса решить то что должно решаться неймспейсами.
Пока нашел два решения моей проблемы, оба являются совмещением кода клиентской и серверной сторон в одном классе: макросы и strategy pattern. Неймспейсы отбросил, потомушта еще больше мешанины получается, не смог я придумать, как сделать из них конфетку.
ребята,вы же шарите,да? как сделать прогу для автоматического создания четких пацанских цитаток и мамасиков? ответ нужен срочно,гопота прижала. всем чмоки
Сука, как в этом ебучем крестовом <random> получить ебучий рандомный char, блядь? Понахуячили кучу каких-то адапторов, генераторов, дистрибуторов что теперь хуй проссышь.
>>673136 >>673125 Недавно подняли производительность критического участка на 20% расставив __attribute__((always_inline)) вокруг нескольких методов, после того как дизассемблинг показал, что компилятор по своим соображениям отказывался их инлайнить. Просто inline нужен только для исключения конфликта имен имплементаций в хидерах, собственно к инлайнингу он сейчас имеет очень слабое отношение, компилятор и так пытается все инлайнить.
>>673255 Ну тут тонкий вопрос, если все инлайнить то бинарник растет и кэш кода забивается. Универсального решения тут нет, в каждом отдельном случае нужно начинать с бэнчмарков и профайлинга и дальше при каждом изменении делать замеры.
>>663494 (OP) > FLTK - графические интерфейсы - http://fltk.org Господи, либо я дурак, либо эта библиотека говно. Я, блять, не могу создать обычный чеклист. Гружу я hold_browser, а дальше что? Пытаюсь установить callback функцию для него, а мне хуй в лицо, там нихуя не понятно, в документации нихуя не понятно, примеров нихуя нет. Тупое говно тупого говна
>>673536 Этому долбоебу и брейнфак подойдет, это же не повод. Сранд, как и значительная часть libc/posix, это примитивные API прямиком из 70х, использующие не синхронизированные глобальные переменные на каждый чих. А значит, если этот долбоеб решит использовать все свои 16 ядер и запустить код в несколько потоков, он внезапно обнаружит, что 1) вероятностное распределение съехало нахуй, т.к. потоки переписывают один и тот же сид 2) начались жесткие тормоза, т.к. перезапись глобальной переменной из разных потоков инвалидирует кэш. Ну и плюс диапазон у него ограниченный и слегка ебанутый.
И зачем, спрашивается, связываться с этим говном мамонта, когда у тебя такой-то <random> есть? Две лишние строчки написать тяжело? Пиши на баше, епта, используй $RANDOM.
>>673556 Хорошо, червяк, ты узнал об <random> и суешь его в laba2, я понял тебя. Ты очень прогрессивный парень, как я погляжу, нассал тебе за шиворот абсолютно бесплатно, приходь ЩЕ. >>673563 Двачую.
>>673580 Если достатно неглубокого копирования то копируй каждый объект отдельно с помощью memcpy. Если нужно глубокое то надо переопределять конструктор копирования. Возможен непереносимый пердолинг (если конструктор переопределить нельзя) но с таким лучше не связыватся.
>>673563 > я использую разные API для однопоточного и многопоточного кода > я пишу немасштабируемый код, т.к. мне нравится потом ебаться с конкурренси багами Как скажешь.
> я использую разные API для однопоточного и многопоточного кода > я пишу немасштабируемый код, т.к. мне нравится потом ебаться с конкурренси багами > получить ебучий рандомный char в лабе Ты действительно настолько даун? Отмасштабируй очко себе.
>>673595 >>673596 > Лабу можно писать наотъебись, в продакшене я бы написал нормально. > Но я не умею нормально, т.к. я всегда писал наотъебись. И эти вот долбоебы потом приходят в профессию и начинают гнать говнокод мегабайтами.
Если хочется просто, то http://en.cppreference.com/w/cpp/numeric/random/random_device/operator%28%29, но он может каждый раз в /dev/random лезть, правильнее создать локальный инстанс генератора, например std::mt19937, иницилизировать его сидом из std::random_device и и потом получать значения из диапазона через std::uniform_int_distribution.
Хули вы тут устроили, блядь. Если знает, почему стоит использовать не std::rand, пусть использует его. Если не знает, то пусть прочитает и использует то, что больше отвечает ситуации. А то определили два пути: говнокод и йоба архитектура, но почему-то компромисса вам не завезли.
>>673662 Например, вот так: https://ideone.com/wxRZar Сегфолтов теперь быть не должно. Можно было бы подумать, что на списках длины 2-3 цикл не всегда найдется, но по доказательству корректности алгоритма, когда мы попадаем в цикл, указатели всегда встретятся.
>>673645 >йоба архитектура Конечно, подключить стандартный заголовок, создать обьект и дернуть у него метод это пиздец какая сложная архитектура. Не позорился бы даун.
>>673677 Ситуация: тебе надо сделать сраную лабу, в которой ты хочешь заполнять массив автоматически, а не вручную. Ты уже знаешь про std::rand и даже если не знаешь - все что тебе нужно прочитать - описание std::rand. Даже про srand читать не обязательно. В процессе чтения ты увидишь, что std::rand является небезопасным, а в C++11, оказывается, есть нормальные решения.
Ок,- скажешь ты. - Давайте использовать современные методы. - И открываешь документацию к <random>. Твоему взору предстанет стена текста, на которой ты сразу же увидишь минимум 15 сущностей, которые надо разбирать, а пример с кодом нихуя не говорит о том, как бы быстро заюзать эту охуительную безопасную йобу. Тут же ты вспоминаешь, что вообще-то ты не ставишь себе задачи изучить весь random(по крайней мере, сейчас), а беглый ее осмотр не внушает тебе уверенности, что это займет 5 минут. Что ты выберешь: потратить неизвестно сколько времени на изучение <random> или по-быстрому заюзать std::rand, который справится с твоей задачей на ура? Конечно, если ты и так планируешь изучить <random>, то лучше выбрать первый вариант. Но если ты вообще не собираешься писать на C++, или у тебя нет времени, или ты блять просто не хочешь отвлекаться на побочную хуиту, то скажи, какого хуя ты тут выступаешь, мразь? Только честно. Как вообще использование std::rand в ебаной лабе на сортировку мешает мне выбрать нужное решение перед написанием продакшен кода? Как, блять, ну ты объясни мне, пожалуйста!
Я что еще, когда что-то изучаю, должен код через TDD ебашить? Чтоб тебя удовлетворить, пидор? А ты не охуел там?
P.S. Кроме всего прочего вангую в тебе джуниора-оверкиллщика, который на сугубо утилитарные вещи городит по 5 абстракций.
>>673739 >P.S. Кроме всего прочего вангую в тебе джуниора-оверкиллщика, который на сугубо утилитарные вещи городит по 5 абстракций. Я ему уже об этом говорил, но он сказал лишь про червей что-то и про говнокодеров. Джавист, короче.
>>673739 За то время, что ты тут ноешь, ты могу бы уже 5 раз скопипастить нужный кусок из примера и двинуться дальше. Но нет, блядь, надо начать обосновывать совой говнокод, говонокдость которого ты сам прекрасно осознаешь.
>>673750 Так погоди-ка, мразина. И чем ты отличаешься от той макаки, которая хуячит std::rand в продакшене, если такое советуешь? Ты же советуешь заиспользовать либу не глядя, не разобравшись ней, не зная как оно настраивается и как оно себя поведет в дальнейшем. Ебать ты дно, все с тобой ясно.
>>673756 Очевидно же, хуячить <random> не глядя лучше, чем хуячить std::rand не глядя, почему - написано выше. STL ты и так используешь, если ты, конечно, не из тех мудаков, что используют libc в крестовом коде. А ты можешь быть как раз из тех мудаков, судя по твоей анальной привязанности к std::rand.
>>673771 Хуячить std::rand глядя вообще невозможно, т.к. первый же гуглежь показывает, что рандом в современных крестах делается через <random>, а std::rand - это полу-депрекейтед пережиток для совместимости с няшной. Ну и если тебе "проще" важнее, чем "правильно", то тебе в пыхипи надо переквалифицироваться.
>>673781 >Хуячить std::rand глядя вообще невозможно Ты точно ебанутый. Стандарт явно говорит: >The rand function has the semantics specified in the C standard, except that the implementation may specify that particular library functions may call rand. >It is implementation-defined whether the rand function may introduce data races
Если ты это знаешь, то ты осознанно используешь эту функциональность.
>Ну и если тебе "проще" важнее, чем "правильно", то тебе в пыхипи надо переквалифицироваться.
Что за "правильно", блять? У нас тут не религия. Есть конкретный критерий: the rand function may introduce data races. Устраивает? Заебись. Не устраивает - пожалуйста, проследуйте в <random>.
Так что да, "проще" в данном случае уместно. А вообще очень полезно думать не в рамках "правильно", а в рамках "уместно". Почему-то когда люди слышат "правильно", они часто начинают выключать мозг, вместо того, чтобы самим давать оценку.
Я чото не понял, неужто в гугле не нашлось, как использовать <random>?
Там чото около трех строчек для инициализации, зато не надо вырвиглазное целочисленное деление делать. У Лававея было выступление на cppcon, где он ясно и небеспочвенно сказал, что не надо использовать сишный rand.
>>673797 Ну да, ну да, "мне только лабу зделоть", "чо-то как-то слишком переусложненно", "ну и что что говно, мне и так норм", "я как писатель лаб знаю лучше". Не хотим узнавать и использовать правильные и корректные подходы, хотим как диды на PDP-7 городить костыли, нам же только лабы сдать, ебись оно дальше все конем.
А у меня лабораторная была про реализацию законов распределения, 5 штук (нормальный, экспонентный, треугольный и еще пара, не помню), тоже <random> юзать надо было?
Нужен кто-то проходивший книгу Стровструпа. Собственно нужна помощь в задании к разделу 5. Что именно от меня хочет автор ? я должен все 25 строчек вставить в его код сверху?Т.е. я должен сначала исправить все ошибки во всех 25ти фрагментах а затем сыграть в "угадайку" где и что должно стоять?
Анон, поясни,пожалуйста, ещё про qftp ( Я вижу, что он дохуя популярен в этом треде) Поясни как им правильно пользоваться? Это то есть каждую команду надо проверять на commandFinished(int, bool) ? Или можно ждать после всех команд ftp.done?
>>674204 >>674222 Бля, криво объяснил. Понятное дело, что он по определенному алгоритму генерироваться будет, скорее всего просто из готового набора чанков будут случайно выбираться некоторые. Но как это можно сделать без перезагрузки игры, на ходу?
>>674173 > что он дохуя популярен в этом треде к популярности все эти вопросы никак не относятся. просто один долбоёб всё никак мануал не осилит вот и спамит сюда
>>663494 (OP) помогите пожалуйста понять, что не так с кодом http://pastebin.com/bUCXWqUY есть квадратная матрица размера n, и мне нужно найти длину наибольшей возрастающей последовательности, то есть если матрица размера 3, и в ней элементы 1 2 3 4 5 4 3 2 2, то наибольшая последовательность 1 2 3 4 5,и её надо вывести, но мой код почему-то не работает, подскажите пожалуйста, в чём проблема и каким образом можно вывести саму последовательность?
Хочу в С++ вкатиться.Аноним03/03/16 Чтв 23:11:06#515№674965
Посоны, хочу в C++ вкатиться. Погуглил, как окна создаются. Нагуглил простой пример с WinAPI. Пиздец, бля, че это вообще за хуйня? Как в ней разобраться вообще??? Как мне сделать обычное окно, с двумя кнопочками (Start, Reset), текстовой формой, куда коэффициент вбивается и областью прорисовки в центре окна, куда будет выводиться график функции?
>>674965 Берёшь Qt, в Qt Designer шлепаешь кнопки, поле, текст, создаешь action для кнопок, пишешь простенький код для твоих целей. Если не справишься, то тебя ничего не спасет и ты не сдашь лабу
>>674885 1. Ошибка внутри else - temp надо в 1 сбрасывать в любом случае, а не только когда temp>count 2. Ты можешь завести begin и temp_begin=0: каждый раз когда попадаешь тот else, если temp>count, сохраняешь begin=temp_begin, а temp_begin в любом случае делаешь = текущий элемент. Конец отрезка с помощью count можно посчитать. Может быть чуть проще будет сохранять не начало отрезка, а его конец, если он побил рекорд, тогда temp_end не нужен - сразу в end пишется результат в ветке temp>count.
>>674965 >Нагуглил простой пример с WinAPI. Пиздец, бля, че это вообще за хуйня? Теперь ты знаешь, что с ним связываться не стоит. Qt это более-менее стандартное решение для C++
>>675075 У библиотеки нет интерфейса. Есть ты про QtCreator, то он со всеми языками поставляется (на самом деле я не проверял, но в сырцах лежат переводы в том числе и на русский).
>>675083 >http://www.qt.io/download-open-source/ вот это оно. На ХРюху пойдет? Что скажешь по поводу вот этого? >Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
>>675223 Ну, MinGW тебе точно нужен, если у тебя студии нет (только я не понял, почему там 2 MinGW. Или верхний — это MinGW-сборка Qt, а нижний — сам тулчейн?).
>>675330 Запустил какую-то бяку "qtvars.bat", хз зачем. Теперь проц на 100% грузит и что-то там в дос-окне мигает. Creator любой на хрюшку встанет? Или старые версии качать?
>>675355 Это не на всякий случай, там написано так сделать: > You may also need to ensure that the locations of your compiler and other build tools are listed in the PATH
Естественно, не надо прямо делать всё, что там перечислено. 1) Версии и пути у тебя свои. 2) Собирать GDB вряд ли нужно. 3) Если ты добавил всё в PATH, вряд ли нужно будет руками пути прописывать, компилятор и Qt должны савтодетектиться.
Прочитал >Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) после 2 лет байтоёбства в K&R, за плечами поверхностное изучение 3 тома Кнута (ещё в универе), небольшой опыт писания на коленке на низком уровне (ASM), немного понимаю в модулях ядра, драйверах Linux и кросс-компиляции. Про графику не знаю вообще ничего, с трудом переделал шаблонную формочку в Qt для отслеживания своего заказа на почте. Не программист, инженер. Цель - летом сменить работу и пойти джуниором на крестах, потому что интересно, перспективно и потому что заебало инженерить. Собираюсь обмазаться Маерсом по STL и им же Effective C++, какие ещё советы? Нефть авансом, выручайте, анончики
>>694254 Сорт оф поддвачну. Быдлокодерство на крестах в НИИ за плечами, впереди - страх собесов и чувство, что я днище ебаное в рамках коммерческой разработки. В шапке чот особо не нашел каких-то хинтов по рейтингу знаний так сказать. Что прям таки маст-рид и самое ходовое в вопросах на собеседованиях?
хорошо ли сейчас в 2016 учить с++ 11 или даже с++14? Обязательно ли знать как было до этого с++98? Прост не хочется голову забивать. Интересно как с этим в больших корпорациях? Понятно что старое не трогают, а вот новое на новом стандарте пишут или как?
>>663494 (OP) Что скажете о видеолекциях по c++ вообще и вот этих в частности https://www.youtube.com/watch?v=atVgLRzl3rI ? На мой нюфагский взгляд охуенно, прямо слушаю и кайфую. Если кто подкинет моар подобного, буду признателен.
За тысячестраничные талмуды,
За всратые олдфажные гуи
За NULL'ы и взаимные инклуды.
Спасибо, что мой препод-алконавт
Не знал, как подключать библиотеки.
За goto, за стандарта тухлый драфт,
За комитет, застрявший в прошлом веке.
За SFINAE спасибо, за segfault,
За void main и мудрости Алены,
За Герба, положившего свой болт
На крашащие студию шаблоны.
Спасибо за безграмотных юнцов,
Упорно в тред постящих говнолабы
В надежде, что анон в конце концов
Решит их или даст совет хотя бы.
За все я благодарен C++ -
Пока сквозь дебри путь держу отважно,
Я - программист, а не макак-индус.
А остальное, в сущности, неважно.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий:
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать.
Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp
Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4567.pdf
Тонкости языка (для гурманов):
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q: Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей.
A: Вот тебе блоги, факи, референсы и всякое такое:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w
Блог Герба Саттера (на ангельском) - http://herbsutter.com
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru
Блог еще одной тянки, много о Qt и оптимизации (на ангельском) - https://katecpp.wordpress.com
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс:
Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
Среди прочих есть несколько курсов по C++ - https://stepic.org
И еще есть вот такое, если проникся:
Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos
Q: Я готов начать погроммировать! Куда мне писать код?
A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
http://www.boost.org - скачать бесплатно без смс.
http://www.solarix.ru/for_developers/cpp/boost/boost-library-list.shtml - краткие аннотации к большинству компонентов.
http://sindicollo.blogspot.ru/2008/09/boost.html - документация к некоторым компонентам.
http://www.boost.org/doc - документация (на ангельском).
Литература:
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
http://www.qt.io/ru - скачать бесплатно без смс.
http://doc.crossplatform.ru - документация к 4.8.
http://doc.qt.io - более полная документация к обеим версиям (на ангельском).
Литература:
Макс Шлее - Qt 5.3. Профессиональное программирование на C++ (2015) - https://goo.gl/aZ66gK
Макс Шлее - Qt 4.8. Профессиональное программирование на C++ (2012) - https://goo.gl/Slb1In (книга) + https://goo.gl/toUDWc (исходники примеров)
Марк Саммерфилд - Qt. Профессиональное программирование (только Qt 4.х) (2011) - https://goo.gl/qpkZFm (книга) + https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки:
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se
SFML - работа с графикой и аудио - http://www.sfml-dev.org
FLTK - графические интерфейсы - http://fltk.org
И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.