git push, когда уже зарделось небо, Я ввел и слушал, как в слезах сквозь сон Жена и дети жадно просят хлеба.
Влачить существованье обречен, Кто лямку крестоебства не отринул И был Его печатью заклеймен.
Ныряя в говнолегаси рутину, Я жду, что мне хозяин бросит кость. И, зная нищеты своей причину,
Таю на сытых джаваблядков злость.
FAQ:
Q: Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20%, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, что не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования 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) Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Под шиндошс удобно использовать 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) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
>>574732 Его же еще не приняли, в ближайшие два года можешь не волноваться. Алсо, эта версия не такая уж и новая, последние заседания были весной, так что ей уже полгода, считай.
Мне нужно получить тело сообщения. Я то его дёрнул инб4:анус себе дёрни , но хуёвым, как мне кажется, способом. Вот он: QJsonDocument doc(QJsonDocument::fromJson(reply->readAll())); qDebug() << doc.object().value("payload").toObject().value("parts").toArray().at(1).toObject().value("body").toObject().value("data").toString();
Как на С++ распарсить строку вида "%d/%d/%d", если второе число опционально (может быть "%d//%d"). В Си я бы написал парсер на 30 строк. В Руби я бы сделал s.split('/') (получив O((N*dohuya)^dohuya) по памяти и по времени). Я так понимаю, в С++ должно быть что-то среднее.
Сосоны, ебусь с многопоточностью. Надо сделать Producer-Consumer не через ивенты не лаба, но близко . Мой взгляд пал на критические секции: >Поле LockSemaphore используется, если нужно подождать, пока критическая секция освободится. Если LockCount больше нуля, и OwningThread не совпадает с уникальным идентификатором текущей нити, то ждущая нить создает объект ядра (событие) и вызывает ::WaitForSingleObject(LockSemaphore). Нить-владелец, после уменьшения RecursionCount, проверяет его, и если значение этого поля равно нулю, а LockCount больше нуля, то это значит, что есть как минимум одна нить, ожидающая, пока LockSemaphore не окажется в состоянии "случилось!". Для этого нить-владелец вызывает ::SetEvent(), и какая-то одна (только одна) из ожидающих ниток пробуждается и получает доступ к критическим данным. Соус: http://rsdn.ru/article/baseserv/critsec.xml#E2D
Но я что-то так и не понял, как мне добиться вызова этого ивента. Писал что-то вроде: DWORD WINAPI Producer(CONST LPVOID param) { for(int i = 0;i<100;++i) { EnterCriticalSection(&cs); x++; LeaveCriticalSection(&cs); cs1.OwningThread = param; } ExitThread(0); }
Где param — хендер на другой поток. Но ему похуй на владельца. Увеличивал счетчик LockDown вручную до единицы к этому же(редкое быдлокодерство, знаю), но и это не помогло. Так как же корректно вызвать этот ивент из ядра?
Ньюфажие итт. Допустим есть вектор строк, как их сохранить в бинарный файл, чтоб потом можно было считать в другой файл? Длина то у строк разная, хуй знает сколько байт считывать надо. Записывать отдельно перед строкой ее длину?
Ребзя. Есть класс динамического массива. Нужно намутить туда счётчик копий (т.н. reference counter) на основе smart pointer'ов. Как это можно реализовать?
Пытаюсь читать верхний элемент стека и выскакивает segmentation fault. Стэк на пике в момент чтения. Я нихуя не понял, но там должна лежать строка. Он пуст? И как сделать continue для основного цикла если нахожусь во вложенном цикле?
Хочу задать глупый вопрос, прошу не закидывать хуями. Как мне получить доступ к памяти другой программы т.е. из написанной мной xyuta.exe получить доступ к памяти xyuta_2.exe ? Возможно ли это на c++ ?
А я смогу параллельно читать Страуса для ньюфагов и книгу по Qt Шлее? То есть хватит ли знаний (половину книги прочел) от Страуструпа, чтобы почитать qt? Поясните пожалуйста.
Господа, а чем сейчас модно конфиг писать? Данные сложные, текстовый файлик вида ключ=значение не пойдет. XML и boost::serialization тоже не предлагать.
>>575526 >И как сделать continue для основного цикла если нахожусь во вложенном цикле?
Если тебе необходим незамедлительный переход к продолжению внешнего цикла при выполнении условия condition, то в нужном месте вложенного цикла >if (condition) break;
Если тебе необходимо допройти данную конкретную итерацию вложенного цикла, а затем перейти к продолжению внешнего цикла, то просто допиши проверяемое условие внутреннего цикла с check на check && condition
>>575672 Если эта вторая программа не против обеспечить доступ, то все просто, гугли разделяемую память и позаботься об отсутствии гонок. Если она не должна меняться, то сложнее. Напрямую другому процессу это никак не сделать, но можно попробовать обратиться к ОС, у нее есть права на трассировку или функции вроде той, что предыдущий кун сказал.
>>575832 Я не очень люблю куте неосилятор кококок, немного считаю его громоздким говном, и вообще. Но вполне возможно, что я ошибаюсь, да. Если напишешь внятный параграф про него для шапки и принесешь пару годных книг, то я добавлю, разумеется.
Если объявить функцию внутри функции она в сегменте кода будет после компиляции или каким-то волшебным образом на стек будет ложиться? Есть хитрости чтобы её вызвать из вне области видимости?
>>575899 Кроме куте я писал как писал, лабы-курсачи на шарпе и яве, и входил в цпп, в основном те же лабы-курсачи, но с объектами.
С qt столкнулся на работе, и он сразу мне понравился. Во-первых, программирование мышкой кнопочек форм прозрачные, чем в vs, но имеет принципиальные отличия от нее, во многом схожие с нетбинсом. Во-вторых, это цпп, но максимально удобный для тебя. В третьих, это огромная справка с типовыми примерами, охватывающие этот ваш веб и низкоуровневую графику на опенгл.
Qt максимально советует использовать свои объекты, унаследованные от стандартных классов виджетов (кнопки, текстбоксы). Шарп чому то не давал такой прозрачности программирования.
>>575902 >объявить Объявление мало на что влияет - только увеличивает область видимости или заставляет линкер искать реализацию в других файлах. На расположение никак не влияет.
>>575928 Не всегда. friend-объявления, например, могут размещать тело в объемлющем скоупе, и это позволяет делать ужасные вещи, как показал тот нигра-швед.
>>575932 Не, ну а что тебе не нравится-то? Я всегда и целиком за расширение шапки, пилите же апдейты. В куте я недостаточно компетентен, вот и предупреждаю сразу, что я максимум могу надергать в шапку рандомных книжек, а это вряд ли то, чего мы все хотим от треда.
>>575902 Ну сам-то как думаешь? стек неисполняемый например Можешь попробовать вычеслить адрес после загрузки и вызвать по нему, но в пределах языка не получится.
Ребят, выручайте. Я в плюсах не силен, вообщем ближе к делу.
Как создать двумерный динамический массив на основе vector'a ? Можно ли создать собственную структуру или есть что-то оптимальней ?
Сама задачка стоит так, На входе: в первом ряду - число таблиц для сортировки, потом для каждой таблицы размер таблицы. И потом парами числа и их кратности разделенные пробелами. Потом вводим кол-во измерений для поиска. Потом секвенция этих измерений, разделенная так же пробелами. Пример такой, на входе : 4 4 199 3 213 2 312 4 324 2 6 79 2 32 1 312 5 24 2 75 10 24 3 4 119 4 413 2 112 4 54 2 6 19 1 32 2 312 4 34 7 13 2 19 3 5 10 19 3 75 77
Последняя таблица соединяет в себе предидущие. Если встречаются 2 одинаковых числа, то они объединяются по след принципу: На входе: 12(3) 5(2) 10(1) 5(4) А после сортировки :
5(6) 10(1) 12(3)
Собственно реквестирую помощь в создании массива, и че делать с кратностями ? как их реализовать ?
>>575985 >Как создать двумерный динамический массив на основе vector'a ? Можно ли создать собственную структуру или есть что-то оптимальней ? В задачу не вникал, но вектор сам по себе динамический. Вот эти методы могут пригодиться.
Сап программисты, ничего не умею и ничего не хочу, сижу дома 24/7, мамка гонит на работу, а я её уже года 2 найти не могу. Можно ли выучить С++ ленивому хую и где-нибудь в онлайне хотя бы 5к в месяц иметь?
>>575990 Спасибо. Создал двумерный массив вида [Таблица][Сами элементы] И отдельный массив ( не из класса вектор), который хранит кратности. Написал мердже сорт, сортирует норм но с павторами. Теперь вопрос такой, как избавиться от повторяющихся чисел ? (Как узнать что они повторяются? При этом не/не сильно увеличивая время исполнения ?)
После этого буду в отельной петле удалять лишние числа при помощи метода erase, и суммировать кратности. >>576072 Спасибо, я прям прослезился.
>>576096 >Теперь вопрос такой, как избавиться от повторяющихся чисел ? В отсортированном одномерном массиве? Ну хуй знает. Проверять 2 соседних элемента и если они равны удалять 1 из них не пробовал?
>>576101 Знаю, что есть, но тк это задачка с алгоритмов то использовать оные библиотеки нельзя ) Там есть и бинарный поиск вида (ключ, размер). Но нужна своя реализация
>>576117 Лол, эти школьнички умудряются долбиться в глаза, спрашивая то, что есть в шапке, даже когда она вся перед глазами. Если ее убрать на пастебин, то считай, что ее вообще не будет.
>>576286 >const_iterator >[](char c) { return !std::isdigit(c); } >boost >regex Ещё не проходил. >strspn А это вообще не правильно работает. >stringstream Может пойдёт. Спасибо.
>>576253 Лишней может быть и нет, но есть более необходимая и менее необходимая. Стихи вверху я бы оставил из любви к искусству. В остальном шапка выглядит так:
В самом начале про IDE: или Visual Studio Community 2015 на английском, или g++
1) Информация для не написавших ни одной программы в жизни: видимо этот ваш Прата и Страуструп для ньюфагов, кто любит пажощще
>>576314 Джоссатиса надо оставить. Я его потом хуй нагуглю. Единственное лишнее это вот эта вот хуита. Но мне она не мешает поэтому можно и оставить.
>Памятка: > >Вопросу по синтаксису идут на хуй. >Лабы идут на хуй. >"Как мне сделать Х на чистых крестах без библиотек" идут на хуй. >Все идут на хуй. >Хейтер сосет члены на пару со своей мамашей. > >Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
В общем такая проблема, написал алгоритм для будущего калькулятора, откомпилировал в TDM-GCC 4.9.2, все прошло нормально. Перевел на winapi с кнопочками и откомпилировал в VC - все пошло по пизде, не выводит результат. Подебажив алертами, заметил одну неведомую хуйню: на пикрелейтед переменная existenceFirstOperand имеет значение true, а после завершения условия false, но блять, я там даже не присваиваю нихуя, какого хуя VC изменяет эту переменную? Стоит студия 15-ая, VC взят из папки Microsoft Visual Studio 11.0, компилировал cl.exe c такими параметрами (компилировать нужно именно в этом): >vsvars32.bat >cl Calculator.cpp
>>576358 Потыкал короче код и еще раз призываю не писать в стиле говняшной. Вот из-за таких мудаков о крестиках идет дурная слава. В общем ты память похерил своими strcpy.
>>576403 >Зачем тебе комп anon и юзер anon_pc? Наоборот же. >И как ты понял что он "память похерил своими strcpy"? Что за цветная каша на пике? Догадался, на пике высер gcc-шного AddressSanitizer.
>>576411 >Но зачем? Ну я прямо в растерянности от такого вопроса, так вот у меня сработало воображение когда ставил прыщи. >Как научиться им пользоваться? Или каким-нибудь другим дебагером? Да достаточно добавить во флаги "-fsanitize=address" и внимательно потом прочитать выхлоп. По gdb и valgrind'у в интернетах полно примеров и документации. Упомянутый в шапке cppcheck, кстати, тоже справился с этой ошибкой.
>>576420 Ой братан, спасибо за пик, понял где я проебался. Там при инициализации у меня под строку только один символ выделился, следовательно концу строки некуда вписаться. Люблю тебя.
>>576314 Ну давай разберем по частям... 1, 2. Все эти книжки для ньюфагов, вообще говоря, очень вкусоспецифичные. Если оставить только одну книгу, то кому-то обязательно не понравится именно она, из-за строгости/поверхностности изложения, присутствия/отсутствия упражнений, ну ты понел. Кроме того, уровни книг немного различаются, и разные темы освещаются с разным качеством в той или иной книге. Я не говорю, что надо пихать в шапку все существующие учебники, но выбор из трех-четырех самых удачных, ящитаю, должен быть. Тогда читать можно по принципу: не понял/хочешь моар/хочешь другими словами - смотришь эту же тему в соседней книге. 3. Если ты внимательно читал Мейерса, то ты заметил, что советы в разных его книжках практически не повторяются. Вторая книга дополняет первую, эффективный STL ВНЕЗАПНО почти целиком посвящен STL, про которую было мало сказано в первых двух книгах. Ну а последняя книжка вообще рассказывает только о фичах новых стандартов и никак не может заменять ранние. То же самое касается 101 правила Александреску-Саттера, там больший уклон в архитектуру, а не в детали, и формат другой. В общем, я не просто так написал, что пролистать нужно все книги в этом разделе, они действительно все самобытные, одной универсальной книги нет. 4 и далее. Страуструп это глубокая книга, но проблема в том, что она не широкая. Есть очень много аспектов даже стандарта, которые рассматриваются там вскользь, либо сухо и с уебищными примерами. Особенно это касается фич последних стандартов, издание с которыми, кстати, пока есть только на ангельском, а ведь мы должны идти навстречу анонам, которые не умеют/не любят читать на нем. Даже если забыть про это все, в продакшене используется не только стандартная часть, а либы и расширения уж точно не рассматриваются в стандартных учебниках наподобие страуструпова. Вот ты решил, например, вкатиться в кресты, прочитал Страуструпа, написал калькулятор или что там у него. И что? Ты стал погроммистом? Нееет, это только самое начало, и почти все в этот момент испытывают проблемы с тем, чтобы просто понять, в какую сторону дальше двигаться, что читать, что учить, что писать. Я думаю, что шапка должна по крайней мере пытаться дать ответ на этот вопрос в виде ссылок на популярные либы, блоги, документацию к бусту, общепризнанно годные инструменты разработки, короче говоря, должна нести пользу не только ньюфагам с лабами, но и тем, кто всерьез решил вкатиться в кресты. >>576317 Это как бы легаси, в тредах до меня в шапке было то, что сейчас в памятке. Я решил, что негоже без спросу стирать то, что предыдущий ОП вставлял. Если окажется, что он и аноны не против, то можно убрать или перепилить, конечно же.
>>576515 Тогда чтобы таких вопросов больше не возникало надо каждую книгу немного описать 1-2 предложения. И тогда можно убрать подраздел то что для нюфань и отдельные аспекты. Капсболдом темы ЛИТЕРАТУРА, FAQ итд. капсом или прочеркнутым сам выбери как красивее и название и авторов в начале. Писать обязательно год выхода книги, а не перевода и может ещё издание. и курсивом описание короткое и личными вплетениями. Устаревшие убрать. лафоре оставь он очень понятно поясняет и задания хорошие. лучше струструпа только в описании добавь что старая но основные принципы с++ не сильно поменялись или что-то в этом роде и ссылки на скачивание все сократить. Ещё анон гайд по крестам писал следующим следующим постом вброршу. И не хватает пункта типа ТОЛЬКО ЗАШЁЛ В ТРЕД? РАСТЕРЯЛСЯ ОТ МНОГОБУКОВОК? НЕ ЗНАЕШЬ С ЧЕГО НАЧАТЬ? и тут по пунктам поясняют что делать и что ожидает в будущем. это можно на основе FAQ сделать. Как у них. https://2ch.hk/fl/res/160480.html
>>576525 Я в следующем треде или через один буду обновлять шапку накопившимися у меня блогами, софтом и тем, что анон предложит. Как раз тогда попробую перепилить описания и структуру и использую твои советы. Спасибо.
В проекте используется Qt, но тамошний QSystemSemaphore не подходит -- выполнение просто блокируется, если ресурс уже занят. QSharedMemory уже ближе к делу, но при падении программы он не освобождает ресурс, так что тоже не подходит.
Есть ли в linux'е аналог виндового CreateMutex? Шуршу пока что маны pthread_mutex_*... Можно ли там создать такой mutex, который будет автоматически освобождён если прога упадёт с залоченным mutex'ом?
Ананы помогие разбоараться с файлоеблей. Есть бинарник с 64 битными числами, который надо прочитать кусками.
long long buffer = new long long[size of buffer] FILE * in = fopen(someshit.bin, "rb"); while(size = fread(buffer, sizeof(long long), sizeOfBuffer, in)){ show_buffer(buffer, size); }
При каждом запуске выдает разные магические числа, вместо значений в файле. ЧЯДНТ?
Ужасно. Ты или используй malloc/free, или пиши на C++. В первом случае тебе нужно пилить перекат для вот этого >>518562 (OP) треда, а не тут ошиваться.
>>576529 Я так и не понял, до чего вы тут все договорились, пока я спал, но предлагаю так: (вначале стишки)
1) Легаси <устарело> из шапки выкидываем. Саже-кутэ-петух не вернётся.
2) Ещё раз предлагаю сократить объём шапки в 10-20 раз: Можно создать четыре pastebin для абсолютных ньюфагов, ньюфагов, стремящихся и осваивающих глубокий уровень.
В конце памятка про лабы (теперь-то её будет видно).
>>576634 >pastebin Там нет разметки. Шапку нужна чтобы была на виду, а не по всяким гитхабаи пастебинам ходить. В прикреплённом треде тоже есть ссылки на литературу на оп-пике, но никто их не смотрит и не читает.
>>576792 Я повторю свою мысль: сейчас шапку никто не читает. Размер шапки сопоставим с 5% материала для базового освоения языка, на кой чёрт в вашу шапку вчитываться?
>>576822 Потому что ненужон нм ваш дейтла! Без него жили и ещё проживём. А шапка и так слишком большая. Мне лень её читать. Надо вообщее сделать её 3 строчки 2 книжки. А если хочешь детла, то на pastebin его заливай.
http://pastebin.com/pjJs5tLt Почему-то не удаляет нормально элементы из стека. Если три раза ввести pop, то он трижды выведет последний элемент. А может, дело в том, что он и добавляет их как-то неправильно.
>>576900 Пол шапки под спойлером? Это же пиздец как не удобно. Если что-то в шапке лишнее, то можно и убрать, а не в спойлер. Уже злить начинаешь. То на пастебин шапку ему надо, то под спойлер. Иди заведи свой крестотред с пастебинами и спойлерами.
>>577104 Затем, что я уже по которому разу подряд пишу, что:
Никто, никто не читает длинные пасты. Ньюфага не волнует твоя длинная паста. Ньюфага волнует "КАК СОЗДАТЬ МАССИВ". Поэтому должны быть отдельные компактные пасты для:
>>577111 >Ньюфага волнует "КАК СОЗДАТЬ МАССИВ". Пусть спрашивают в треде. В шапке должны быть ответы на самые часто задаваемые вопросы. Стоит учить кресты? Они не устарели? Что меня ждёт когда выучу? Зачем их вообще учат? С чего начать? А что потом? И как проверить уровень владения? На что рассчитывать после того как выучу? И конечно книги с описанием как тут уже предлагал. >>576525 Даже для примера тред из fl привел т.к. у них только вкатившемуся ньюфагу можно легко всё понять.
>>577123 Да почему? Кто хочет прочитает. В этом треде я ещё не заметил тех кто задал вопрос который есть в шапке. Но FAQ теперь какой-то неудобный. Надо что-то другое придумать.
>>577150 Только половина гуманитарных дисциплин у нас выкинули. Или даже больше. Оставили только айтишно-математические предметы, а гуманитарщину читают на отъебись: главное ходить на все занятия. Зато по математике спрашивают будь здоров.
>>577150 >>577151 >>577152 Спасибо, мужики, я спрашиваю потому, что захотел упарывать специальность. Есть время утром и вечером. Буду обмазываться параллельно крестами, че думаете? Не совсем безысходная идея?
>>577155 Все всех запоминают уже на первых занятиях, если это предметы по специальности. А если гуманитарщина, то там обычно сидят 2-3 потока, и преподам похуй. На перекличках никто друг за друга не овтечает, да и смысла нет: гуманитарные предметы все и так сдают, а на экзаменах, если ты не учился, то тебя выебут.
>>577159 Главное отдавай себе отчет, что специальность тяжелая и глубоко математическая КБ, про ИБ не знаю, и если тебе не нравится криптография, если ты не мечтаешь применить новые знания для написания собственного криптора ПЕ-файлов или чего-нибудь еще, то скорее всего будет очень тяжело и неприятно.
>>577216 Понятия не имею. Он какой-то нудный и там описано то что гуглят в первую очередь. Если уже и возникают такие вопросы, то либо это толстый тролль либо человек хочет гораздо более развёрнутый ответ. Ни для одних ни для других фак не нужен. Можно было вообще пословицами отвечать. Пользы столько же было бы.
>>577137 Нечего там глядеть. Работать ты будешь, перебирая бумажки, сертифицируя очередное говно. И особо не важно, что ты там будешь проходить. Не иди туда.
>>576830 >он и добавляет их как-то неправильно this У тебя head не указатель. При добавлении ты не перемещаешь указатель стека повыше, а просто копируешь *y в head
Я не понимаю, те люди, у которых в гитхабе CMakeLists.txt - они сами их пишут, что ли? Мой QtCreator генерит только qmake -> make, в других ИДЕ cmake по дефолту идет или как?
>>577302 Нет, но это модно и вроде как легко прикручивается везде. Суть в том, что ты типа клеишь проект сразу под CMake, а оно генерит проектные файлы для разных IDE, а не наоборот. Это менее удобно, чем создание проекта сразу в своей IDE, но лучше, чем потом ебаться при портировании. Алсо, подозреваю, что для многих IDE есть плагины обратной генерации CMakeList из проектных файлов.
>Замедление относительно C находится в районе 0-20%, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, что не используешь). Я не согласен. В сишке любят пердолиться с кастами void*, например, что по скорости хуже шаблонов. Правильный ответ - замедление относительно С находится в районе -20%-20%
>>577305 >для многих IDE есть плагины обратной генерации CMakeList из проектных файлов. Наверное, они и не сильно лаконичные, раз автогенерируемые. Что по поводу >леишь проект сразу под CMake как это сделать? В том же Qt. И чому модно? Потому что кроссплатформенно? Я раньше писал кривенькие мейкфайлы коротенькие, но в CMake куча всякого непонятного бреда, ручками наверное их никто не пишет.
>>577315 двачую этага ананимаса. плюсяшный компилятор может вывести получше сяшного. да и криворукость пишушего код тоже влияет. если везде пихать обычно херого заделанные контейнеры (ебал я эту вашу стратегию релокейта с захватом из фристора тупо в два раза большим количеством памяти), то конечно оно будет тормозить. а вот если нежно-бережно мувать в нужных местах вместо копирования, заделать нехерогую архитектуру, то плюсы -- эта вин тысячилетия. пойду спаточки. а то мамка ругается, завтра в школу
>>577315 > В сишке любят пердолиться с кастами void, например, что по скорости хуже шаблонов Сами по себе касты эти ничего не стоят. Они компилируются в ёбаное ничто, на машинном уровне указатели всех типов (в тч void) - это тупо машинные слова (целые числа). Конечно, если ты возьмёшь какой-нибудь gobject, там будет тормозная херня, но не из-за войдозвёзд, а потому что там блять теги с типом ко всем объектам присобачены, и диспатч по ним.
>>577319 Ну, проект это дерево тхтшников из CMakeLists, такие мэйкфайлы, только свой синтаксис. Еще есть официальный гуй, через который можно притащить исходники мышкой вместо прописывания, но пердолиться с параметрами все равно придется, если тебя не устраивают ванильные настройки сборки.
> И чому модно? Потому что кроссплатформенно? Я раньше писал кривенькие мейкфайлы коротенькие, но в CMake куча всякого непонятного бреда, ручками наверное их никто не пишет.
>>577319 Я пишу их ручками. Беру рыбу из прошлого проекта и редактирую. Это охуенно, что нет привязки к IDE (хочешь емаксом пердолься, хочешь линуксоиде, хочешь msvs), но при этом там нормальный язык, а не autotools.
Я совсем ньюфаг, начал читать липмана из шапки, но совсем нихуя не врубаюсь. Какое-то форсированное объяснение классов началось, указатели, ссылки, идентификаторы, читаю автоматически, понимание придет позже, или нужно осознавать и вникнуть? Мб что еще почитать, или я безнадежен совсем?!
>>577452 Я немножко на паскале до этого прогал. Совсем чуть-чуть, что-то типа хобби, которое советуют найти на двачах, чтобы не так уныло было жить. Основная моя работа связана не с программированием, но в целом мне нравится идея что-то прогать.
>>577256 Братишка, там опечатка? Найди с помощью ctrl+f. Наверно, сначала должно идти "Мнение сторонников C", без плюсов? Или если нет, стоит объединить эти два мнения в список из двух пунктов?
>Мнение сторонников C++
>Управление памятью в ручном режиме обеспечивает программам высокое быстродействие, не достижимое при автоматическом управлении памятью.
>Мнение сторонников C++
>Страуструп утверждает, что сборка мусора как таковая не является неотъемлемой характеристикой развитого языка программирования промышленного применения[70].
Аноны, как в Qt остановить поток? Допустим, у меня есть объект, который в одном из своих методов выполняет 1000000 итераций. Я нажимаю на кнопку в GUI и хочу остановить любую работу в приложении, включая упомянутый выше метод. Как мне это сделать?
>>577238 >Работать ты будешь, перебирая бумажки >будешь Рабу дяди припекло. После ИБ можно хоть фрилансить или разрабатывать игры, всем похуй, что ты там в вузе проходил. Важно, что ты умеешь.
>>578077 Самое очевидное решение, которое приходит на ум - использовать std::enable_if вместо alias definition. Но тогда код разрастётся в жуткое ояебу, читать которое будет главной пыткой для всех крестоёбов в аду.
Имеется список флагов параметров поиска (FindFlags). Нужно убрать из него уже добавленный в него флаг. Пробую так: m_flags&=(`QTextDocument::FindCaseSensitively);
Выдаётся ошибка c2018: (неизвестный символ 0x60). Дело в том, что компилятор принимает инверсию флага за попытку присвоить несуществующий флаг. Инверсия нужна для побитового исключения флага из списка.
>>578083 Разбей операцию по шагам и посмотри что именно происходит. Чему равна иверсия флага, и что именно получается после побитового И. В енуме, возможно, используется знаковый инт и в процессе какая-то хуйня происходит из-за этого.
>>577345 >>577341 Сладенькие, попрошу у вас шаблон / гуйчик для составления этих вещей, буду премного благодарен. Алсо, стоит ли обмазываться qbs, или это мертвое детище qmake?
Хм, CMake синтаксис ебанутый. Я так подозреваю, либы, которые его используют, предоставляют Find.cmake? Я не могу поверить, что мне придется разбираться в этом ебанутом говне. Впрочем, один проект я собрал только что.
http://pastebin.com/sHFcu5xb Вот почему компилятор бугуртит с того, что не бывает Warrior(int, const char[13]), хотя я создаю именно Wizard? Или компилятор для верняка прогоняет шаблон по всем веткам? Не понимат.
>>578173 Когда метод для Ts ... , равного <int, char *>, инстанцируется, все конструкции внутри него должны быть корректными. Компилятору похуй, что ты не будешь вызывать его с визардом, он видит, что ты сможешь вызвать такое, и недоволен. А разгадка одна - ты смешал динамический и параметрический полиморфизм в одном методе. Либо делай нешаблонный метод, в котором параметры конструирования передаются через эллипсис, и контроль будет отключен так деды делали, нирикамендую, либо убери нахуй свой енум и передавай тип юнита тоже шаблонным параметром. Это вообще очевидное решение, я не понимаю, нахуя ты решил смешать две концепции, если уж додумался до variadic templates.
Посоны, могу ли я читать winAPI Рихтера без каких-либо глубоких знаний ОСи? Вообще я собирался Таненбаума почитать, но не в первую очередь. Подскажите пожалуйста.
>>578460 С одним С++ ты будешь пердолиться с какими-нибудь высоконагруженными вебовыми йобами или вообще на Qt формошлепствовать, учи computer vision доволнительно или DSP, будешь боярином.
>>578550 Ты меня неправильно понял или может я тебя. Хотел узнать лишь, что смогу ли понять все аспекты работы с Windows API, не зная полного устройства ОСей?
>>578546 Ну у меня есть C++, Java(Android), Matlab, R, Mathematica. Но нет опыта работы и нормальной корочки. Вот не знаю куда податься. Хотя успешный batya продвигает меня к своим друзьям писать торговых роботов, хотелось бы ещё варианты посмотреть.
>>578459 >додумался Я о них только вчера узнал и использовать попытался, теперь для меня очевидно, что ?>убери нахуй свой енум и передавай тип юнита тоже шаблонным параметром
>>578705 А потом мы наблюдаем плач крудошлепов о неинтересной профессии и обслуживающем персонале. А смотрю на новости http://tass.ru/kosmos/2334635 и знаю, что там йоба с моим софтом стоит, и мне сердце радуется, что я пугаю пиндосов, которые платят мне двадцаточку на апворке. >>578684 Иди к бате и получай опыт, хули тут думать. Разработай им DSL какой-нибудь, который бы кодогенерировал в кресты.
>>578758 Какая разница? И для того, и для другого достаточно инструмента, содержащего примитивы типа "нарисовать линию по координатам", "нарисовать прямоугольник по координатам" и так далее. Сначала одно напишу, затем второе блеа.
>>578768 Похоже, то, что нужно. Последний штрих – идем во вкладку C++->препроцессор и в первой строке «определение препроцессора» в самом начале дописываем: SFML_DYNAMIC;
А где это? А то у меня Кодблокс, при этом ещё и на буржуйском. И при этом я не ебу даже, что такое препроцессор.
>>578788 Нашёл статью, где описывается, как это поставить. Решил, что проще поставить себе Вижуал Студио, как в статье. Однако один хуй я что-то сделал не так: "1>LINK : fatal error LNK1104: не удается открыть файл ''sfml-graphics-d.lib;sfml-window-d.lib;sfml-system-d.lib;sfml-audio-d.lib;''
>>574713 (OP) Ребзя, поясните раку за QT, в чем минусы? Судя по описанию, идеальная IDE с завезенной кроссплатформенностью. Начал учить C++, работая на ней.
>>578861 Ну, я убедился в этом, таки да. Окей, как тогда осуществить отрисовку виджета в другом потоке, или как дефолтыми методами отслеживать величину, которая меняется каждые 10 мс?
>>578877 Я не против, но нужно тогда опа найти, ибо я недостаточно силен в qt для такого. Ну или можно при помощи анона впилить параграф про него в эту шапку, как собирались.
И да, сишники, пересоздайте свой тред, будьте няшами. Как-то негоже давать ссылку на протухший в оппосте.
>>578821 moc - лишний этап сборки Свои контейнеры, которые индексируются к тому же по int вместо size_t Куча фич из c++11 и 14 не использована, тогда как с ними многие вещи можно было бы сделать четче и удобнее
Кароче нет явных минусов, просто немного своя специфика. Нет причин не использовать, если нужно склепать gui
>>579040 Ну я пытаюсь выработать у себя какой-то стиль, будучи новым ньюфагом. Меня не столько беспокоит трудность освоения крестов и даже не столько беспокоит говнокод (он неизбежен), а вот отсутствия стиля напрягает.
>>579064 Объекты, которые могут использовать плюшки Qt в виде сигналов и слотов не могут быть шаблонными(template<typename T> MyYobaObject). От этого никто особо не страдает -- нужность такого кунфу невелика, но всё равно это недостаток, закрывает дорогу к некоторым особо охуенным извра^Wизощрениям.
>>578994 >Куча фич из c++11 и 14 не использована, тогда как с ними многие вещи можно было бы сделать четче и удобнее Хм, например? range-based for работает с Qt-контейнерами. Новый синтаксис сигналов-слотов, который работает с указателями на функции, а не резолвит функцию по строке. Возможность подключить сигналы к лямбдам. Семантика перемещения, вроде, почти во всех Qt классах есть. Constexpr, override и т.п. тоже есть. Правда, по поводу потоков я ничего не знаю т.к. не использовал std-шные потоки в тесной связке с Qt.
>>579107 С потоками хитрая ситуация (например, гейство с сигналами-слотами между разными потоками да и вообще работа QObject'ов в нескольких потоках), поэтому предпочитаю использовать потоки, которые предоставлены фреймворком при работе с Qt, а в с++ std-шные. > умные указатели Там же куча указателей вроде QSharedPointer. QScopedPointer и т.п. >исключения Не особо много изменений было, хотя за этим я особо не следил - не люблю исключения.
Ньюфаг ИТТ. Учил плюсики до уровня "посчитай в консоли" по гайдам с ютуба/сайтов. Потом забил, а сейчас снова хочу попробовать. Вопрос: где можно выучить его до нормального уровня, чтоб делать не бесполезные программы? И отдельный вопрос про visual c++, нужен он или нет, и в каких ситуациях?
>>579128 На мой взгляд, с++ - это не тот язык, который стоит изучать как хобби: он сложен, разработка на нем сложна и долга и сфера применения достаточно специфична (например, высокопроизводительные приложения да и вообще где скорость работы критична). Но если решил изучать, то попробуй это: Prata S. / C++ Primer Plus, 6th Edition Sedgewick R. / Algorithms in C++, Third Edition Потом Мейерса с его Effective c++
>>579050 Это все говно. Книги по алгоритмам научат тебя алгоритмам и, возможно, языку (очень мало). Навыки разработки после такого адского дрочения у тебя не появятся. Ты просто проебешь время.
>>579136 Т.е. по-твоему они издаются исключительно для проеба времени? А как же применение каких-нибудь мат. навыков в собственном коде? Это же охуенно.
>>579040 А я юзаю только для непримитивных типов. Все равно с полной универсальностью обосрались же, даже Скотт признавал в интервью. По сути, {} в первую очередь нужно, чтобы () не распарсилось как объявление функции, а = для непримитивных типов и так никто не пишет.
>>579136 Это же конкретная математика Кнута, оттуда он языку ВООБЩЕ не научится. С другой стороны, в сфере применения с++ зачастую требуются знания алгоритмов и определенных областей математики. >>579139 Берешь какой-нибудь движок (тот же Unity или UE) и используешь его. В них, вроде, используются скриптовые языки и с# в Unity.
>>579051 >Учиться невозможно : не учеба, а постоянная ебля с зачетами. Поэтому с универа и ушел. >Отношаться невозможно : не романтика, а постоянная ебля мозга. Поэтому от тянки и ушел.
>>579142 Да. Как ты думаешь, зачем в математике доказательства теорем сохраняются в истории, а сложные и запутанные доказательства заменяются более простыми и ясными, когда такое доказательство придумывают или когда появляется более удобный язык типа теории групп для доказательства теоремы Лагранжа или теория категорий? Чтобы не проебывать время и заниматься актуальными задачами. Это типично программачерская шиза - проебывать время на хуету и велосипеды.
>>579148 >>Отношаться невозможно : не романтика, а постоянная ебля мозга. Поэтому от тянки и ушел. Да, все верно, тян должна решать твои эмоциональные проблемы и приносить удовольствие, а не создавать новые проблемы. ТНН, бич.
>>579155 Математики не получают зарплату за то, что могут повторить развитие дифференциального исчисления от Ньютона до групп Ли, не снимая свитер, и поэтому занимаются исследованиями, а не дрочением, как кодачеры.
>>579159 Так ведь и кодеры не получают за хуйню, даже за сайдпроекты не получают обычно. Есть нюансы с госконторами, которым похуй вообще, что ты написал за восьмичасовой день, или, например, написание велосипедов из-за ебли с лицензиями, но это не так уж часто встречается при годной организации.
Просто если будешь разрабатывать игру на плюсах, то (особенно если не знаешь язык уже и придется изучать с нуля) будешь сталкиваться не столько с разработкой игры, сколько со сложностями языка.
Есть какая-нибудь целая книжка или просто адекватная документация по winsock и как правильно(!) делать HTTP запросы. Лазил в гугле, половина найденных - вопросы как раз по этой теме и ответы-костыли.
>>579184 Ну понятно, что в один, вопрос в читаемости. Аргумент за: инициализация отличается от присваивания. Аргумент против: всё равно можно втопить только на той же строчке, что и указание типа.
>>579149 Я бы не стал отвергать столь фичастую кроссплатформенную gui библиотеку из-за невозможности шаблонами наследоваться от QObject. Как я и сказал, это мало чему мешает
>>579170 неуч winsock работает на уровне TCP/IP, а ты пытаешься на уровне http работать естественно, приходится крутить кучу ненужных вторичных костылей
#include <FL/Fl.h> #include <FL/Fl_Box.h> #include <FL/Fl_Window.h> int main () { FlWindow window (200, 200, "Window title") ; Fl_Box box(0,0,200,200,"Hey, I mean. Hello, World!"); window.show(); return Fl::run(); } Скопировал код из книжки Страуструпа. Выдаёт ошибку: error C2228: выражение слева от ".show" должно представлять класс, структуру или объединение. Что нет так? Это же класс, структура или объединение "FLWindow".
>>579026 Стараюсь везде, где только возможно юзать {}. Во-первых, видно, что это инициализация, а не присваивание. Да и оно как бэ лучше, чем int i( 3 ), проверкой на narrowing на этапе конпейляции. Позволяет обходить ошибку в конструкторах без аргументов, когда койпелятор решает, что это, внезапно, обяъвление функции. Да и выглядит имх красивше:
[code] using Coordinate = double; using Distance = double;
struct Point2D { A(Coordinate x = 0.0, Coordinate y = 0.0) : x{ x } , y{ y } , r{ std::sqrt(x x + y y) } {}
Coordinate x; Coordinate y; Distance r; };
int main(int argc, char argv) { Point2D point{ 3.4, 542.01 }; // goed Point2D point( 3.4, 542.01 ); // goed Point2D point(); // опастна, может подумать, что это объявление функции Point2D point; // надо заменить этим, или Point2D point{}; // goed }
[/code] Из минусов: initialization_list ломает всю лафу в перегрузках конструкторов. И с auto оно глючит. Тип выводится как initialization_list. auto a{ 3 }; // не int, а initialization_list. Хотя, последнее хотят пофиксить в c++17
Есть std::map<SceneID, std::unique_ptr<Scene>> m_scenes, где SceneID - енам кароч. Вопрос такого плана, нужен метод для удаления одной пары и очистки всего контейнера. Я верно понимаю, что мне достаточно m_scenes.erase(std::find(id)) и m_scenes.clear(m_scenes.begin(), m_scenes.end()) соответственно? Вопрос-то в чеем стоит, лол. Умные указатели догадаются самоуничтожиться в таком случае?
>>580147 Проебал код, вот так он выглядит. int c, d; int gcd (int a, int b) { if (b==0) return a; else return gcd (b, a%b); } int main () { //ifstream cin("input.txt") ; //ofstream cout("output.txt") ;
>>578994 >Свои контейнеры, которые индексируются к тому же по int вместо size_t
Оказывается, int таки лучше для этого, потому что меньше вероятность ошибки при сложении и вычитании индексов. Сами создатели признали это: https://youtu.be/Puio5dly9N8?t=3767
Всем доброго времени суток. Есть я, ньюфаг с огромным желанием стать быдлокодером. Что имею сейчас - ничего (начал на самом деле книгу по Objective-C, т.к у самого вся техника на апле, но там вначале C объясняется, а потом уже сам обж-си). Я нюфана, опыта программирования - ноль. Пока не выбрал направление (метаюсь между iOS разработкой и web backend и базами данных). Хочу получить дозу C++ чтобы натрахаться (как говорят в закреплённом здесь треде), понять работу ООП, научиться работать с памятью, писать на таком мощном языке и обязательно понаделать велосипеды (чтобы при переходе на джаву/скалу/обж-си или может даже пых) мой уровень знаний превышал уровня быдлокодера который прочитал "Философия Джава". Собственно с чего начать? Что уже знаю - типы данных из книги по Си, что такое функции, как их создавать и возвращать значения. Дошёл до темы "Указатели", но читать пока не начал.
>>580206 >ыдл Лучше учи джаву или обжС и начинай что-то писать. Плюсы тебе скорее помешают. Потом уже можно плюсы подтянуть, если захочешь. Как минимум для iOS разработчика знание плюсов дает небольшие профиты (в некоторых вакансиях это бонус) хотя конечно не особо нужны.
Привет, анон. Я тут хотел спросить. Насколько реально для меня устроиться погромистом на крестах в какую-нибудь контору, если я допустим понимаю ООП, знаком с паттернами, алгоритмами и структурами данных(только с деревьями трудности небольшие возникают), немного знаю Qt и когда-то был знаком c WinAPI и писал когда-то при помощи MFC? Вообще, что сейчас с вакансиями для крестокодеров?
>>580269 Берем список. Ставим один указатель на начало, другим ищем конец. Затем меняем местами. Далее, указатель, который был в начале продвигаем дальше по структуре и повторяем те же действия. Для оптимизации, чтобы не искать каждый раз конец списка, с учетом изменений, думаю на может понадобится сохранять указатель на предшествующий последнему, элемент. Я прошел собеседование?
>>580269 Просто и без задней мысли за один проход next каждого элемента приравниваю предыдущему. Ну со всякими оговорками типа next первого будет указывать на NULL, ещё понадобятся временные переменные для хранения предшествующего и следующего элементов.
>>580014 >codingame Ах да. Забыл что английский знать надо. Ну и где курс по алгоритмам чтобы с весёлыми задачками и кнопочкой нихуя не понял поясни искать?
>>580328 За один проход не выйдет же. Ты просто немного поменяешь расположение элементов. Пожалуй дополню, что придется идти по списку, как в сортировке вставками. Берем указатели на текущую позицию и на первую(или текущую - 1) и меняем местами предыдущий и следующий элемент. Ну конечно же с учетом всех нужных проверок.
>>580266 Реально. Первый год-два на легаси посидишь, "поразбираешься в чужом коде". Потом, если ты не совсем конченный дебил,уйдёшь из легаси в дизайн. А если в плюсах предложения по дизайну не будет, свободно перекатишься на решёточку или на жиденькуюjava.
>>580361 Вылазь уже из своего манямирка. Программизм в роисси и всём бывшем снг - это, либо быстрый способ отмыть нелегальные доходы, либо работа на западного (реже восточного) заказчика. Ибо в снг, где экономики и производственных мощьностей нет, программное обеспечение нахуй никому, кроме оборонки не сдалось. Обычно у закачика практически всё уже написано, надо лишь поддерживать. Это общий экскурс в ситуацию на рынке. Теперь, с точки зрения работадателя. Ты вот сам честно сможешь вьебать целый йоба-модуль на 10000 sloc (в команде конечно)? Опыта у тебя нет. Так какого хуя тебя сразу брать к макакам, которые кодят, а не фиксат.
>>580368 > Программизм в роисси и всём бывшем снг - это, либо быстрый способ отмыть нелегальные доходы Это когда просят написать ненужную хуйню, чтобы освоить бюджет?
>>580374 Ага. Но к крестам это слабо относится. В основном надрачивают однотипные апликухи для vk/android store за пряник. В то время, как баринзаказчик одной рукой мнёт титьку няши, а в другой держит бокал с винцом. И всё это где-нибудь (в это время года обычно) во вьетнаме.
>>580394 > менеджером пакетов становиться? Или тимлидом? Почитай Маркса, же. Тебе нужно стать эксплаутатором. Крадешь деньги - нанимаешь на них рабов - эксплуатируешь рабов - профит. А менеджер/тимлид это обычный домашний раб, конечно лучше чем полевой программистишка, но все также эксплуатируемый.
Как понять, является ли генерируемый конструктор перемещения достаточным? Часто вижу, что используют std::move() без явного объявления конструктора перемещения.
Короче прекращай хуйней страдать. У среднетян в голове на 3 миллиарда нейронов меньше чем у куна, а синапсов меньше на порядок. Если у тебя получится найти тян, мозги которой как минимум равны твоим по возможностям, ты охуешь от того как эффективно она их использует и сольешься. Они и с усохшими мозгами почти на людей похожи за счет заводского разгона а с нормальными превращаются в орудие моральной пытки просто по факту существования и развальцовывают мужиков как ерохины сосок.
>>580712 Ну да, хотя там основная идея именно в том, что конструктор перемещения обязан обнулить старый указатель. Если ты сам это делаешь, то можно и копировать, по производительности разницы нет.
>>580716 Ни пони. По производительности разницы нет в случае указателей или что? Иначе как-то сбивает с толку, ведь перемещать всегда выгоднее, чем копировать...
>>580206 > понять работу ООП Можно и на примере любого другого ОО-языка. В C++ оно даже не самое красивое. Попробуй Ruby или Python.
> научиться работать с памятью, писать на таком мощном языке и обязательно понаделать велосипеды Имхо, лучше учи С, а не С++. С++ слишком сложный, чтобы изучать его просто так. К тому же сейчас апологеты языка не жалуют С-style и низкоуровневые возможности (такие как ручное управление памятью). В результате на любом крестовом форуме на тебя будут смотреть как на дурачка и советовать использовать стандартные коллекции и алгоритмы, шаблоны и constexpr вместо макросов и т.д. (и будут правы). С же очень простой язык, в котором есть все низкоуровневые ништяки, которые тебе хочется освоить. И по сравнению с С++ у тебя не будет соблазна использовать, например, std::string вместо string.h, что хорошо. Не будет и трудных для понимания ошибок компиляции, что для новичка очень хорошо. Не будет ступора от того, что язык огромен и не понятно, что учить дальше. K&R можно прочитать за пару дней (и ты обязательно это сделай). Изучи указатели, память, реализуй деревья поиска на структурах, поиграйся с указателями на функции и макросами. Потом переходи к ObjC, если не передумаешь.
>>580719 ООП в динамических языках и статических отличается принципиально. В динамических им даже можно пользоваться, потому что основной недостаток ООП - интерфейсы, не нужны из-за duck typing'а.
>>580718 Перемещать выгодно, когда происходит глубокое копирование гугли deep copy. В случае одного указателя будет просто скопирован адрес, как в случае копирования, так и в случае перемещения.
А вот и платина подъехала! Добил Лафоре, чувствую мотивацию и готовность ебашить. Ящитаю что мне нужно больше практики, что мне сейчас делать? Ради доп знаний ковыряю код чита для кс го на крестах и не могу понять как он инжектится в процесс каэсочки, разве так можно? алсо по-возможности ответьте развернуто, анончики, в кресты я намерен заехать основательно.
>>580743 >Ради доп знаний ковыряю код чита для кс го на крестах и не могу понять как он инжектится в процесс каэсочки, разве так можно? Тебе определенно необходимы знания о том, как работает ПО. Почитай что-нибудь по системщине, тогда к тебе придет понимание. И да. Больше практики. Ковырять читы, тебе видимо рано. Поэтому просто пиши разную мелочь на пару сотен строк кода.
>>580850 Читать stackoverflow. Design patterns наверни, если ещё не в курсе, просто чтобы понимать, как и почему устроены библиотеки и прочий код, который будешь подглядывать тут и там.
Если хочется большое толстое приложение, напиши мне менеджер задач (органайзер). Добавляешь в него задачи, можешь настраивать повторение по дням недели, дням месяца, N дней и прочие варианты повторения. Чтобы красивый гуй на Qt (или gtkmm :3 ), разные варианты показа (глобальный календарь + просто список, отсортированный от ближайших к дальнейшим. И чтобы можно было указать, сколько занимает задача и потом подсвечивать в календаре, сколько процентов от 16 часов (время бодрствования) занимает задача.
Движение авто на перекресткебыддло15/11/15 Вск 18:00:34#477№580971
Шалом ребя, нужно запилить движени авто по перекрестку, чтобы дтп и прочей еботни не было, тачки могут превышать и творить разную хуету. С чего начать? киньте плз книжку там какую нить, статейку там, и проч полезную хуету, ок?
>>580971 Да без базара, бро. Сейчас накидаю тебе всей литературы и всех статей по cv и ml, которой хватит минимум на написание отличной магистерской или средней кандидатской. Хуёв сосни, если ты задаёшь подобные вопросы, то ты нихуя не готов к разработке проекта такого уровня.
http://pastebin.com/itWhqZrj По задумке, программка должна двигать квадрат по окну и менять его цвет. Однако квадрат оставляет след, который, что самое удивительное движется. Что я делаю не так?
>>581428 Не знаю как это делается в крестах, но нужно блокировать вывод и удалеть текучий квадрат. потом рисовать новый на новых координатах и обновлять поле вывода.
>>581436 Что значит "блокировать вывод"? И правильно ли я понял, что он не просто рисует на матрице экрана квадрат, а запоминает его и рисует его каждый раз?
>>581437 >Что значит "блокировать вывод"? Не знаю как пояснить, но суть в том что после блокировки вывода, экран не будет меняться что бы ты туда не рисовал, пока не выполнишь команду обновить. Хз как в крестах это делать, redraw функция должна называться или как-то так. >И правильно ли я понял, что он не просто рисует на матрице экрана квадрат, а запоминает его и рисует его каждый раз? Да. Удаляй квадрат и рисуй заново. А чтобы не было морганий блокируй у обновляй экран.
>>581437 У OpenGL есть 2 кадра, один, в котором ты рисуешь, а второй - который отображаются. С помощью glutSwapBuffers ты их меняешь местами. А тебе надо действительно перед отрисовкой чистить экран с помощью glClear, установив нужный цвет с помощью glClearColor.
>>581440 Я понял, в Паскале АБЦ "lockdrawing" и "redraw". Но тут вроде первое подразумевается "double" в строчке, где определяем параметры окна. А вместо редроу "glutSwapBuffers". >>581441 Это всё объясняет. Но почему они меняются местами? Не проще ли сделать один, на котором рисуем. И второй, на который перерисовывается содержимое первого при какой-то команде? А если SINGLE выбрать, то так и будет, а вместо redraw() flush?
>>581446 Потому что при перерисовке видюха просто меняет 2 указателя местами, а не копирует мегабайты пикселей. Эти буферы в видеопамяти находятся, если что.
>>581461 У тебя никогда не будет на экране кровь-кишки из-за того, что видюха отрисовала кадр в середине того, как он был готов. Кадр рисуется только уже готовым.
>>581469 Но у меня же opengl. Вот пример программы с single: http://pastebin.com/buZYyXpG Нажимаешь m - он начинает, либо перестаёт перерисовать изображение при нажатии клавиши. Правда у меня почему-то через раз работает клавиатура в программах (зато мышка всегда).
Простите за, возможно, глупый вопрос - я вылез из-под камня. Почему часто критикуют boost и Qt? Я понимаю, что это огромные фреймворки, большую часть которых не особо хочется тянуть из-за громоздкости, но ведь они предоставляют столько готовых решений для стольких проблем. Да и на работе часто только с ними и работают на крестах. Поясните, пожалуйста, я что-то не то учу и просрал приличное количество времени на юзлесс говно? Что тогда нужно на С++ ынтырпрайз-разработчика? Спасибо.
>>581477 Boost - годнота, ибо все есть и делать ничего не надо, позволяет юзать плюшки в продакшине на каком-нибудь 6м центосе, например. Qt - кросплатформенные гуйцы, тоже годнота.
Я ввел и слушал, как в слезах сквозь сон
Жена и дети жадно просят хлеба.
Влачить существованье обречен,
Кто лямку крестоебства не отринул
И был Его печатью заклеймен.
Ныряя в говнолегаси рутину,
Я жду, что мне хозяин бросит кость.
И, зная нищеты своей причину,
Таю на сытых джаваблядков злость.
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20%, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, что не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования 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/n4527.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)
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Ссылки:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - 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++/
Видео с CppCon (на ангельском) - http://www.youtube.com/user/CppCon/videos/
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq/
Куда писать код:
Под шиндошс удобно использовать 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) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net/
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com/
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org
Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com
Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
И многое другое - http://en.cppreference.com/w/cpp/links/libs
Памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий: