"Быть крестухом - едва ль есть кара строже: Так слились с дряхлым легаси они, Что даже червь не будет столь ничтожен!
Давно в забвеньи байтоебства дни, Но жалкие живут лишь теми днями. Как мучают они себя, взгляни!"
О крестобляди, гордые сердцами, Несчастные, чьи тусклые умы Их завели попятными путями!
Не покидая стен своей тюрьмы, Терзаются минувших лет страстями, Утратив шансы выбраться из тьмы.
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 Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Тонкости языка (для гурманов): Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC Герб Саттер - Решение сложных задач на 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++. Справочник разработчика (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, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Еще у нас есть 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
Блин, котаны, почему в таблице ниже полиному 001 соответствует индекс 002? Почему полиному 007 соответствует индекс 128? Статья: http://samag.ru/archive/article/199
Котаны. Чё делать, если везде требуют буст, а я не могу себя пересилить, блюю от одного взгляда на него? Не, серьёзно, мб я слишком слабый плюсовик, но мне только буст кажется нечетабелиным говном, к касабланке и куте например таких чувств не возникает.
>>597249 ты в глаза долбишься что ли? "Первая слева колонка – полиномы/индексы (обычно обозначается, как i), вторая – таблица степеней примитивного полинома 2 (обычно обозначается как alpha_of), третья – индексы, соответствующие данному полиному (обычно обозначается как index_of)" индекс в полином подставь
>>597304 Она в шапке есть. Бери и вымазывайся, лишним не будет никогда, там не только описание стандартной библиотеки C++11, но и много интересной хуиты про модель памяти и тд.
>>597310 Не заметил ее в шапке. Спасибо, ты меня немного вдохновил. Вот про concurrency в effective modern c++ нихуя не понятно, какая-то слишком сложная глава, мне не хватает вводных данных. Может, эта книга мне поможет
>>597310 Алсо, платиновый вопрос, нахуя до сих пор в шараге учат мультипоточности на основе шинапи, если это давно уже есть в стандарте, без капса и "ехал войд через войд"
>>597271 От asio и я блюю, няш. Б-г пока что миловал от низкоуровневого сетевого пердолинга. Просто сейчас много годноты перенесли в std те же smart pointers, например, и остальное уже может показаться не таким охуенным. Но, например, пулы вполне неплохи, и всякие мелочи вроде compressed_pair, облегчающие жизнь.
>>597340 Ну так-то да, сам на свой вопрос ответил. Но почему винапи сам по себе ужасен? Всюду капс, касты через касты, стотыщпицот мильёнав параметров у каждого метода.
Сап, анон. Что может пойти не так с этим кодом? http://pastebin.com/BXhev9E8 Накатал тестики - вроде все норм. Может помять где-нибудь не удалится при каких-нибудь условиях? Или может все нормально тут?
>>597348 Потому что дичайшее легаси. У Джоэля была статья, где он писал про принципы обратной совместимости у MS, что даже баги тщательно воспроизводились в новых вендах, лол. Это все тянется чуть ли не с времен, когда еще не было крестов, и ничего переписать нельзя.
Парень, ты еще тут? >>597100 Ты с ВМК? Расскажи что-нибудь про лабораторию компьютерной графики. Хотел пойти туда на магистратуру. >лаба говно Не знаю, но постоянно натыкаюсь на каких-нибудь успешных чуваков, работающих в нвидиа после всей этой движухи.
Просто нету вообще никакой альтернативы в ДС, где хоть как-то занимаются компьютерной графикой.
>>597351 Зачем костыль с raw memory, если можно сделать unique_ptr <T> pimpl и инициализировать в конструкторе?
Алсо, ты совершенно не понимаешь сути pimpl. Надо, чтобы твоя обертка не требовала, чтобы T был complete type где-либо, кроме тел конструктора и деструктора. А ты сам же явно делаешь член размера sizeof(T), и это потребует полного определения T в момент инстанцирования обертки, что убьет всю соль твоей затеи.
>>597356 Считается престижной, высокий конкурс, выше только в лабы ММП вроде бы. Оно и понятно - обе модные-молодежные. По факту там лютый конвейер, тебя заставляют хуярить грязную работу, на твои интересы кладется хуй, ну и вообще на тебя всем насрать. Ламповости и годной атмосферы нет. Есть несколько олдфагов (тот же Конушин, например), они занимаются СЕРЬЕЗНЫМ БИЗНЕСОМ по пилению бабла одна продажа ГИБДД системы для распознавания номеров чего стоит. Есть стремящиеся-приближенные, им прокачивают публикации и выпускают на конференции, если хорошо лижут. Реально шарящих студентов относительно немного, вот они-то обычно уходят в нвидии и прочие годные места, но я бы не сказал, что это благодаря лабе, скорее наоборот, вся эта грызня отвлекает. Большинство студентов - лютые долбоебы как и везде на ВМК, лол, т.е. не нужно считать, что там какой-то рассадник умников из-за илитности лабы, которые фактически обменивают свой бесплатный труд на илитную корочку. Спецсеминары говно, все спижжено из стандартных курсов, которые есть на курсере даже, блядь, слайды не удосуживаются перепиливать. Общее правило - прочитать хуйню, дать на коленке придуманную хуету в качестве задания, поставить анальные требования к способу выполнения, чтобы легкая хуета таки тебя заебала, заставить студентов на курс старше проверять и ставить оценки. Профит, вы восхитительны, все заняты и не мешают вам пилить гранты.
Пиздец, как я забыл основы C++. Такую инициализацию вообще можно исправить? Может, в блоке private сделать указатель на вектор векторов? Но тогда, думаю, станет еще больше.
Что значит одинаково? У меня класс принимает разные параметры, я не могу задать таблицу постоянного размера.
Машграф, отсечение невидимых треугольников и пиздец.Аноним07/12/15 Пнд 09:20:17#57№597819
Анон, спасай меня пожалуйста. Пытаюсь делать прогу по машграфу, сурс - книжка древнего голландского пидора-Аммерала, нихуя не получается. Нарисовал кубик - окей. Нарисовал кубик из треугольников - окей. Пытаюсь сделать отсечение невидимых треугольников хотя бы для выпуклой фигуры (кубик) и ловлю бушлат, так как вместо невидимых, отсекается какая-то левая херня. Для каждого треугольника на экране имею мировые xyz каждой его точки, видовые xyz каждой точки (с учетом расположения камеры) и экранные xy каждой точки (с учетом удаления наблюдателя от плоскости экрана). Пытался считать через все типы координат C и D плоскости и сравнивать их с нулем - хуй, результат для них обоих один и тот же (что логично), но совсем не тот, что в книжке (что уже не очень). Помогайте. Может есть для такого случая готовый, вери изи алгоритм на 10 строчек? Или может посмотрите мой говнокод и исправите ошибку? (как-то стремно в нет выкладывать в открытую, лаба все-таки, потом еще препод приебется насчет уникальности) Ну или хоть дайте совет, как быть. Вектор z видовой системы координат направлен в центральную точку экрана мировой, я так понимаю. Ну, по Аммералу.
>>597819 Тебе отсечение невидимых граней нужно или вообще перекрытие одних объектов другими?
Первое решается элементарно проверкой, как на экране расположен треугольник. Если его вершины идут по порядку по часовой стрелке - отсекай, если против часовой - не отсекай. Ну или наоборот, в зависимости от того, левая тройка координат у тебя или правая.
Если у тебя перекрытие(которое в D3D/OGL решается через z-буфер) - то сложнее.
Аноны, есть задача оперировать большими файлами ( больше гига) и моя программа их не хавает( и сразу умирает), суть в том, есть ли какие-то библиотеки или методы работы с большими файлами? Просто мне уже не нравится сталкиваться с тем, что приложение крашится.
>>598038 >>598038 Что там пояснять? Сначала рисуешь в буффер. Если z - ближе, чем у уже имеющегося там пикселя - заменяешь пиксель, если дальше - не заменяешь. >прозрачность Не уверен на 100%, но думаю правильно будет сделать так: 1) Рисуешь все непрозрачные объекты. 2) Сортируешь по Z прозрачные объекты и рендеришь их с дальнего к ближнему. Но подобная штука - затратная. Обычно делают всякого рода блендинг. Например, рендеришь сначала все объекты, как непрозрачные, затем рендеришь только непрозрачные и в итоге отрисовываешь среднее значение. Можно так делать по нескольку раз. Но тут тоже есть ограничения и он как-бы "физически" не корректный в обещм смысле и является симуляцией.
>>598079 >>598119 циклы блять какие-то, картинки. что этот код делает то? если у тебя однородные данные, используй csv. то есть, если бы у тебя был бы только 2.txt файл. а если ты хочешь скрестить оба этих файла, узай xml/json. будет что-то вроде [code] <doc> <f1><data1><left>2343</left><right>443</right></data1>.....</f1>
В общем, анон, поясни немного. Страус пишет, что во время выполнения программы, в производных классах создается таблица виртуальных функций(vtbl) и виртуальные указатели(vptr). Так вот, как все эти таблицы хранятся в памяти? Так же как и члены класса или как? Создаются ли всегда эти таблицы или только когда в базовом классе будет объявление virtual? Сильно не стукайте, если вопрос тупой, только начинаю с этим делом знакомиться.
>>598155 Стандарт не определяет как они должны выглядет, тоесть каждый разработчик компилятора решает сам. Обычно сама таблица размещается в стаической памяти (тоесть можно считать что она хранится "как члены класса") а в самих объектах хранится скрытый указатель на эту таблицу. В конструкторы копмилятор добавляет инициализацию этого указателя. Обычные методы не хранятся в такой таблице, тоесть она может и не создаваться для классов без виртуальных функций. Но там какая-то хуита есть что типа указатель на конструктор по умолчанию может храниться в такой таблице, короче это рыться нужно, тем более от компилятора может зависит.
>>598148 Препод хочет чтобы эти два файла были в одном, как на этой пикче, иначе незачет. И чтобы это был txt файл, без всяких там xml, json, csv, итд. Такие дела.
>>598173 Так ты же читаешь из файлов. Что ты хочешь-то? Объедини их в один и читай из одного. Сделай просто для первого файла цикл не while(!eof), а цикл от 0 до кол-ва твоих перемененных.
>>598172 Ну типа язык для разных платформ. То что удобно и быстро на одной, может быть медленно и костыльно на другой. Стандарт очень мало именно технических деталей определяет - вон даже у типов размер четко не прописан, только относительный.
>>598171 Дополню этого анона. Таблица создаётся только если есть виртуальные функции, что логично. >что типа указатель на конструктор по умолчанию может храниться в такой таблице Конструктор не может быть виртуальным, соответственно, в таблице не хранится. С деструктором перепутал. Сама таблица представляет собой массив ссылок на функции. Ссылки на функции помещаются в порядке объявления их в классе (по крайней мере для базового класса это так, для наследуемых новые, наверное, будут добавляться также в порядке объявления). Если написать на C-псевдокоде, то получится примерно такая конструкция. // Виртуальная таблица. typedef struct MyBaseClass_vtables { void ∗first_func; void ∗second_func; ... } MyBaseClass_vtables; // Компилятор инициализирует таблицу виртуальных функций. MyBaseClass_vtables myBaseClass_vtables = { &MyBaseClass_FirstFunc, &MyBaseClass_SeconsFunc, ... };
Если есть наследуемый класс, то функции переписываются. Тут не уверен, что будет, если взять базовый класс и от него наследуемый без переопределения и добавления виртуальных функций, может быть будет создана копия таблицы, а может будет использована ссылка на myBaseClass_vtables. typedef struct MySecondClass_vtables { MyBaseClass_vtables base_vtables; // От базового класса структура без измений. // Здесь будут новые виртуальные функции, которые добавлены в наследуемом классе. ... } MySecondClass_vtables; // Компилятор заполняет таблицу, добавляя новые и используя старые ссылки. MySecondClass_vtables mySecondClass_vtables = { { &MySecondClass_FirstFunc, // Переопределяем первую функцию &MyClass_SeconsFunc, // Вторую оставляем такой же. }, ... // Новые функции добавляем в конец в порядке их объявления. }; // Так выглядит класс, если его представить в C-псевдокоде. typedef struct MyClass { MyClass_vtables ∗vtables; ....class_members.... };
Ну и когда объявляешь класс, в конструкторе происходит копирование ссылки на виртуальную таблицу: MyClass ∗MyClass_Constructor(MyClass ∗this) { // Если класс наследуемый, то тут по цепочке вызываются конструкторы базовых классов. MyClass_BaseConstructor(this);
А когда вызываешь метод this->FirstFunc(...) получается как то так: this->vtables->FirstFunc(this/Первый скрытый параметр - указатель на класс/, ....);
Забавно определён абстрактный класс (или как это у вас называется): class AbstractClass { virtual void FirstFunc() = 0; virtual bool SeconsFunc(some_param) = 0; ..... }; В таблицу помещаются пустые функции-заглушки типа такой (возвращаемого значения нет): void SeconsFunc(some_param) {} Хотя при компиляции, если такие функции не переопределены, будет ошибка. Это для Майкрософтовской Визуальной Студии.
>>598212 Про компилятор не знаю, а вот оптимизатор у них был отстойный. Постоянно копирует из регистра в память, а потом из той же ячейки памяти обратно в тот же регистр, хотя может там volatale был, но не в таком же количестве мест. Ну и другое, типа функцию при многократном вызове не копирует в регистр.
>>598240 Я даже код не смотрел, пытался все что есть откомпилить ихник компилятором. Ну обычные вещи стандартные библоиотеки, пример с инета. Так он подла не понимает кучу символов в путях налепил мне кучу беспатновых варнингов, я их заебюался отключать, в итоге я так ниче и не собрал какой то косяк в его виндовых хедерах пока бросил может потом еще поебусь с ним
>>598240 Компилятор без всяких рантаймов и влц и раньше по 1,5 мб бинари хуярил. Это же блядь недоплюсово-передельфивый конпелятор, хорошо что это говно сгнило и нового легаси под него не пишут.
Короче вот список говна которые я нашел в нем пока пытался откопилить обычную залупу из инета через makefile. Без студии. Не поддерживает такие пути: dir/fuck/file.cpp надо меня на виндовые \ Не понимает в путях: - [ ] и еще какие то символы. Нет многих фишек C/C++ при обяявлении переменных приходится исправлять все под компилятор Не понимает __restrict И какой то косяк в виндовых стандартных header'ах
>>598266 Если ты ответил на вопрос что писать, то я иммел ввиду какой компилятор. Хочу такой компилятор который на выходе будет давать реально работающую программу, а не интерпритатор. Может с брейнфака начать? Как такое сделать. Реквестирую литературу
>>598272 окей. предположим я уже написал интерпритатор брэйнфака. Что дальше? Дай литературу чтобы я сам мог понять что делать, но не слишком большую. Тот тысечастраничник с драконом на обложке читать не буду.
>>598253 Ты уверен, что статически слинковал их? Хуй знает что сейчас, я последний раз пользовался 6 или 7-й версией (помю что она была в комплекте с дельфи 7 на одном CD) когда только вкатывался. Ради тебя только что перебилдил в студии с /O1 (мин. размер) в статической и динамической линковке - 88 и 15 мб соответственно, попизди мне ещё.
>>598275 Тебе надо знать формат PE и/или ELF файла, ассемблер. Пока хватит, иди учи. Интерпретатор того же C вещь не простая, а ты на компилятор уже замахиваешься.
>>598252 Нет. Есть вот такой челлендж: http://www.cppgm.org/, пару лет назад он проходил, зарегистрировалось более тысячи участников, до конца не дошел никто.
В 90-х чуваки из ИСП пилили для бельгийцев компилятор, но их было трое, компилятор получился багованный, и даже на такое они потратили несколько лет, а ведь стандарт был меньше в полтора раза тогда. Серьезно, лучше даже не пытайся. Хочешь заниматься этим - закоммить в clang что-нибудь полезное.
>>598275 >Тот тысечастраничник с драконом на обложке читать не буду. Для разработки компиляторов этот тысячестраничник это введение, для легкого чтения, так сказать.
>>598180 Проебался 3 часа с циклами безрезультатно, хуйня какая-то выходит. Может поможешь мне? Естестно не бесплатно. Там на пару строк работы, но я бездарность. Мыло пикрил.
>>598442 >У массива размер size, тоесть 50, а читаешь ты оотуда элемент с индексом cap который на первом вызове функции равен 50. Точно. Чтобы на экран выводилось поменьше говна, я изменил значение const size с 100 до 50 и не посмотрел, что при этом в функцию передается тоже 50. Вот так, вроде, работает. https://ideone.com/mQbUJn
>>597933 Поясни-ка про отсечение граней? Ну, с какой вершины считать-то, лол? Как по порядку, с какой начинать и как вообще это связано с видимостью? >>598121 У меня вся рисовка - это соединение трех точек линиями, z координата вообще исчезает на последнем этапе отрисовки, это про координаты всего лишь лаба, ну и все руками с нуля, соответственно.
>>598572 Я просто правда не понимаю, в чем суть "порядка вершин" в треугольнике, они же равноправны. От самой ближней к самой дальней по расстоянию до начала видовых координат? Или как вообще? Все равно как-то нелогично.
>>598579 > Типа хуйня, лол? Это еще неплохо, большинство и это не может. Это же типа одна лаба. Мне всё равно что это хуйня или не хуйня, кто может или не может. Просто, скорее всего, у меня скоро, наверное, тоже будет что-то связанной с графикой и вот я хочу знать примерно какие задачи там будут.
>>598589 А, да не вопрос, я просто подумал, что это стёб. У меня машграф, это рисование с нуля. Потом будет распознавание образов, это, соответственно, наоборот. Но это не нейронные сети (это отдельно и скорее факультативом, хотя где-то проходят и как предмет), это скорее математическое выделение закономерностей. Книжки у нас очень древние, с кучей ошибок и писанные даже не для принтеров, а для плоттеров - Аммерал, Павлидис... Никто нихера не делает, но это канает, если умеешь списывать на контрольных разную теорию. Простенькие задачки, осложняющиеся тем, что какой-то алгоритм может не работать, информации толковой в рунете нет, двач молчит, а "ненужную математику" ты уже успел позабыть и какое там произведение векторов что-то говорит о их взаимном направлении, не помнишь. В более продвинутом варианте - лабы на несколько тысяч строк каждая, но с тем же смыслом - нарисуйте проволочную фигуру, повращайте её по осям, отсеките грани, перспективные преобразования. Учат графике стабильно хуево, независимо от вуза, похоже.
>>598704 А, ну так я так и пытался делать, хуйня, само по себе направление нормали ни на что не влияет. И скалярное произведение между ним и вектором начало координат-позиция камеры, похоже, тоже. Ебал рот, ебал рот Аммерала и всю его страну. Более того, я сейчас попытался запилить через расстояния от камеры до вершин треугольника (типа если один полностью дальше всеми вершинами, то его не видно). И в одном случае таки получилось, зато во всех остальных рисует хуйню.
>>598715 Как не влияет, если влияет? Те треугольники, у которых нормаль показывает в экран - рисуешь, а те, что не показывают в экран - не рисуешь. Вот пикча. Грубо говоря, если ты будешь делать куб и расположишь систему координат так, чтобы y показывала прям в камеру, то достаточно будет не рисовать те грани, которые будут иметь отрицательную Y компоненту в нормалях их вершин. Чтобы еще было понятнее: Представь вершину, из которой исходит нормаль. Теперь представь вокруг этой точки сферу, радиусом с твою нормаль. Теперь представь, что мы провели плоскость, параллельную нашей камере через эту точку и разбили сферу на дву полусферы. Так вот, если нормаль окажется в сфере со стороны камеры - то рисуем, так как треугольник повернут к нам лицом. А если в другой сфере - то не рисуем, так как треугольник указывает лицевой стороной от камеры.
Как отследить создание шаблона функции во время выполнения? Как во время выполнения узнать существует ли какая-либо реализация шаблона функции, не создавая ее?
>>598716 Я либо делаю что-то не так (нахожу координаты нормали или не с тем вектором его перемножаю), либо не понимаю суть. Кинь фейкомыло, залью написанное на идион, ибо >как-то стремно в нет выкладывать в открытую, лаба все-таки, потом еще препод приебется насчет уникальности Глянешь?
>>598971 да. на ргхост архив с пассом. обычно 3 символа,но можно и больше. или делай надёшный пароль и кинь в тред. кроме нас никто его не узнает и не нагуглит. не разбираюсь в твоей лабе. просто больше человек посмотрят и подскажут
>>598964 >как-то стремно в нет выкладывать в открытую, лаба все-таки, потом еще препод приебется насчет уникальности >лаба Препод гуглит код для каждой лабы? Вы там ебанулись? Ну создай аккаунт на гх
Хеллоуворлдщик на связи. Где-то давно читал, что байт-код это плохо и тормознуто. Решил таки в 30 лет начать изучать кресты и что я вижу в шапке? На винду оп-хуй рекомендует ставить Visual Studio! Но ведь это байткод! Верны ли мои опасения?
>>599070 >байт-код это плохо и тормознуто Как тогда в собственном движке скриптовать локации и динамических персонажей? Я думал, что считывается последовательность байт, где каждый из них является командой, а последующие X байт - параметрми.
>>599070 При установке вс тебя заставляют подписать кровью контракт по которому тебе запрещается использовать другие компиляторы кроме майкрософтовского?
>>598977 >>598976 Спасибо, аноны, отбой. Сдал, поздравьте) Если приведу к человеческому виду, залью с пометкой "двач образовательный", лол. Забил на эти вектора все, бред, нихуя не получается, сделал через расстояние от позиции камеры до вершин, ну и сравнения, соответственно. Сдал первым с потока :3
>>599199 Так я сдавал-то хз сколько, это единственный пункт был, который я не знал, как делать. >>599206 Чего так? Все равно оно работает только для выпуклых фигур.
>>599230 У Франка Луны просто написано, как это в DX11 реализовано. А тебе нужно под эту тему велосипед написать. Хотя там расписано достаточно подробно и понятно.
>>599070 Что ты несешь, лол. На MSVS можно писать на C#, пистоне и дохуя на чем. На C++ можно писать с CLI или без, в последнем случае никакого байт-кода не будет.
>>599070 Visual Studio умеет компилировать C++ как в байт-код .NET (CLI), так и в машинный (x86 или x64), в зависимости от типа проекта, выбираемого при создании.
Такой вопрос. Допустим, есть исходники либы, хочу в нее внести изменения. Так вот, каждый раз для того, чтобы потестить одну добавленную строчку, нахуй, это получается я должен заново все билдить в .so-шник нахуй? Есть какие-то окольные пути?
>>599859 Почему не работает? Работает http://ideone.com/i4VJ8K friend нужен просто для удобства - упрощенного доступа к приватным членам класса. Возможно тебя интересовало почему операторы вывода должны обязательно быть объявлены как глобальные функции, а не функции-члены класса, как могут быть объявлены операторы типа сложения. Это связано с тем что в операторах вывода левым операндом является объект другого класса, а не того для которого переопределяется операция. У всех операторов которые переопределяются с помощью функций-членов класса левым операндом должен быть объект этого класса.
Для овощей: каждая пара .h+.cpp сначала конпелируется в .o, и только потом линкуется в готовый .so. Так вот - инк. сборка - способ пересобирать только изменённый модуль (собрать 1 раз полностью в любом случае придётся <3 саси).
>>599859 Потому что cout << a эквивалентно operator<< (cout, a). Если ты делаешь методом, то *a.this неявно передается всегда первым параметром, а тебе нужно вторым, смекаешь? Поэтому ты можешь сделать методом << для сущности, которая выводит (например, для ostream и cout так и сделано), можешь сделать методом сложение (там слагаемые однотипны и без разницы), но тут тебе придется делать friend. Специально для твоего удобства можно написать определение функции сразу после friend, не вынося за пределы класса, тогда читается лучше, но это все равно будет внешняя функция. Такие дела.
>>599896 Здесь написана неработающая хуйня. 22 строчка не скомпилируется, потому что такой operator<< требует трех параметров. Попробуй нажать run в ideone и увидишь.
>>600024 Адрес будет меняться из-за стратегии аллокации вектора (т.е сколько памяти он будет резервить при увеличении элементов в векторе). Т.е, например, для 2 элементов будет один кусок памяти, для 4 другой. В студии вроде каждый раз в 2 раза увеличивается.
>>600029 >_Ptr Я бы предположил, что это вот из-за этого. Формально ты не можешь использовать члены с подчеркиванием в начале имени, они служебные и не документированные. Вместо указателя там может быть что угодно, лол. Попробуй сделать через &(*it) лучше.
>>600048 Судя по всему там не все так однозначно. Я только что попробывал на простом примере - reserve не повышает использование памяти, пока не начать действительно вставлять элементы в вектор. Возможно в некоторых реализация вектор не аллоцирует новуя память сразу после вызова reserve. Типа reserve просто меняет там какую-то внутреннюю переменную, а уже конгда у вектора действительно кончиться место, при следующей аллокации будет выделено именно столько сколько установил reserve. Но хуй знает, на cpprefference написано что reserve должен вызывать аллокацию.
>>600052 Емнип, нигде не указывается, что при дефолтном конструировании capacity == 0. Так что у тебя уже оно может быть больше 4, поэтому ничего не происходит. Но это все равно не дает ответа на вопрос, почему меняется адрес.
>>600060 Ты, блядь, не спеши, нам нужно понять, что происходит, даже если этим не будем пользоваться. >>600052 Сейчас погонял у себя в отладчике, такой хуйни не обнаружил. capacity после конструирования 0, после reserve становится 4, все 4 раза адрес a[0] одинаковый. Т.к. я проверял адрес без итераторов, прозреваю, что проблема того чувака именно в _Ptr.
>>600055 Имелось ввиду что создаю вектор, вызываю reserve(100000), память не изменилась - хотя reserve вроде как должен вызвать аллокацию. После нескольких пушев память аллоцируется. Из этого можно сделать вывод что reserve не вызывает аллокацию. Вектор получает новые элементы пока не превысит capaсity и тогда только аллоцирует столько сколько указано в reserve. Это объяснило бы почему изменился адрес. Когда ты создал новый вектор в нем какое-то мелкое стандартное capacity. Ты вызываешь reserve - нихуя не меняется. Первый элемент уходит по определенному адресу. Ты вставляешь еще один элемент - вектор решает что самое время увеличиваться и аллоцирует новый кусок памяти в размере заданом reserve - первый элемент уходит по новому адресу.
Сап плюсач. Помоги мне с COM портом. :3 Есть ли гайды, с пояснениями, как с ним работать - отправлять/принимать сообщения и тому подобное? В гугол пробовал но там ничего толкового не нашёл.
>>600068 >вызываю reserve(100000), память не изменилась Со 100000 такого быть не может по стандарту. Ты уверен, что правильно задетектил аллоцирование памяти? В отладчике смотрел, что конкретно происходило? Вангую, что ты что-то напутал, но если нет, то ты определенно можешь пилить баг-репорт, это не какой-то там мелкий баг, а охуенно серьезно.
Аноны, помогите нубу. 22 лвл, в магистратуре оказалось, что могу заняться научкой, связанной с с++, всякие там программы для обработки данных (физик), будет наставтик. Какие камни? СЛегка знаю джаву, учил сам. Потом хочется, конечно, работать не по специальности.
>>600128 Ебать, ну человек занимается наукой, а я-то не планирую. Ну и да, раз в года, реже в два, каждому приходит на 500к, неплохой такой бонус, учитывая, что з/п около 80+всяик ништяки от универа
http://pastebin.com/GHJuXhFu На старом GCC не помню версию на винде всё работает. На 4.8.1 GCC и на майкрософтовском 6.0 на сайте проверки компилируется, но с двумя тестами какая-то хуита хотя у меня они проходят. На новом GCC на линуксе выводит пикрелейтед. Что с этим кодом?
И все равноя не понял с этими либами. Если я блять перекомпилировал после изменений, это мне еще заново make install делать для нее что ли, блядь. Ахуеть вообще.
>>600141 Стоп. Поясни ещё. Если в параметре функции я пишу vector<Time>& v, то у меня всё работает, а на сервере gcc 4.8.1 ошибка компиляции, а если я пишу vector<Time> v, то программу везде компилируется, но в некоторых тестах ответ не правильный лишний раз выводит некоторые пары. В чём разница и из-за чего это может быть?
>>600200 И он не называл 80к успешностью. Он сказал что это универ его на работу устроит за такую зарплату и будет ништяки ещё давать. Учитывая те 500к может и 110-120к зп планирует.
>>600307 >>600302 Бля да нихуя я не хочу получать с науки. Хочу закончить магистратуру и попутно получить скилл в с++. Я ж не ебанутый, чтоб работать за хлеб, уже наработался.
>>600205 Ну смотри. ое Скачал я сырцы одной увесистой программы, браузера. Часть исходников компилится в .so, остальное в исполняемый файл. Т.е. каждый раз, когда я добавляю строчку кода, добавляю хоть одну ебаную букву в проекте, для проверки изменений мне нужно на секундочку делать make install снова, чтобы обновить .so-шки? Или есть какие-то обходные пути ?
>>600375 >изменив 1 файл не перекомпилировать весь проект Это и без меня блять делается. У меня нахуй весь проект и компилируется в одну .so и пару .so.1 или что-то вроде, и исполняемый файл, который эту либу юзает. Для того чтобы эту ебучую либу юзать, мне ее нужно закинуть в нужное место, т.е. блять в /usr/share и две еще сопровождающие ее в /usr/lib, блять И ОНА СУКА ПОСЛЕ ПЕРЕКОМПИЛЯЦИИ НАХУЙ САМА СЕБЯ НЕ ЗАМЕНИТ в том месте, исполняемый блять файл будет жрать то говно старое, которое лежит в системных директориях, а не в build. Хули непонятного я спросил?
>>600344 В нормальной системе сборки при таком раскладе пересоберется один объектный файл, слинкуется бинарь или so'шка и Всё Линковаться будет секунд 10 ну минуту если большой проект
>>600379 Алсо, этот ахуительный скрипт о котором ты говоришь это просто make install, только это проблемы не решает, мне не охота срать этим говном в системные директории каждый раз когда я добавляю пробел
>>600390 О'кей, добавил $PWD, теперь работает. Осталось сделать так, чтобы это распространялось и на ИДЕ. Спасибо, анончики, давно эта хуйня терзала, оказалось просто
Есть на плюсах библиотека, реализующая модель акторов? В идеале - опенсорсная, хоть почитаю, как реализована.
И вообще по языку вопрос: в современных плюсах хорошей практикой является использование преимущественно смарт-указателей вместо простых? Я просто сам знаю си и кресты на уровне чуть выше универских лаб - так получилось, что больше на яве практики было.
Сап проганы. Планирую весной начать искать работу с++ джуном. На данный момент изучил базовые конструкции языка, сейчас осваиваю STL и фреймворк Qt. Если кто устраивался на джуна, не впадлу, скиньте примеры тестовых заданий для джуна. Попробую порешать и соответственно восполнить пробелы в своих знаниях. Сам не студень, работаю несколько лет в IT (быдлоадмин), некоторые аспекты деятельности заебали, хочу перекатиться.
>>600764 Да вот, буквально вчера в своем мухосранске нашел: http://tomsk.hh.ru/vacancy/15208411 Написал им в контору, так и так, пацаны, скоро в кодинг перекатываться буду, скиньте з0даний если не жалко. Пока нихуя не ответили.
>>600758 Саттер и Мейерс почитай перед собеседованием. Даёт обычно утечку памяти найти и что выведет программа с наследованием и указателями. Ещё задачку могут дать решить. Но хуй ты найдёшь работу.
Мужики, ебать, слышал что можно на крестах сайтец себе ебнуть. Мне как раз нужно было один пильнуть для души так сказать. Так вот, норм это идея вообще или == выстрелу себе в ногу? Поясните короче за все.
Блять, пиздец. Стараешься, учишь буст, следишь за стандартом, контрибутишь в попенсос, а все нахуя? Бестолку, РАБОТЫ ТО НЕТ))) Пока c#/java/js альфачи коворкают в нетворкинге без задней мысли и заколачивают себе на смуззи и новую жоповозку
>>600864 Че учить-то тогда, чтобы перекатиться и с голоду поначалу не помереть? Кресты вроде как надежная вещь, проверенная временем. Веб-макакой не хотелось бы становиться, субъективно мне оно даунизмом кажется -- клепать веб-странички на похапе. Бекенд разве что писать. c# прибит гвоздями к венде, java разве что остается.
Вот такая задача на пикеебучая винда не умеет в скриншоты а пэинт в обрезание картинок и вот такой вот код http://pastebin.com/ygu9yhdB Проходит только половина тестов. Как ускорить?
>>600915 Я бы вообще по-другому сделал: 1) проходишь по всей карте и составляешь соответствие "сколько программистов с таким-то количеством плюсов", во время цикла отслеживаешь максимальное количество плюсов и индекс программиста с этим числом плюсов 2) по окончании цикла узнаешь, сколько программистов с максимальным количеством плюсов: если больше одного - возвращаешь 0, если один - индекс, который ты в цикле записал.
>>600906 Да вообще. Приходишь такой с утра на работу, до обеда пишешь либу, коммитишь. А потом вспоминаешь, на дваче-то сказали, что работы нет. И уходишь домой.
>>601096 Пришел я значит за мотивацией и примерами тестовых заданий, которые попадаются на собеседованиях. А мне говорят, хуль пытаться, работы не завезли, зарплат нет, джуны не нужны. Двощ мотивирующий!
>>601274 Ты видишь что тред полумёртвый? Тут такое не обсуждают. Хочешь что-бы на тебя обратили внимание и ответили сначала спроси про плюсы и минусы использования constexpr или как лучше дебагером пользоваться. Потом разожги конструктивный срач который за 2 дня тред в бамплимит унесёт. И в середине срача ворвись со своим вопросом.
>>601274 Иди нахуй отсюдова. Это не просто прострел ноги, это, блядь, прострел ноги через яйца - на крестах даже нормальной орм нету, а твои костыли будут по дефлоту медленнее даже ебливого похапе поделия (это кстати проверенные данные, а не пиздёшь, всё гуглится). Я бы посоветовал посмотреть на vibe.d - не кресты конечно исправленные кресты от александерску, лан, но самое лучшее решение имхо.
>>601331 vector<string> hui; for (int i = 0; i < n; i++) { char *buff = new char[228+1488]; cin.getline(buff, 255); hui.push_back(move(buff)); } for (auto i : hui) cout << i << '\n';
BYTE * dialog = new BYTE[14]; fread(&dialog, 1, 14, fIn); for (unsigned int i = 0; i < diff; i++) fprintf(fOut, "%02X ", dialog);
В конце файла остаётся 14 байт, который мне нужно считать и вывести в другой файл. Почему данный код приводит к "stack around "dialog" variable was corrupted"? При этом вылет в момент завершения программы, а не при выполнении кода, но 14 байт не появляются в fOut.
Анон, как можно отрефакторить этот быдлокод, чтобы он был максимально отличен от исходного, выглядел написанным с нуля и необфусцирован? Одни только внешние векторы A, B, C уже будут выдавать авторство.
>>601748 Так и думал, что подобный код пишет какая-нибудь сишарпомразь. У нас на курсе шлюха не осилила алгоритмы и структуры данных и пересела на шершавый, обосновывая это тем, что на шарпе писать алгоритмы проще. Но и на шарпе не смогла их писать.
>>601761 Лимит времени 500/500/500/500 мс. Лимит памяти 16000/16000/16000/16000 Кб.
Любой уважающий себя MP3-плеер должен уметь красиво выводить множество никому не нужной информации на экран. Например, красно-зеленые полосочки, динамически отображающие текущую амплитуду сигнала. Естественно, амплитуда звуковых колебаний меняется так быстро, что имеет смысл отображать лишь некоторое усредненное значение — обычно это пиковое значение в течение определенного промежутка времени. Вам дано M — это количество миллисекунд, в течение которых надо помнить и отображать пиковое значение, а также последовательность значений амплитуды. Необходимо вывести последовательность, отображаемую в окошке плеера. Первое число этой последовательности является максимумом из первых M чисел входной последовательности, второе — максимум из чисел с номерами 2, …, M+1 и так далее.
Ввод В первой строке стоит число 1 < M ≤ 14000, далее стоят значения амплитуды (N целых чисел в диапазоне от 0 до 100000) по одному в строке. В самом конце стоит число −1 — это признак конца входных данных. M ≤ N ≤ 100000.
Вывод Выведите значения, отображающиеся на экране MP3-плеера, по одному в строке.
>>601761 Другими словами, здесь надо искать максимум на отрезке (или в очереди) за O(1). Я реализовал поиск максимума в очереди при помощи двух стеков, но эта залупа хотя и работает, но на контестере выдает Presentation Error.
Решил реализовать код Хаффмана. Сначала надо построить алфавит. Он должен содержать символы произвольного текста и их частоты. Алфавит я решил реализовать при помощи std::set< std::pair<char, double> >. Как при считывании каждого символа на лету изменять его частоту в set? Поскольку элементы set уникальны, то можно каждый раз вставлять в него символ с обновленной частотой. Блять, дописал до этого места и понял, что элементы в set не будут обновляться при таком подходе, потому что у них одинаковое поле "частота". Как правильнее это реализовать?
>>601843 Смотри, как строится дерево. C - алфавит из символов + их частоты. Все это копируется в Q - видимо, это куча, у которой наверху пара "символ-частота" с минимальной частотой. Кроме того, элементы Q должны содержать поля left и right для задания структуры дерева. Какую структуру данных надо выбрать для Q? Цифровое дерево? Как определить его элементы?
>>601876 С чего ты решил, что это будет работать? Во всех примерах с итераторами к ним обращаются через точку. https://ideone.com/XfhhBM
Проверку того, содержится ли символ в векторе, сделал так: создал еще один вектор char, который на i-м месте содержит 1, если символ еще не был обработан, и 1, если символ содержится в векторе. Но почему-то эта проверка не работает.
>>601846 Затем тебе вектор пар. Просто вектор, у которого индекс - это твой char. Собственно, fr у тебя в коде, это оно и есть, только нужно поделить на общее число. https://ideone.com/2mzamD Когда тебе нужно отображение из числа во что-то, массив часто является самым простым и естественным решением. Иногда - unordered_map, потом - map. Set тебе тут вообще не нужон.
В отладчике обнаружил, что вектор неправильно заполнялся из-за неинициализированного count. Вроде, теперь работает. С помощью чего реализовать множество Q из ТЕТРАДКИ? https://ideone.com/2dONMi
>>601899 Просто у меня 10-я студия, которая не поддерживает новый стандарт, и приходится уже на идеоне хотя бы частично переписывать мой код в соответствии с C++11.
>>601901 Я не игнорирую. Я не успеваю переписывать свой говнокод, редактировать его на идеоне, думать о выборе контейнеров и изучать листинги анона. Десятая студия не может в охуительный новый синтаксис.
>>601767 Нарисуй на бумажке массив длины n. Разбей его на массивы длины m. Посчитай для каждого такого массива частичные максимумы слева и справа (max(a1), max(a1, a2), max(a1, a2, a3), ... и max(am) max(am-1, am), max(am-2, am-1, am), ...) Теперь нам приходит запрос: максимум на отрезке [k, k + m - 1]. Внутрь этого отрезка обязательно попадёт значение с индексом кратным m. Вопрос, как теперь разбить запрос на два?
Ответ вот тут: http://ideone.com/WwI4uK Это что-то похожее на дерево отрезков, только для отрезков длины m, вместо max можно использовать любую другую ассоциативную операцию.
>>601907 >Знаешь, -> это наследие ещё из сишечки. Я чистый си знаю. Просто я видел много кода, написанного на разных стандартах C++, и у меня разрыв шаблона оттого, что где-то (*it) и стрелочки, потому что там указатели, а где-то for(auto it: alpha) и обращение через точку.
>>601910 >Нарисуй на бумажке массив длины n. Пока еще не вникал в алгоритм. У тебя там не будет квадратичной сложности из-за какого-то sliding_window? Судя по названию, ты моделируешь перемещение отрезка по всему массиву со сдвигом на один элемент и поиском максимума. Оптимальный алгоритм - это когда максимум зависит только от одного следующего символа и вычисляется за O(1). Это офигенно решается через поиск максимума в очереди, но почему-то контестер выдает странную ошибку presentation error, а не wrong answer.
>>601915 >Судя по названию, ты моделируешь перемещение отрезка по всему массиву со сдвигом на один элемент и поиском максимума А если код почитать или объяснение? Время O(n), память O(n). >Оптимальный алгоритм - это когда максимум зависит только от одного следующего символа и вычисляется за O(1) Амортизированный O(1) Ты пытаешься описать следующий алгоритм:
Рассмотрим некий набор элементов в окне размером m. Можно заметить, что если в этом окне справа от элемента есть элемент больший его, то он всегда будет затмевать его и поэтому меньший элемент можно не рассматривать. Следовательно, элементы в окне представляют собой строго убывающую последовательность длины <= m. (и максимальным элементом в начале этой последовательности) Представим, что к нам приходит новый элемент в окно. Выбросим из неё все элементы, которые он затмит. Потом выбросим из последовательности все элементы слева, которые покинули наше окно. (Мы делаем это лениво) Время O(n), память O(m) http://ideone.com/LxWW88
>>601752 >>601753 Так, минутку, я сейчас про переменную цикла говорю. Т.е. про i, в который записывается католичество пройденных итераций цикла. У меня стойкое ощущение, что мы друг-друга не поняли, ибо нахуя для этого алгоритм янепонимат. да и есть же пресловутый паттерн фабрики, там какбэ в любом случае переменные в цикле инициализируются
>>601952 >>600915 Уфф, вот это задачка, не то, что ты раньше кидал.
Значит, смотри. Есть 3 типа пар: сравнимые, несравнимые, равные. Например, (A, B) и (B, A) это две разных пары. При этом, если A < B, то мы считаем, что сравнимых пар 2 (прямая и обратная). Видно, что n^2 это количество всех пар, а именно сравнимые + несравнимые + равные. Из всего этого проще всего посчитать несравнимые пары, тогда мы получим сравнимые. (Равные понятно как считать).
Будем строить гиперкуб, прибавляя по одной олимпиаде за раз. Сначала у нас одномерный гиперкуб, в нём две вершины 0 и 1. В первой - количество школьников, которые проиграли первую олимпиаду, а во второй - которые выиграли. Сколько у нас несравнимых пар? 0. Теперь мы хотим прибавить 1 измерение, то есть учесть ещё одну олимпиаду. Вершина 0 раздвоится на 10 и 00 Вершина 1 раздвоится на 11 и 01 Пробежимся по всем школьникам и посчитаем сколько школьников в каждой вершине, пускай это будет массив count. Сколько у нас теперь несравнимых пар? count[10] умножить на count[01]. Короче говоря, каждая вершина делится на + составляющую и на - составляющую. При этом, если вершина X < вершины Y, то несравнимых пар прибавляется X- умножить на Y+.
Значит, алгоритм такой: на каждой итерации строим из k-мерного k+1-мерный, при этом подсчитываем сколько у нас прибавляется несравнимых пар, когда раздваиваем каждую вершину. Как раздваиваем? Рассматриваем все рёбра гиперкуба, меняющие некоторую координату с 1 на 0.
Время работы: на k-м шаге мы просматриваем все рёбра k-мерного гиперкуба, а их k 2^(k-1) питон подсказывает, что всего просмотрим 983041 рёбер. Плюс, нам ещё надо будет 16 раз пробежать по всем школьникам, а это 16 * 65536.
Получается где-то три миллиона примерных операций. Значит, хуёвый алгоритм, но ты попробуй, вдруг прокатит.
>>602068 То есть нужно считать не только прямых детей, но и детей детей, итд. Имеем гиперкуб на какой-то итерации. У каждой вершины есть два числа: сколько школьников, если дописать к ней слева 1 и сколько школьников, если дописать к ней слева 0. Если число школьников с нулём слева ненулевое, тогда нам нужно посчитать сумму школьников в вершинах, достижимой из этой, к которым дописали слева 1. Это делается обычным dfs-ом за 2^k.
Есть такая задачка: нужно отрисовать график из 100 000 точек. При этом нужно, чтобы при зуме он не тормозил. Очевидно, надо данные прорядить, но тогда я не увижу резких всплесков на графике, пока не прибавлю зум. Или есть способы как прорядить данные так, чтобы были видны резкие вплески?
>>600915 Ещё что забавно, если считать, что программистов одного типа всего 1, а не несколько, то всего таких пар программистов может быть 3^16 - 2^16 ~= 42 миллиона. Значит, нужно как-то срезать углы при подсчете даже с учётом уникальных программистов.
>>600915 Как вариант, у тебя там максимально возможное количество вариантов побед в олимпиадах меньше максимально возможного количества программистов, правда всего в два раза. можно попробывать сгруппировать не по программистам, а по вариантам побед - тоесть массив, каждому индексу в котором соответствует один из вариантов распределения побед и туда записано количество программистов с таким распределением. Строку символов переводишь в число (как ты делаешь) и получается индекс этого варианта побед. Дальше проходишь по массиву, находишь не нулевый элемент, после чего находишь сколько программистов менее собразительные - для этого проходишь по массиву в сторону уменьшения от найдетного элемента и суммируешь все элементы в индексе которых нет еденицы в тех позициях где нули в индексе найденого элемента (инвертируешь индекс найденого и делаешь побитовое И со всеми меньшими индексами - там где получаешь еденицу скипаешь). Полученые два числа перемножаешь и добавляешь к результату. Сложно все равно квадрат, так что врядли тебе это поможет, но получается что итераций в 4 раза меньше (максимум).
>>602223 В среднем олимпиадные компьютеры тянут миллион операций в секунду. Любой алгоритм, который будет находить и честно просматривать все искомые пары, будет работать в худшем случае 42 миллиона операций, или 42 секунды. Кажется, этим они пытаются намекнуть нам, что если кто-то даст нам массив уже готовых пар, по которым надо будет только пробежаться и просуммировать, то у нас вылезет TLE.
>>602163 Вычитаешь из всех значений наименьшее. Диференциируешь масив (или что у тебя там) и вычисляешь среденее диференциала, проматриваешь его и отбираешь точки в окресности сплесков (существенное отличие от среднего)
>>602198 Всмысле? Есть у меня 100 000 точек пи уровне зума 1х. Масштабирую (к примеру на сенсорном экране) пальцами до 5х и что, ждать пока оно прорисуется? >>602206 Т.е. даже если 100 000 точек в экран невлезают рисовать сразу все? >>602209 Не важно пока.
Фильтруешь сигнал так, чтобы в нем отсутствовали частоты выше частоты Найквиста после децимации, после фильтрации децимируешь сигнал за прорЯдить отдельные лучи поноса, редкий блядь, а не ряд. Но GPU с этим справится лучше.
Ребят, мой любимый тред в pr,. поэтому спрашиваю тут, . а не где-нибудь ещё, хотя к CPP прямо не относится.
>В общем, я имею базовые знания в pr и техническое образование (до этого несколько лет работал инженером в ИТ, но надоело). Cобирался пару месяцев готовиться - немного углублять и потом начать искать работу именно pr,. И даже начинал : - рулетку делал, - книжки читал, - на форумах вопросы смотрел,
но такое чувство возникало, что заканчивая одну книгу - во второй натыкаюсь на тоже самое., будто топчешься на месте. Обычно в таких ситуациях (и тут в треде и в других местах) советуют начинать пилить свой проект, или лезть в гитхаб. но мне всё уже будто стало по барабану - мозг как будто в упадке и какие-то идеи приличные в голову совершенно не лезут. да и неприличные тоже. В голове только беспокойство, что мне надо идти на работу, что надо быстрее найти работу, но при этом я легко могу себе позволить не работать даже полгода - не шиковать, но жить вполне комфортно. чтобы готовиться. Но я просто не могу сидеть дома и делать что-то, ради абстрактного фидбека, в виде опыта - хотя по логике в этом есть огромный смысл. Но я всё-равно сижу дома.
Вот думаю, если забью на свой план - а просто пойду работать пропадёт ли эта апатия? С другой стороны, не уверен. что меня возьмут.
У меня нет вопроса, но прошу ответы.
ребята - прошу не троллить и не издеваться, хоть это и банальные биопроблемы написал бы в социальный тред, но он утонул. или мне не выёбываться и полечить голову у психотерапевта и антидепрессантами.
>>602397 Устроиться на работу поможет (по крайней мере на какое-то время)). Можешь попробывать просто ходить по собеседованиям чтобы испытовать свои знания.
>>602448 Один раз был на собеседовании. Контора была маленькая, со мной говорил один из программистов. После этого я чувствовал себя пиздец какием униженным. Нахуй работу.
>>602452 Показал ему свои поделки. Отвечал на вопросы. Каждый раз, когда отвечал неправильно, он говорил какую-либо подъебку на тему того, что жто вообще каждый даун знает.
>>602377 Вариант - пооптимизировать то, что есть, пока тесты не начнут проходить. Возможно, написав разные варианты для больших и малых N. Сначала отсортировать и выкинуть равные. Останется 65536 максимум. Еще бы хорошо во внутренний цикл запихнуть break. Когда массив отсортирован, у нас lhs<rhs всегда, и в ситуации типа такой: 010000 vs 100000, смысла проверять дальше нет. Т.е. когда a&b==0.
>>602397 >В голове только беспокойство, что мне надо идти на работу, что надо быстрее найти работу, но при этом я легко могу себе позволить не работать даже полгода - не шиковать, но жить вполне комфортно. Зима, световой день короткий, пей витамин Д, лампочки вставь.
>Обычно в таких ситуациях (и тут в треде и в других местах) советуют начинать пилить свой проект, или лезть в гитхаб. Не обращай внимания на аутистов. Работать бесплатно (даже не за спасибо или когда ты знаешь, что вот эта хуйня сильно облегчит тебе жизнь) - отстой.
>>602317 Хуярь эти вычисления наперед, чтобы потом, если юзеру захочется, просто вытаскивать результат из кеша. Превентивное кеширование. Иначе гроб гроб кладбище фризы.
>>602317 >Т.е. даже если 100 000 точек в экран невлезают рисовать сразу все? 100к точек потянет даже самая каличная мобильная видеокарта. Тем более, что рисоваться они будут за один вызов.
>>602574 >>602628 Хотя погоди. Если фильтрануть и прорядить для каждого уровня зума (допустим их будет 10), то не так и много. Останется только выбрать из массива данные из нужного диапазона и интерполизовать крайние точки (чтобы листать график)
Пытаюсь считать адрес. Если там ноль, то дропаю, а если не ноль, то считываю другие параметры. Если time > 0, то всё хорошо, можно запускать основную функцию.
Сделал то же самое, но через отдельную функцию. http://puu.sh/lVLuM/36005440c8.png Теперь нихуя не работает, у меня wait_on всегда true.
>>604021 Если такое и правда где-то есть, этого очень мало, оно только по связям / по универской мазе, и оно недоступно простому смертному. Я когда без СТАЖА был, не смог найти работу ни крестовиком, ни потом джавистом. Никто даже на резюме не отвечал. А вот на жаваскрипте почти сразу нашёл. Сейчас у меня психика настроена таким образом, что я в 99% случаев просто не могу заставить себя даже взяться за что-либо, что не гарантирует стопудово успех и профит. Я хоть и умею генерировать на шаблонах хайлоад парсеры и стейтмашины, и кресты да соответствующие гипотетические задачи из системщины / геймдева / десктопа мне интереснее, но я не могу даже начать пытаться вкатиться в это профессионально, потому что я блять ЗАКОДИРОВАЛСЯ, у меня это вызывает глубоко неприятные ассоциации с кучей проёбанного времени с нулевой выгодой, я начинаю смотреть вакансии и прикидывать "а чё если мне там не понравится, то куда я пойду", "ой да нихуя же нету", "а тут я не подойду, тк у меня нет 10 лет опыта директикс/опенгл", "а там меня вообще нахуй пошлют, потому что я поехавший" и шлю это всё нахуй. Пускай кому надо продолжают "Брали интернов, джунов пачками и воспитывали". Лично меня и других людей, к кому такие предложения ЛИЧНО не поступали, это никак не касается, и нет никаких оснований считать, что коснётся в обозримом будущем.
>>604094 >что не гарантирует стопудово успех и профит Так С++ как раз тебе и гарантирует успех и профит. Никакой гонки за технологиями, инкрементальное развитие, тусовка среди опытных и уважаемых людей. В язык уже даже коротюны завезли, что еще нужно.
>>604305 Свойства языка и прочие вещи такого уровня не имеют в таких вопросах абсолютно никакого значения. По моему опыту, на ~20 сброшенных резюме будет один ответ. То есть, чтобы расчитывать хотя бы на 10 откликов надо чтобы было хотя бы 200 вакансий. При этом, на всякий типичный веб вакансии однотипные с точностью до технологий и ты хотя бы знаешь о чём там речь в требованиях и можешь в резюме пояснить за свой релевантный опыт или знания. На С++ вакансий мало и везде хуйня типа 10 лет опыта в какой-то маргинальной хуйне, каждая в своей. Где-то опенцв, где-то винапи, где-то директикс и тд. Если ты реально начнёшь сам задрачивать какую-то такую хуеверть, ты сможешь через пару лет постучаться на одну или две ссаные вакансии со своими ссанными хобби проектами и знаниями. А чтобы была возможность претендовать хотя бы на десяток вакансий надо потратить лет 6-9. А десяток вакансий - это примерно половина одного отклика, то есть скорее всего тебе даже не ответят.
>>604375 Может у тебя резюме хуево написано? Сталкивался с подобной проблемой. Один рекрутер из крутой лондонской конторы помог переписать резюме и откликов стало намного больше. Хотя последние 4 года все предложения получаю через линкедин. 4-5 в месяц стабильно, притом что не особо ищу работу. Сначала добавляются рекрутеры, потом предложения пачками валятся.
Сап, анон Собсна написан класс с одномерным массивом, надо перегрузить + и +=, все сделано, но когда возвращаю измененный массив в мейн, парочка значений просто обнуляются , хуй знает что делать. http://pastebin.com/HyCrkC1D Вывод в консоле: Input size=3 Elem[0]=1 Elem[1]=2 Elem[2]=3 Elementi= 3 1 2 3//вывод из функции Elementi= 0 0 2 3//вывод после возвращения Elementi= 1 2 3 3//вывод из функции Elementi= 1 2 3//вывод после возвращения
>>604375 >Свойства языка и прочие вещи такого уровня не имеют в таких вопросах абсолютно никакого значения. Имеют. Сначала порог вхождения С++ работает против тебя, потом он работает на тебя.
>>604475 >рузить + и +=, все сделано, но когда воз У тебя там какая-та хуйня с оптимизацией возвращаемых временных объектов из функций. Если удалить твой деструктор то все должно работать норм, только с утечками. Первая проблема что отсутствует оператор присваивания копированием (гугли "правило трех"). Но он мало поможет, там какая-то ебатня с оптимизациями (возврщаемого значения) - когда возвращаешь из функции временный объект не вызываются твои конструкторы копирования, но вызывается деструктор который удаляет твой массив. Но какая-то копия таки создается и адрес твоего массива (который уже "осовобожден" уходит в новый объект. Правда не ясно чего там постоянно именно две первых позиции забиваются нулями/мусором. Я покулупался но не смог разобраться, все странно как-то. Также operator+= должен модифицировать исходный объект (по своему традиционному смыслу), чего ты не делаешь, тебе временный там и создавать не нужно - возвращай модифицированый исходный. Также у тебя какой-то странный operator[], возможно там лишнее вычитание еденицы.
Как заставить себя учить язык? Когда начинаю учить, вроде интересно, а потом появляются какие-то дела, и постепенно забываешь. При чём, иногда просто сижу и ничего не делаю, просто двачую, хотя мог бы потратить это время с пользой. А потом корю себя.
Кто-то собирал Qt5.6? Пиздец, у меня в упор не хочет собираться ебаный QtWebEngine!\ Python version 3 is not supported by Chromium. Python version 2 (2.7 or later) is required to build Qt WebEngine. Python version 3 is not supported by Chromium. Python version 2 (2.7 or later) is required to build Qt WebEngine. QtWebEngine will not be built. Я уже все что угодно нахуй перепробовал!
>>605243 Расскажите лучше - как мне упаковать всю эту кучу QT-шных .DLL в один .exe. Или хотябы как это сделано в qBittorent: 1 экзешник и какой-то файл в который запаковано всё.
Сап крестаны. Объясните мне, пожалуйста. Почему значение не присваивается переменной var из меню (строки 60-82) в цикле do while, а без do while присваивается? http://ideone.com/vVkGc3
Так слились с дряхлым легаси они,
Что даже червь не будет столь ничтожен!
Давно в забвеньи байтоебства дни,
Но жалкие живут лишь теми днями.
Как мучают они себя, взгляни!"
О крестобляди, гордые сердцами,
Несчастные, чьи тусклые умы
Их завели попятными путями!
Не покидая стен своей тюрьмы,
Терзаются минувших лет страстями,
Утратив шансы выбраться из тьмы.
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
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования 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/e1V5BC
Герб Саттер - Решение сложных задач на 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++. Справочник разработчика (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
Куча других блогов (на ангельском) - 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, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Еще у нас есть 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://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