Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать? Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли? A:
Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешниесервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++? A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполневозможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Этифичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать? A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы)
Название
Год
Ссылка
Бьерн Страуструп
Программирование. Принципы и практика использования C++
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Q: Я готов начать погроммировать! Куда мне писать код? A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/, "sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использоватьтекстовыйредактор в связке с каким-нибудькомпилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A:
Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы? Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
посоветуйте годную ide для c/c++ под окна, а то visual studio ставит столько говна, что при переходе на новую версию приходится форматировать диск и ставить заново ос, что сильно заебывает
Но вообще да, она не дает выбрать, на какой диск ее ставить, например. Поэтому становится не очень комфортно, когда нужно поставить с Clang'ом и Android NDK в сумме овер 10 гигабайт на пекарню с SSD.
>>726682 я не о том, что ставится столько ненужных sdk, я о том, что даже если ставить только C++ без всякого говна, то все равно при удалении останется столько говна вроде фреймворков, sql, и.т.д даже если я их не ставил, поэтому ищу годную иде без мусора
ОП не листва! Как он смел создавать треды? Нелиства, вкусившая женского тепла, не имеет права называться плюсовиком в частности и программистом в целом. Все треды нелегитимны.
Should that evening inspiration gun It was regurgitate krestoblyadsky verse, But it scared away the timid musical friend, My rhymes suddenly having visited the temple.
Oh woe is me! Desire enveloped, Post a battle can not feminine warmth, Hoping that have time to re-rolling, He left to rust in the corner of a lyre.
We indulge in caresses before dawn, And I'm in the open arms of the young fast asleep, When I burst into the twilight office Lord of spirits, my father Baal.
Tossing a curse for curse, With silk satin, he pulled me, And he cried, splashing saliva Dress: "WHY ARE YOU LIED THAT thread rolling stone? !!"
From the eerie cries sleepy stupor, Fleeing father's blows, Pulverize and naked, his hand covering her nakedness, I jumped out the window and was gone.
Bratishki! Please! Have mercy! for hundreds of caps write poems, And no - I have all the trade obossyte, But do not complain Bata continue, please ...
>>726792 >>726978 "Если в стихотворении Твардовского сказано: „Я убит подо Ржевом“, — едва ли стоит предполагать, что я и поэт Александр Трифонович Твардовский — одно лицо. Часто соотношение между автором и субъектом не столь очевидно. Так, известно, что ранние стихи Анны Ахматовой, в которых героиня жалуется на жестокое обращение мужа, подпортили репутацию ее настоящему мужу — поэту Николаю Гумилеву".
Посоны, а есть возможность как-нибудь заставить C4Droid работать с мэйкфайлами? Очень хотет иметь возможность собирать проекты под андроидом, но голым gcc из C4Droid это только с хэллоувордами реально.
>>727186 Вообще, ostream плох тем, что он очень многословен. Сама по себе идея плейсхолдеров в строке для параметров очень классная и было бы охуенно, если бы была нативная поддержка такого средства в языке. Но пока этого нет. По сути, статический анализ в этом плане делает то же, что делал бы компилятор. Но это не отменяет того, что лучше бы это было реализовано в языке.
>>727037 AIDE, terminal IDE - у них внутре встроенные gcc и javac, есть возможность собирать apk. Только terminal IDE давно не обновлялся, но его исходники доступны, конпелятор там обновить несложно (выдрать из того же AIDE, например).
Знаю что вопрос крайне тупой, но спрошу. Я пересел на линукс 1 раз, сделал простенький файл, допустим, test.cpp и тут встал вопрос, а какое расширение делать у скомпилированного файла?
Програмач! Помогите понять суть методов аллокатора! Задание состоит в написании аллокатора (stl) который аллоцирует в фиксированный блок памяти. Препод сказал можно блок взять как статический вектор.
Вот я не пойму, что должен делать deallocate. Он не должен деструктить объекты, но должен освобождать память. Должны ли до этого эти объекты деструктированы? Если да, то я просто удаляю потом объекты из вектора? Если нет, то я должен эту память как-то разметить как свободную, но я хз как это сделать кроме как написать в них nullptr. Но тогда к ним доступа уже не будет.
А vim+YMC настраивал кто-нибудь? Есть короткий и гарантированно работающий для с++14/stl .ycm_conf.py? В основном плагин для крестов, а настраивается для этого языка сложнее всего.
>>727716 > Должны ли до этого эти объекты деструктированы Конечно, если ты усвобождаешь память то должны быть вызваны деструкторы объектов которые в ней находятся, если такие есть. > эту память как-то разметить как свободную Ты должен разметить как свободную и таким образом чтобы ее можно было потом использовать для создания других объектов. Можешь почитать александреску, там в самом начале третья или четвертая глава, он пишет аллокатор. Тебе такую хуйню как у него городить не нужно, так как я понимаю у тебя особых требований к аллокатору нет (он пишет эффективный аллокатор для небольших объектов), но общие идеи у александреску почерпнуть можно, конкретно в той главе, тему пердолинга с шаблонами не стоит вскрывать.
>>727765 Спасибо. Ща попробую почитать. Но суть в том что если я эту память освобожу, я даже хз как сделать так, чтобы у меня именно туда можно было записывать потом. Это видимо надо в allocate сделать какой то поиск( но я до сих пор хз как ее тогда обозначить, что она свободная), либо тупо в конец вставлять, но тогда будет фрагментация.
>>727856 Емнип, time_t не предоставляет легальных итераторов, так что нет, наверное. Фактически lower_bound будет работать с любой парой ForwardIterator, между которыми находится отсортированный диапазон, так что можешь написать свой костылик без особых проблем.
>>727909 Примерно за год с уровня среднестатистического CS-студента, сдавшего первый курс, до джуна на должность, не связанную с жестким rocket science. Но вообще все очень зависит от твоего энтузиазма, наличия свободного времени, условий конкретной вакансии etc.
Нужно добавить в шапку информацию о NuGet, господа фанаты студии. Эта ебала, оказывается, позволяет в джва клика подключить практически любую известную либу, я аж кончил.
>>727971 Так у каждой конторы свои же требования, всем хуй угодишь. Там MFC надо, а там на 03 стандарте писать; тут на бусте хуярить - а тут POSIX знай. И чсх такой разброс по требованиям именно у крестов наблюдаю. Или же не обязательно чтобы все 100% совпадало с требованиями? Все-таки, освоить быстро можно что требуется.
>>727980 Чисто для крестового джуна я не видел универсального списка, правильно анон грит, все очень индивидуально. А вообще - https://www.google.com/about/careers/students/guide-to-technical-development.html . Соответственно, если у тебя говноконтора в мухосрани делай поправку в сторону уменьшения, но не надейся, что будет прямо в разы лайтовей. >>727984 Ну смари, всем похуй на самом деле, что ты знаешь, важно, чтобы ты обязанности выполнять начал как можно скорее. Если сумеешь понравиться и убедить, что вот прям через месяц все будешь знать, то почему бы и нет, в любом случае никто не вкатывается в первые же дни.
>>727986 упражнение из кинги Бьерна.Код для поиска повторяющихся слов и написания предложения The cat cat jump.Как работает код с одним словом я понял,но порвался на написании предложении.правильно ли мое утверждение ,что в случае с The cat cat jump тип string прогоняет каждое слово после пробела по очереди?
>>727992 А вообще, как оно, блядь? Берут джуна, и сразу же ему говорят - вот это чтобы через неделю было нахуй А как же изучить ту кодобазу, которая есть, дать время на "акклиматизацию", так сказать?
>>727993 вот string это киллеробвес массива char. пробел от другого символа в нем ничем не отличается. можешь код в ideone залить я поскролю т.к. пока ты сказал что парсинг стринг идет, а как и что не видя код я не могу сказать
>>727997 >А как же изучить ту кодобазу, которая есть, дать время на "акклиматизацию", так сказать А как ты собираешься ее изучать, распечатать и читать что ли? >Алсо, даже на джуновакансии требуют опыт коммерческой разработки, это как вообще понимать? Это значит, что хотят мидла на деньги джуна.
>>727997 В олдовых конторах обычно приставляют джуна к злому и опытному дядьке, который такому повороту не очень рад. Дальше примерно как в армии - зависит от дядьки и уровня тупости джуна. Будешь бегать за пивом, выполнять грязную работу типа написания тестов или гуя, дядька будет смотреть твой код и говорить, почему он говно, и как надо было сделать. Постепенно градус нарастает, тебе начинают давать несложные независимые задачи, и ты вкатываешься.
В более современных местах, как правило, ты просто включаешься в команду из 3-7 человек, которые работают над какой-то фичей. На первом же МИТИНГЕ вы обсуждаете, какую задачу было бы лучше всего тебе поручить для начала, чего ты умеешь делать, ну и все такое. Дядьку тоже могут назначить, но скорее в форме обращения к нему, если что-то непонятно.
>>728018 >>728018 ага.понял.так а какая логика действий этого кода в случае с предложением The cat cat jump?каком месте кода первое слово cat уже присваивает имя previous ,а второе слово cat еще current?
>>728031 то есть cin при написании первого слова cat и нажатии пробела пускает его вниз по коду,оно становится previous пока мы отжимали пробел и писали второй cat,который после нажатия пробела становится curent -идет по коду и сталкивается с совпадением первого слова cat?
Липпман или Страпструп? Начал второго, как-то сложновато идет, хотя это я отбитый немного, 3 главу потихоньку пытаюсь пропихнуть в себя. Попробовал Липпмана - там вообще всё навыворот, ебать, я вообще не понимаю код, что это такое? Там вообще все по-другому!
>>728214 У него код по-другому написан вообще, у меня когнитивный диссонанс случился с этого. Еще и хедер другой. Вот эти его std::cout вместо просто cout это издержки хедера?
>>728225 Но я не добавляю, кстати. Можешь объяснить че почем? У Страупструпа просто #include "std_lib_facilities.h" и сразу int main() идет. Я видел, как используют using после инклюда, когда гуглил проблему с PCH, но так и не понял, к чему это, а мои поделки работают и без него.
Помогите, пожалуйста, с этими двумя. Никак не въеду, как определить одновременно с тремя числами, что из них больше, а что еще больше. Остальные хорошо пошли, а над 6 уже реально часа полтора сижу. Я пробовал описать все возможные ситуации, но столкнулся с тем, что допустим могу определить, что из них наименьшее, а что идет следом - никак.
>>728256 Я не уверен, что я должен всё это знать на третьей главе, по крайней мере про массивы точно еще не писали. >>728262 Я тоже так думаю, только конкретное решение никак не выдам. Пойду спать, что ли, вдруг лучше станет.
>>728263 Есть а, б и с. Если а > б, меняешь их значения местами. Если б > с, меняешь их значения местами. Если новое значение б < нового значения а, меняешь их местами.
>>728227 Глобальный using в хэдере потенциально может повлиять на код других частей программы. Например, если у тебя в одном хэдере using std::vector, а в другом using folly::vector, то при подключении второго хэдера в одном cpp-файле с первым, его директива перекроет первую, получишь трудноуловимые баги. Поэтому в хэдере надо либо явно все квалифицировать через ::, либо писать локальный using внутри класса/функции.
Поцаны-пацанчики, хочу прокачать скилы по плюсам, с упором на знание особенностей языка и STL, что-бы когда я освобожусь, ниодин синьор меня не смогу завалить. С большего все задачки у Страуструпа поделал, где еще можно всякого найти.
>>728323 >Что за табуляция? \t или кнопка tab на скрине она сть а в ideone не принёс.. ____________________________________________________________ а теперь наводящий вопрос.. что там делает >return 0; значение знаешь?
>значение знаешь? Завершение работы функции и возврат нулевого значения. Суть не в том что ретурн залез в цикл (я его убрал оттуда бтв), а в поведении вектора. Я его неправильно обьявляю, чтоли? Ошибка, кстати, пропала почему-то.
@ ПРИХОДИШЬ НА 2Ч, ВКАТЫВАЕШЬСЯ В /pr @ НА /pr ХУЕСОСЯТ МОЛ /dev/videoХ ДЛЯ ДАУНОВ @ КАЕШЬСЯ @ ВЫЛАЗИИТ ЭТОТ ВОТ! >>728323 И БЛЯ! ОН ПРОСТО ВЫБЯДНУЛСЯ И БЛЯ! И СЬЕБЁТ! @ ПИШЕТ ДЕЙСТВИЕ А ПОТОМ ТО-ЖЕ ДЕЙСТВИЕ ПИХАЕТ В ЦИКЛ БЛЯ! @ НАХЕР ОН РАБОТАЕТ СО СТРОКОЙ В ВЕКТОРЕ! @ ВОТ НАХЕР ТАК ЖИТЬ?
скажи просто что ты хочешь.. от векторов. а то бляди пиклерейтед это просто пиздец, зачем тебе размер указателя?
>>728337 >скажи просто что ты хочешь от векторов Должны принимать кусок строки из buf, который находится в token1.
>ПИШЕТ ДЕЙСТВИЕ А ПОТОМ ТО-ЖЕ ДЕЙСТВИЕ ПИХАЕТ В ЦИКЛ БЛЯ! Надо сделать по-другому? Так сразу и сказал бы. Чего придираться-то к библиотекам и выделением циклов из одной строчки фигурными скобками, если не в них дело.
>НАХЕР ОН РАБОТАЕТ СО СТРОКОЙ В ВЕКТОРЕ! Потому что по условию в программе надо использовать вектор, а я не ебу куда его еще можно впихнуть в моей реализации.
>>728353 Потому что в примере на мсдн так указано жи. Другой вариант: По историческим причинам (см. время создания Си) у неё там внутри статическая переменная с локальной областью видимости используется для хранения промежуточной позиции в строке (именно поэтому передаётся NULL в качестве индикатора, что продолжать надо с прошлого места)(с)
Посоны, подскажите, как сделали такую защиту: стоит чит-программе появиться в панели задач или взять на себя фокус, она закрывается. Даже Hide Toolz, полностью скрывающий процесс, не помогает. При этом если программа скрыта и находится в трее, она не закрывается.
>>728473 1. Вход в front () 2. Вызов конструктора ScopedLock 2.1 Захват mutex_ внутри конструктора 2.2 Возврат в front () 3. Копирование *next в регистр/стек, где должно находиться возвращаемое значение 4. Вызов деструктора ScopedLock 4.1 Освобождение mutex_ в деструкторе 4.2 Возврат в front () 5. RET в объемлющую функцию
Как в C++ правильно копировать информацию по адресу, возвращенному MapViewOfFile, в структуру? Memcpy не очень хорошая, потому что не позволяет отслеживать ошибку, когда данных для копирования было меньше, чем размер структуры.
В Qt Creator все нормально с отладкой? Например, прервавшись подвожу курсор к переменной, он показывал значение. Когда-то давно. Потом перестал. Либо ничего не показывал, либо какие-то адреса вместо стоки в QString. Подумал, что что-то поломалось, всякое бывает. Но сейчас поставил чистенькие Win10, VS2015, CDB x64 из Windows 10 SDK - пикрелейтед курсор не заскринился, но он там. Даже в Watch не добавляет в этом конкретном случае, а 1 раз добавил строку.
>>728577 Зачем спрашиваешь если сам видишь что и как там? У них в последнее время вообще какие-то сплошные проблемы возникают – то регрессия в парсинге кода, то это, то ещё что.
>>728582 Ну может я что-то не то сделал/поставил. Возможно, раньше я юзал MinGW, а с VS он никогда так не умел. Уже не помню, давно это у меня в первый раз поломалось еще на семерке, а потом я забросил Qt. Удивительно, что до сих пор не починили. А кроме VS, как я понимаю, ничего не смогу использовать, т.к. мне нужен WebEngine. Еще в watch он добавил через какое-то время, но нельзя регулировать ширину столбцов, так что не понятно какую переменную наблюдаешь.
>>728590 > нельзя регулировать ширину столбцов Разобрался, мож кому пригодится. На первый взгляд нижние верхние столбцы не связаны, но если порегулировать ширину верхних, то нижние с ними синхронизируются, на какое-то время.
>>728652 Почему нет? Это UB, оно может и правильно работать, просто никто не гарантирует. Если у тебя CLI то там естественно менеджер памяти сам знает сколько нужно правильно удалить.
Я правильно понимаю, что atoi преобразует string в int, складывая числовое значение каждого символа? Если да, то как этим пользоваться, а если нет, то что мне нужно?
кто нибудь здесь шарит за то, как сортировать TableView в qml, если модель на с++ ? с помощью QSortFilterProxyModel получилось только отфильтровать вывод в TableView.
>>728681 >>728685 Спасибо. Попробовал a = atoi(str1.c_str()), но у меня все распидорасило. Суть в том, что вводятся три string'а, нужно выразить их в числовом значении, переставить местами по возрастанию и вернуть в исходное состояние. Ну, по крайней мере это у меня такой подход к 7 задаче отсюда >>728254, потому что напрямую со стрингами работать не хочет.
>>728652 Чтобы ответить на этот вопрос стоит знать, почему вообще появилась форма "delete [] pointer". Ведь раньше использовали только malloc и free и менеджер памяти определяет границы выделенного блока по начальному адресу.
В C++ так сделать нельзя, потому что помимо обычного освобождения памяти, нужно также вызвать деструкторы всех объектов. И проблема в том, что не всегда можно на этапе компиляции сказать сколько объектов в этом массиве. Например объект массива может быть приведен к объекту обычного указателя. Или, например, операндом delete-expression может выступать указатель на базовый класс объекта из массива. В первом случае можно было бы выкрутиться, спросив размер блока у менеджера памяти, во втором случае можно было бы сохранять в менеджере памяти еще и размер истинного объекта(или их кол-во). Но тогда нужно было бы писать кастомный менеджер памяти и терялась бы совместимость с C. В итоге решили, мол нахуй нужно лучше через 20 лет запилим std::array и на том и порешали.
>>728703 И поэтому new [] генерит не просто массив объектов, а массив с -1 элементом, в котором хранится его размер. А затем delete[] лезет в этот -1 элемент и вызывает деструкторы.
Кстати, угадаете, что будет, если вызвать delete [] на указателе на базовый класс?
>>728705 Не, не, это не то. Вон там задача же >>728254. Мне нужно перевести string в int, поменять их местами по возрастанию, после чего вернуть из int обратно в string и вывести.
>>728721 По идее vld же отдельно делает проброс new и new []. Откуда ему знать, что там по факту компилятор сгенерил? Он должен увидеть несоответствие своих оберток new [] и скалярного delete и вскукарекнуть. Надо разобраться с этой ситуацией, в общем, а то будет потом, скажем, gcc другой код генерить, и пиздарики всем надеждам на отсутствие утечек.
>>728730 Можно сравнивать, но имея три элемента, нужно еще и переставлять их местами. Я по аналогии с шестой задачей пытаюсь сделать. >>728725 Да 6 я уже сделал, лол. Спасибо, кстати, >>728266
>>728724 Я, возможно, туплю сегодня вечером, но не понимаю проблемы. Что поменялось, и как это повлияло на vld? Размещающие операции там и раньше были, не?
>>728713 Не придумывай велосипед. Там в тексте главы есть пример, где наглядно видно, что строки точно так же сравниваются в лексикографическом порядке, как числа, то есть там, где я тебе писал а > b, b > c, a > b эти самые a, b и c меняются с целых чисел на строки и всё. Просто в решении той задачи поменяй int на string и всё.
>>728736 > Я по аналогии с шестой задачей пытаюсь сделать Так там абсолютно все тоже самое, тебе только тип в объявлении переменных нужно сменить с int на std::string и все. Если ты все правильно написал в 6 задании то ничего больше вообще менять не надо. Божественная перегрузка функций и операторов все сделает за тебя.
>>728740 >Что поменялось Цвет и возможность удалить new[] обычным delete. >и как это повлияло на vld теперь я не могу в debug найти где у меня утечка. Студия выбрасывает исключение и стопает работу vld. >Размещающие операции там и раньше были, не? хз. Но насильно их использовать до второго обновления никто не заставлял.
>>728754 Блядь, сука, ебануться, пиздец, блядь, нахуй, ебать. Ты, блядь не мог просто ввести ещё одну переменную "хуй" и делать так: хуй = а, а = б, б = хуй? Что это за пиздец? Ну молодца, додумался до такого, я бы в жизни такое не придумал, ебануться просто нахуй, блядь, я животное от тебя, пиздец, блядь, нахуй.
>>728764 Да, точно, немного остыл, теперь вижу, что это банально и я сам как-то так сделал для эксперимента. Только с целыми его вариант не сработает, кстати.
>>728764 Вообще такое с xor делают, с суммой и разностью переполнение, а с делением вообще хуйня должна получатся на большинстве входных данных из-за целочисельного деления.
>>728935 А в чем профит, кстати? Из того, что я выяснил, выходит, что это одна итерация Ньютона. Кармак велосипед изобрел штоле, или там есть какие-то другие идеи?
>>728950 > А в чем профит, кстати В скорости. В то время не было ещё йоба-шейдеров как сейчас. Приходилось считать на ЦПУ. > Кармак велосипед изобрел штоле Алгоритм был придумал ещё до него, но он видимо тоже смог реализовать его.
>>729074 Игры пишут на движках, которые, в свою очередь, могут быть написаны на крестах, но писать движок с нуля - это значить в 90% случаев движком и ограничиться.
Всем привет. Необходима ваша помощь. Не знаю, где найти алгоритмы rand и srand. То есть принцип из работы, формулы, по которым они находят число. Как добыть такую информацию?
В плюсах все немного сложнее, так как с 11 версии добавили <random> с кучей разных генераторов и rand() должен их использовать. Лень рыться в плюсовом коде - можешь сам посмотреть в gcc если нужна именно плюсовая реализация.
>>729354 Банально потому что: а) что в ААА проектах это дешевле, а так же нужна длительная поддержка, запил и выпил фич и багов по любому пуку; б) в то время как вышел первый сталкер нормальных альтернатив и не было.
>>729354 А теперь найди первые релизные билды (особенно чистого неба) и поиграй в них. Кол-во багов что по тем, что по текущим временам там было неебическое.
>>729354 В AAA практически под каждую игру движок перерабатывается так сильно, что от старого ничего не остается, часто с нуля и пишут. Тем более, что писать логику/рендер сразу под конкретную игру гораздо проще, чем универсальный "движок", и для команды профи за полгода написать базу игры с нуля - задача не слишком сложная. А вот внеигровой код: редакторы, скрипты, утилиты всякие - это бывает не меняется годами.
Натолкните на мысль, как это решить? С обычными, прямыми линиями, разделяющими четверти, я понимаю как вычислить, а вот, если координатная плоскость повёрнута на 45*, то что делать?
>>729475 > Или поверни систему координат и решай также как знаешь уже. В том-то и дело, что надо именно так. Если поверну, то это уже другая задача будет.
>>728733 Для олимпиадок тебе нужно знать только основные моменты, стандартный ввод/вывод, вектор/массив, циклы, условия. ООП там особо не нужен. Основные задачи, это типа "есть массив строк, преобразуй их так, чтобы вывести другой массив строк". Еще сортировки из stl пригодятся. Кури там где собираешься участвовать, кресты быстрее всех если рассматривать скорость программы и скорость написания этой быстрой программы. http://acm.timus.ru/help.aspx?topic=cpp http://codeforces.com/blog/entry/7614 Ввод вывод можно потестить на этом примере: http://pastebin.com/DpmjHF7C
Котишки, порекомендуйте книгу по концепции ооп без привязки к языку. То есть как должно было быть. И по базам данных подобную, если не сложно. Спасибо.
Из соседнего треда пришел. Нужно таки набить чем-то резюме, чтобы можно было сказать, что я работал с бд вот здеся, с Qt вот здеся, а вот тут еще и апи какой-то хуйни прикрутил. Если написать какой-то очередной note editor с маркдовном и синхронизацией с гуглдрайвом/дропбоксом (все из перечисленного как раз) - на меня же посмотрят как на ебанутого? Мол, нахуя ты велосипед написал ? Уже есть Evernote гыгы
>>729545 Двачую. Тоже не мог понять ООП и пилил всё в одном файле. Мне посоветовали покодить на джаве. Написал простенькую игру на libgdx и разобрался.
>>729549 Что там непонятного то? Там же весьма простая и естественная структура, но везде требуют понимания ООП, как будто это что-то невероятно сложное, отсюда у меня возникает подозрение что я чего-то не понимаю.
Нужно сгенерировать последовательность случайных неповторяющихся чисел. Как это сделать оптимальнее, чем каждый раз проверять все уже имеющиеся элементы на совпадение, генерировать новое число в случае совпадения, проверять его снова и т. д.?
>>729647 Заполняешь массив возрастающими числами, возрастание для каждого следующего числа случайное, потом массив перемешиваешь (меняешь местами случайные пары элементов достаточное число раз). Так понятнее?
>>729649 > возрастание для каждого следующего числа случайное Таким образом тяжело получить равномерное респределение, если не на кольце делать. А если на кольце - то проебывается неповторимость чисел. >>729622 Наверное оптимальный вариант, если нужный массив значительно меньше от общего количества чисел. Если нужное количество в 2 - 3 раза меньше то лучше наверное просто сделать массив из всех чисел, перемешать его и отобрать нужное количество.
>>729622 >>729628 Спасибо, попробую. А как получить как можно более рандомное зерно для последовательности? Может, системное время как-то можно использовать?
Смотрите, есть у меня функция в структуре, она проверяет одну из переменных, и если она ей не нравится, то возвращает посчитанное выражение, а вот если не понравится возвращает false и это всё имея тип float у этой самой функции. За такое не обоссут? Не нарушает ли это каких-нибудь постулатов или ещё какой хуйни?
>>729725 > возвращает false и это всё имея тип float Она не может возвращать false имея тип float. Возвращается 0.0. Если результатом твоего выражения ноль быть не может то это нормальный подход. Если может то хуита. В любом случае, раз у тебя флоат то лучше возвращать std::nanf("");
Очень нужна помощь. Гугла нет. Есть dat файл. На 4 позиции стоит 31('1') символ по ASCII. Надо поставить на эту же самую позициию(4) 32('2') символ. Сам код не работает: std::ofstream outfile; outfile.open("file.dat"); outfile.seekp(4); outfile.write("3",1); outfile.close();
>>729755 >Если результатом твоего выражения ноль быть не может то это нормальный подход. В этом то и суть, что может. Хотел этого избежать, но так и не придумал, что вернуть. >std::nanf("") Спасибо.
>>729776 > 0 0 5 0 > 8 5 4 4 > 9 3 5 5 и т. д. В итоге сделал проверку каждого числа как изначально задумывал, а хотел что-то оптимальнее. Но спасибо за генерацию случайной последовательности, сам бы этого точно не сделал.
Добрый вечер всем C++-господам, у меня есть некоторый интерес к плюсам, нравится вообще концепция С\С++ низко-высокоуровневый быстрый и гибкий язык, оптимизации, это все очень круто, но Я скриптоблядок который даже толком в скрипты не может (Джаваскрипт и пихапи планирую учить. На данный момент что дрочу инглиш и нофап). Суть в том что учусь Я в шараге, надо сделать курсач (очень примитивный), а в шараге учили билдер 6 (Вместо него планирую использовать GCC/GTK+ 3) базовые примитивы языка я знаю, но думаю инфа не актуальна, благо уже могу в инглиш что поможет быстро обновить знания моего C++. С языком проблем быть не должно а вот с библиотекой - не уверен, под Wayland сильно сложно код писать? Курсач мой ебаное неюзабельное говно, сделаю как можно быстрее на отъебись, преподша (кек) там нихуя не разберет и уш точно ничего не запустит. По курсачу у меня три вопроса: 1. Какую книжечку\быстрогайд посмотреть для базовых гтк-вейланд примитивов (И отличается ли кодинг под вейланд?) 2. Мне нужно будет вставить математические формулы в интерфейс и хотелось бы сделать это по людски, есть ли в гтк+ что-то вроде MathML или это как-то иначе можно сделать? 3. Какую математическую либу юзать? Я знаю только <cmath> она хоть и сишная и старая но ее более чем достаточно, современный С++ аналогичной библиотеки не имеет чтобы не дублировать вышеупомянутую или имеет?
Раз мне суждено хоть немного программировать на плюсах то Я хотел бы попытатся форкнуть на вейланд божественный оконный менеджер DWM - ничего лучшего с графическими интерфейсами не случалось, он состоит менее чем из 2000 строк, вот только стоет ли пытатся сделать GTK реализацию или к тому времени его уже и так форкнут? Сможет ли такое быдло как Я номально его написать? Пусть месяц-два времени заберет, если будет юзабелен то выложу на гитхаб может допилят по людски (многопоточность или еще что там нужно). У меня просто такое впечатление что команда разработчиков не собирается в ближайшем будующем его переделывать - что весьма грусно по-моему. Братся за это или по быстрее начинать дрочить жаваскрипт чтобы работать хотябы за еду? У меня такое чувство что время течет сквозь пальци а Я нихуя не делаю.
>>730050 В глаза ебусь. >>730034 Ну так тормозить может, оно простое же, легко и на плюсах написать будет. >>730005 Какие игори то? Игори это сценаристы художники озвучка спецефекты, много чего и даже немного кода. Движки же есть чтобы игры делать, не с нуля же все пишется. Я вот хуй знает чем может сейчас программист на плюсах заниматся, энтрерпрайзные средней сложности приложения? Микроконтроллеры и автоматизация (это вроде уже си)?
>>730127 К русской клавиатуре не привык, месяц без нее и 10 дней без интернета. Думаю надо дальше инглиш дрочить. Разработка под виндовс тоже ебаный стыд, но ничего, живут же люди как-то.
>>730115 >>730138 Тоесть каждый с++ кодер постоянно делает прикладной софт? Просто ходят байки кокок все в веб перекатывается и т.д. Я так понял энтерпрайз это не очень задело, так как производительность критически важный параметр.
>>730144 В веб перекатывается всякий софт, который на С++ писали году в 1998-м, а в нулевые произошел перекат на Java и C#, а на С++ остался только по разным недоразумениям. Разного рода бухгалтерия, документооборот и прочие не очень критичные к производительности штуки. Сейчас .NET программисты теряют работу в пользу PHP-макак, а С++ на это все смотрят со стороны.
Остался, никуда не делся, и ближайшие лет 10 не денется, десктопный софт для творчества - аудиоредакторы, видеоредакторы, фотошопы, CADы, и, что важнее, расширения ко всему этому рынку (сколько на рынке аудиоредакторов? Ну штук 10. А плагинов к ним? Сотни). Здесь понятно в чем дело - чтобы обойти конкурентов, софт должен быть быстрым у юзера, ты не можешь сказать "мой софт стоит не $50, а $10, зато ты можешь купить более быстрый комп".
Второй момент - нежесткий реалтайм. Компьютерное зрение, игры, различного рода библиотеки для бэкенда и т. д. и т. п.
>>730154 С++ когда-нибудь заменит сишечку? Мне кажется странным что не заменил, вроде есть все те-же возможности, даже больше, и обратная совместимость с С, но С никуда не девается уже более 30 лет...
>>730172 >но С никуда не девается уже более 30 лет Единственная причина использования Си - это одинаковый лейаут у структур, не зависимо от производителя и опций конпелятора, годно для операционок. В остальном это нищий язык.
Особенно умиляют фанатики, которые в насмотревшись Сишных костылей, уверовали в то, что goto/free и void в высокоуровнем коде это путь к просветлению. Блеать их даже наистандартнеемшим юник_поентером не переубедить, токуда только берутся такие ослы...
>>730172 "Почему не лишено смысла писать код на C, а не на C++": http://eax.me/c-vs-cpp/ Прочти эту статью и ты все поймешь, если тебе реально интересно и ты не очередной уебан который хочет просто нести хуйню.
>>730447 >Единственная причина использования Си В том, что нельзя навелосипедить поверх сишечки сотню несовместимых языков. Нечитаемый говнокод писать гораздо сложнее. >что goto/free и void в высокоуровнем коде это путь к просветлению "Высокоуровневый" часто означает намажем абстракций на абстракции, и еще дополнительный слой абстракций в середине не забудем.
>>730475 Неосилятор - человек, отрицающий полезность абстракций в результате сознательного или бессознательного стремления к упрощению и конкретизации собственной интеллектуальной деятельности. >>730484 Байтоеб - человек, преувеличивающий ценность высокой скорости работы ПО и низкого потребления им ресурсов относительно прочих аспектов разработки (скорость и стоимость разработки, изменяющиеся требования и др.)
>>729505 Кстати, для олимпиадок java является вполне себе варантом: есть стандартне классы длинной арифметики; и меньше шансов вылезти за пределы массива/обратиться к тухлому указателю, а потом мучительно искать, где же что-то не так.
>>730637 У меня знакомые олимпиадники пишут на паскале и делают структуры бинарных деревьев по значениям (в стиле struct hui { int left, right };). Так что у тебя ещё не всё так плохо лол.
>>730847 Выделяешь класс мышкой, тыц. Нажимаешь по нему правой кнопочкой, тыц. Помещяешь указатель в нужное место. Опяь правенькой, тыц. Вставляешь, тыц. И дальше по клавиатуре тук-тук-тук))0)
брысь с программача, бидло. класс скопировать нельзя. а вот инстанс класса можно. откуда вы только блядь берётесь такие?
>>730855 да да да.. накосякил. у меня есть указатель на обьект класса, и мне надо вектор таких наштамповать. сорян за ракование, но ты рак то побольше моего
>>730863 я пока создал 1 из 100 и там конструктор 2-3 функции на парсинг и в вектор, но сутьв чем.. из 100 обьектов половина вектора не меняется и т.к. обьект класса пустой -- было бы круто его просто скопировать.
>>730875 Кстати, я сегодня проводил ревизию книжек из шапки да-да, ОП тоже не все читал целиком и обнаружил, что русское издание большого Страуструпа которое "специальное" это отвратительное, дурно пахнущее, перепиленное чсвшным отечественным спермохлебом чудовище Франкенштейна, имеющее весьма отдаленное отношение к оригиналу. Поэтому, братцы, НАСТОЯТЕЛЬНО рекомендую при чтении большого Страуса читать либо только ангельскую книжку, либо держать перед глазами обе, иначе потом будете плеваться. ЧСХ, это не относится к Страусу для ньюфагов, он вполне так добротно переведен, отличия минимальны.
>>730886 >читать либо только ангельскую книжку Нахуй тогда вообще читать какую-то книжку? вики, гугл + цппреференс - этого хватит за глаза.
Книжки пережиток ранних нулевых, когда интернетов не было, и единственный способ учить погромирование - книжки (html/chm/txt) с диска "погромирование по-русски 7в1"
>>730887 я тебе описал. на чем конструктор копирования классов может мне насолить?? >>730888 не скажи.. просто проскролив книжку со всем, я бы знал куда мне копать, а не писал на 2ч
>>730888 Не совсем так, книжка заостряет внимание на более существенных деталях в ущерб менее существенным. Плюс последовательное изложение и наглядность. К примеру, в книжке тебе скажут, что "const слева от звездочки относится к объекту, а const справа - к указателю", а в стандарте или cppreference разведут бодягу на пять страниц про деклараторы и описание всех крайних случаев. Так что лучше читать скучные доки уже после книги или точечно, а не все подряд. Но это мое имхо, конечно, вполне возможно, что кому-то удобнее сразу.
>>730890 >или cppreference разведут бодягу на пять страниц про деклараторы и описание всех крайних случаев. Самое ценное оттуда - это примеры. Нехуй вообще бодягу читать, просто смотришь в пример и вникаешь.
>>730848 Мне объяснят, нахуя тот даун использует int для указателей на левое и правое поддерево? Или это такие хэккерские указатели, которые автор почему-то не захотел сделать unsigned?
>>730891 да пошел ты. хоть это и 2ч но это единственная норм доска на всей борде. а вы не гоните раков с лабами а гоните меня бля! а я просто учу язык для себя т.к. это интересно. И этот тред создавался для таких вопросов как у меня. бля пиздец ты охуел анон.
>>730893 >>730848 >>730895 >>730897 >>730899 Ахуеть сколько тупых даунов на моём уютном сосаче. Вам конкретно написано: >>730645 > У меня знакомые олимпиадники пишут на паскале и делают структуры бинарных деревьев по значениям (в стиле struct hui { int left, right };). > Так что у тебя ещё не всё так плохо лол. А изначально это был ответ на: >>730637 >У меня знакомые олимпиадники ими пользоваться не умеют. Тухлый они наверно ни разу не видели. Пищи для размышлений, надеюсь, вам хватит, дауны.
Народ, поясните по хардкору за LLVM? Я знаю, что это, но не совсем осознаю практическое применение и привязку к реальной жизни. Где это можно встретить? И что на эту тему можно почитать (можно ангельский)?
>>731099 Это бэкэнд для компилятора. Всё, что нужно знать, чтобы понимать нахуй он нужен ирл. для самых одарённых – для компилятора с LLVM нужно написать просто фронтэнд (транслятор языкнейм -> llvm ir) своего языка, и во уже готов ахуенно оптимизирующий компилятор
Почтать можно гугл, можешь погуглить про Kaleidoscope если хочешь сам писать компиляторы.
>>727631 >память интерпретируется по-другому Т.е. это платформо-специфичный код? >>727878 А копирование не будет лишних операций добавлять? Или это не особо влияет на скорость?
>>730448 90% всей мировой экономики это распил бюджета и боязнь остаться без работы. Неужели goto/free и ебля с void* интереснее чем абстрактные фабрики конкретных синглтонов?
Не компилируется прога. Скачал её отсюда. https://sourceforge.net/projects/lmule/?source=typ_redirect ./configure выполняется нормально. В инструкцие говорят кучу параметров передать, но без них работает так-же как и с ними. Похоже дэфолтные. Поэтому пишу сразу ./configure && make. Конфиг работает хорошо. Мэйк вроде тоже по началу справляется. Вот что пишет http://pastebin.com/tHLERJ43 Потом компиляция прерывается. Жалуется на исходники. http://pastebin.com/JsCsW2bN Пишет не узнал какую-то переменую в конструкторе. Можете посмотреть что там не так? Может с параметром каким-то особым компилировать надо?
>>731358 >как проверить знания? Напиши свои вектор и хэшмеп, не используя стандартной библиотеки. То есть велосипедишь move, remove_reference и т.д. Еще для практики можно запилить свою реализацию std::function.
>>731310 Это код, специфичный для 32-х битных ieee 754 чисел. Впрочем, его можно модифицировать и для других чисел с плавающей точкой, но особого смысла этом нет - ответ-то все равно приближенный.
>>731711 Оказалось что чистые данные компиль приводит даже не к char а к signed int инструкцией movzx, в результате чего складываются совсем не те числа, что я ожидал.
>>731846 > зарплату Вопрос был про проверку знаний для ньюфага прочитавшего одну книгу. Какое отношение имеют знания к зарплате? К чему твой вопрос вообще?
Помогите с лабой плиз. Вводим строку с клавиатуры. Надо написать программу которая будет считать кол-во слов которое начинаются и заканчиваются на одну и туже букву.
Натолкните на мысль пожалуйста как это можно осуществить.
>>731875 Чтобы понимать как это говно работает. >>731876 Ты не ту профессию выбрал, если хочешь просто денег – перегоришь через пол года работы, а так по карьерной лестнице не поднятся.
std::vector::pop_back не приводит к реалокации памяти? Если я в цикле два раза pop_back, а затем один раз push_back и так пока размер не станет 1 будет ли перераспределяться память?
>>732023 Стандарт явно описывает все случаи, когда портятся указатели/итераторы вектора. pop_back () среди них нет, поэтому указатели обязаны остаться валидными. Это фактически означает, что переаллокации не будет, хотя формально никто не запрещает реализации stl, например, остановить все прочие треды и полчаса дрочить вектор, аллоцируя и удаляя память впустую, лол.
>>732069 http://www.cplusplus.com/reference/vector/vector/pop_back/ The end iterator and any iterator, pointer and reference referring to the removed element are invalidated. Iterators, pointers and references referring to other elements that have not been removed are guaranteed to keep referring to the same elements they were referring to before the call.
Тут наверное Qt не в почете, но всё же. Кто-нибудь поможет мне разобраться, почему деструктор Application'а не вызывается, хоть он и в QScopedPointer? В то же время, если создавать прсто объект на стеке, то все удаляется прекрасно.
>>732094 Ну, все верно. Я, понятное дело, говорю о всех итераторах/указателях, про это отдельный пункт есть в "опасных" методах типа push_back. Последний итератор очевидно портится, ибо именно этот элемент удаляется.
>>732898 > int *c Тип переменной с - указатель переменную типа int (а не указатель на ссылку) >>732899 > int &d=&b Тип переменной d - ссылка на переменную типа int (а не ссылка на ссылку) А разгадка проста - &b возвращает адрес переменной a, так как b (раз это ссылка на а) это синоним a, то и записи &b и &a должны означать одно и тоже. http://ideone.com/QzBzEW
Посоны, больше не у кого спросить. Скажем, есть две таблицы в SQlite. На примерах офк, у меня другого сорта данные, но связь такая же. 1 таблица - шкальники id | имя | id_класс | id_школа 2 таблица - школы id | адрес | etc
И вот нужно эти данные забить в QTreeView в виде | |---шкала 1 | |--шкальник 1 | |--шкальник 2 | |--шкальник 3 |---шкала 45 | |--шкальник 9000 | |--школьник 9228 ...
При чем, если вздумается на ходу что-то поменять - изменения в модели должны загоняться в бд. Я думал сначала тупо взять QSqlQuery прогнать с джойном и кое-как заполнить, но потом их же хуй получится редактировать. Анон, что мне гуглить? Уже все перерыл, нихуя не выходит. В MVC не посылай, знаком с ним, но ситуация какая-то сложная
>>733716 > В MVC не посылай А если пошлю? Делаешь эту хуйню сначала без персистентности. Тоесть полностью реализуешь модель и все нужные операции над ней. Потом в код операций начинаешь добавлять операции над БД. Добавляется/удаляется школьник - добавляешь его в бд, школьник перемещается из одной школы в другую - меняешь ему значение поля со школой и т.д. Оптимальный вариант сразу ORM какую-то накатить.
>>733775 Я так сначала и думал, но мне сказали, что можно вообще в обход этого всего пойти и натянуть QSqlRelationalTableModel с помощью QAbstractProxyModel, только у меня там не оче получается пока.
>>733775 А почему пошлёшь-то? Все что в доке по MVC я понял и разобрался со всеми примерами. А на QAbstractProxyModel и примеров-то нету! Вот оно как. Ну ничего, разберемся
>>733790 > QSqlRelationalTableModel Просто дополнительный слой абстракций чтобы с SQL не пердолиться хотябы в простых случаях, суть от этого не меняется.
>>733803 Тогда уж блядь оставлю наверное просто QSqlTableModel, Relational мне там вообще не помощник, одно поле с именем все равно нужно ручками тащить как я пони
Начинаешь разбираться в этом говне и начинается, internal pointers, QPersistentаааааааааааааааааааааааааааааааа сукааааа я просто хотел заполнить ебаный QTREEVIEW
>>734362 > контейнер с константным временем доступа назвали list Вектор уже занят был. А у этого быстрая (в среднем) вставка в начало, небольшие нюансы с выделением памяти, array тоже не сильно подходящее название.
>>734388 Да, если только размер не равен или меньше указателя. Получается что в векторе данные расположены рядом (как в обычном массиве), а в листе могут быть разбросаны по всей куче (как в связных листах и подобных структурах) - в некоторых случаях может влиять на производительность (из-за кеша).
>>734435 >>734431 Как не забивать на жто дело? Всё время хочу перестать читать всякое говно, и занятся чем-нибудь дельным. Но как начинаю - постоянно отвлекаюсь и смотрю говно. А потом и вообще забиваю.
переписать на си++ cuda чтобы $server_seed перебирать и найти нужный. Я поверхностно знаю си++ и php. Основная проблема это cuda. Подскажите годных книг/мануалов как там сделать цикл в несколько потоков, который будет перебирать $server_seed хешировать, сравнивать с ответом и т.д. Я понимаю, что перебор займет вечность времени, но просто хочу попробовать.
>>734479 Сегодня в хабрагруппе в вк какое-то тело поясняло, что жаваскрипт самый перспективный язык, а на цпп можно написать очень ограниченный спекрт приложений.
>>734553 Информация к размышлению: весенний апдейт черновика стандарта увеличил его с 1300 до 1500 страниц. Тебе придется как минимум прочитать его, а местами еще и запомнить.
>>734553 Простые игры можно писать на чем угодно. Я бы посоветовал для обучения программированию что-нибудь интерпретируемое, вроде питона, а потом уж выбрать язык по душе.
>>734598 Ты че ебанутый? Для кого cppreference пилят? Это же долго! Нахуя читать формальное описание языка, если ты не пилишь компилятор? Или ты пилишь?
>>734601 > Поясни за язык, он сложный для человека, который не очень разбирается в компьютерах? Конечно. Всё застопорится на указателях, ссылка, выделении памяти и тд.
>>734601 Затем, что ты, например, хочешь понять, можно ли делать в крестах %хуйнянейм. Ты, понятно, первым делом тестишь ее в студии/шланге, и она вроде работает, но чем более необычная фича, тем более ты хочешь быть уверен, что она разрешена стандартом, и ты не словишь баг из-за UB спустя полгода, когда уже хер проссышь, что ты там написал. Ты, допустим, открываешь Страуструпа в нужном разделе, а там про это вообще нет, или есть, но говорится очень туманно например, часто он пишет undefined, имея в виду implementation defined, типа "char size is undefined". Поэтому проще всего не ебать себе мозги с трактовками, а открыть стандарт и убить неоднозначность в зародыше. Еще есть cppreference, но там имхо ядерные фичи хуже структурированы и разбросаны хуй пойми как. >>734603 Я пилю stl-совместимую либу, почти такие же требования к деталям нужны.
>>734622 Я тебе больше скажу, даже сишные массивы в C++ мало кто использует. А с появлением std::array это вообще нонсенс. Так что указатель на массив указателей - это то еще днище. Даже в C такой хуйней никто не страдает и все пишут через typedef'ы. Если увидишь такое на собеседовании, можешь смело плевать в лицо уникуму, который это спрашивает.
Ну добавьте уже ссылку на слак в шапку, чего вы. Нам уже год, на столько вопросов было отвечено всем ньюфаням, что впору платную подписку организовывать, куча специалистов из разных областей и все на передовой разработки! Так что не стесняйтесь, присоединяйтесь! https://invite-me-to-2chpr.herokuapp.com/
>>735148 Изучение теории языков программирования, конструирования компиляторов, преобразований над естественными языками, искусственного интеллекта, матлогики и автоматизации доказательств, функционального программирования, компьютерной алгебры требует знания грамматик. В более технических или коммерческих областях наподобие компьютерной графики, эмбеддеда крудошлепства, веб-макакинга они вряд ли понадобятся, хотя иногда могут. Например, сможешь хуярить сложные регулярки как Г-сподь.
>>735148 В некоторых областях иногда запиливают свои недоязыки, ориентированные на эти области, либо на решение каких-то узких задач. DSL - domain-specific languages. Никогда не обмазывался, но, думаю, грамматики там используются. И еще это довольно узкая ниша, так что платить там тоже могут весьма щедро.
Анон! Думаю всё заметили, что Абу заделал новый раздел, куда пускает только по пасскодам. И я знаю, что довольно много здесь человек пускает слюну на этот раздел, воображая себе "тот самый ламповый двач", но раскошеливаться на пасскод не хочет. Поэтому, сугубо из благих побуждений, я написал эту инструкцию, этакий секрет борды, о том, как получить пасскод абсолютно бесплатно. И так, тебе нужно: 1. Закрыть глаза и мысленно представить вожделенный пасскод. 2. Сказать в слух "Спасибо Абу!". 3. Досчитать до десяти. 4. Отправить этот пост в любой тред пяти других разделов. 5. Лечь спать. Утром проверьте свой электронный ящик - пасскод уже там!
>>734637 А как же легаси? А как же старые библиотеки, которые требуют указатели на функции? Конечно, в своем коде, который ты пишешь под с++11/14/17 использовать их не стоит, но знать о них как минимум нужно, чтобы не пугаться увидев такие вещи в чужом коде.
я написал свою консольную программу. Поместил ее в C:/folder/myprog
После запуска-закрытия - exe файл меняет свой размер и перестает работать. С чем это может быть связано?
Ради интереса накопировал 100 экземпляров своей программы и они ВСЕ увеличили свой размер (на ~200Кб), хотя запускал только один экземпляр. Что за НЁХ?
>>735304 я не говорил, что указатели на функции не используют. Я говорил о обычных массивах. Да и никакой вменяемый человек, даже используя С-массив, не писал бы его определение без вложенного typedef'а.
Сап, выручай Антоша. В игре нужен контейнер для хлама, валяющегося на земле. Предела по количеству нет, обращаться нужно будет часто, пускай будет вектор.
В заголовочный файл: extern vector<resourse> Resourses;
Теперь в мейне Resourses[0].Drop() вызывается без проблем, автокомплит подхватывает поля класса для любого элемента, все компилится и работает.
Qt. Есть листвиджет и SQLite таблица. Нужно забить из таблицы данные в виджет, комбинируя инфу с разных столбцов ричтекстом в листвидгет (т.е. напрямую QSqlTableModel юзАть не выйдет) Я пока вот что придумал: сабклассить листмодель, в ней содержать внутри QSqlTableModel и из нее черпать инфу и возвращать в data(). Так будет ок или нет? Хз просто, моветон ли модель в модель аггрегировать.
>>735435 Блядь, ну он же тебе человеческим языком выдал, что интерпретировал твою чегототам Resources [0] как объявление массива и охуел от нулевого размера. Просто пиздец, если уж ты пишешь код, то изволь читать сообщения компилятора, а не МАМ У МЕНЯ ТУТ ОШИБКА НА АГЛИЦКОМ ВЫЗЫВАИ ПОГРОММИСТОВ НУ МАМ(((((((. Вообще, телепаты в отпуске, но я сегодня задержался в астральном офисе, так что ГЛЯДИ СЮДА, ЧЕПУШ, вангую причину ошибки даже без твоих исходников: ты, хуиная голова, не подключил из второго заголовочного файла в котором твой псевдовызов Drop() первый файл в котором extern vector.... Компилятор не обладает в отличие от крестоблядков ИТТ навыком телепатии, поэтому он в пределах данного файла не слышал ни о какой переменной Resources. Следовательно, он считает, что это заново объявляемое имя, а [...] после наводит на мысль, что это массив. Массив нулевого размера недопустим, поэтому компилятор испражняется первой ошибкой в твое окошко вывода. Но надежда умирает последней, поэтому он героически продолжает парсинг, но видит дальше точку вместо ожидаемого семиколона, а еще дальше - объявление функции Drop да-да, она тоже не подключилась, в котором ты нагло забыл указать тип возврата. Такую подставу он простить уже не может, ссыт тебе на лицо и прекращает попытки разбора твоего высера.
И да, прочитай какой-нибудь style guide, а то на эти имена просто больно смотреть. Ах, тебе же лень открыть гугол? Ну тогда гляди сюда: AbstractMamka - имя класса, tvoya_mamka - имя переменной, ebalMamku () - имя функции.
>>735451 Нихуя я не создал, а перечислил сущности как независимые. И вообще никто не мешает инстанцировать абстрактный класс, если у него все виртуальные методы реализованы по дефолту, это не обязательно интерфейс же.
>>735435 >extern vector<resourse> Resourses; >extern у меня за такое на районе убивают. ты объявил глобальный Resourses, но не определил его, ты его точно определил его и инициализировал в мейне? а если по сути можно обойтись без extern в проектах. почитай книжек, хотя нет, через годик другой сам поймешь.
>>735456 Он не сказал, что не определил. Раз у него работало, значит небось в другом .cpp было определение. Совсем без определения могло бы прокатить со встроенным типом, но не с вектором.
Господа, помогите прояснить пожалуйста. Опять пишу не в ту ветку, но вы все же ближе к этой теме. Правильно ли я понял, что при использовании QXmlStreamWriter нельзя просто так взять тег и перезаписать значения в нем, а нужно переписывать весь файл с нуля?
В попытках разобраться, таки неудачно убирал определение вектора из .cpp файла, запутав не только себя. Но, в данный момент первой ошибки нет, а остальные остались неизменны: http://puu.sh/oHwtB/161bc5d07e.png
Как в многофайловом проекте обойтись без extern? Сам не в восторге от этой хуйни, но альтернатив просто не знаю.
>style guide По мере вкатывания постараюсь исправиться в оформлении кода, просто пока, при оформлении и распределении по файлам, уходит в разы больше времени в поисковиках и попытках разгадать шарады компилятора, нежели при написании кода. Порой спрашиваю себя, а нужно ли оно мне, и не заебенить ли все в одном файле.
>>735494 Блять, да ты же в глобальном пространстве имен пытаешься делать присваивание. Конечно тебя компилятор нахуй с такими запросами посылает. Вне функций можно только объявлять и определять переменные, но нельзя писать императивный код, что-то присваивать или вызывать функции.
Если ты хочешь проинициализировать вектор, то делай это в самом начале main'а.
>>735539 ААа сложна.. дануна.. все работает. Походу жизнь продолжается.
Все же поправь если не прав: extern у объявления вектора в .h говорит искать объявление в одноименном cpp файле(в данном случае). Итого область видимости данного вектора - файлы с объявлением + те файлы, где будет подключен .h с отсылкой на него.
Предположим я инициализирую по твоему настоянию вектор в мейне. Как мне теперь работать с этим вектором в других модулях, без использования extern?
>>735674 Любая переменная которую ты объявил вне какого либо блока и которая не имеет const модификатора (и его друзей - volatile и mutable) является видимой по всей программе. Но вследствие нюансов архитектуры языка - компилятор обрабатывает по одному юниту (трансляции) за раз (вообще не имея инфы про остальные) и статического контроля - ты должен предоставить ему информацию про эту переменную. В случае функций используется простая декларация - она предоставляет компилятору всю нужную информацию о функции. Переменную нельзя задекларировать подобным образом - так как синтаксис не отличен от объявления переменной. Поэтому используется ключевое слово extern. Указав в объявлении переменной extern - то показываешь компилятору что это на самом деле не объявление а декларация переменной, то-есть ничего создавать не нужно (как при обычном объявлении переменной). А так как компилятор уже имеет всю нужную ему инфу про переменную он может нормально откомпилировать юнит. > я инициализирую по твоему настоянию вектор в мейне. Как мне теперь работать с этим вектором в других модулях Ты судя по всему не различаешь (или путаешь) объявление и инициализацию. Если тебе так нужна глобальная переменная ты можешь объявить ее снаружи, а уже инициализировать в main().
>>735494 >extern, как избавится. ну смотри, если по существу, ты сейчас пишешь в стиле си. можно получать твой вектор в многофайловых проектах другими путями, один из которых передавать по ссылке или указателю в функцию\метод вызываемую в другом файле проекта. тебе нужно понять, что корень проекта у тебя функция main. все остальные фукнции где бы они не были, вызываются из main или же из других функций которые в свою очередь вызываются... ну ты понел. разберись с классами, не пиши в процедурном стиле используя кресты, для тебя специально придумали классы. если же что-то передать таким образом невозможно, в крайнем случае используй синглтон.
>>735674 Давай я тебе открою одну маленькую тайну. Компилятор вообще никакие объявления не ищет. Он берет .cpp файл и компилирует абсолютно ничего не зная о других .cpp файлах. Потом, после того, как все .cpp файлы были откомпилированы, включается линковщик, это уже другая программа, которая берет скомпилированные компилятором файлы, пакует их все вместе и делает из них .exe или исполняемый на другой платформе файл. Теперь разберемся с объявлением и определением переменных. Определение -- это когда ты пишешь, например, int x; или vector<resource> Resources; Эта строчка скажет компилятору "выдели память под вектор ресурсов и теперь я буду обращаться к этой памяти по ключевому слову Resources". Теперь в этом .cpp файле ты можешь использовать Resources просто обращаясь к нему по имени. Как я уже говорил, компилятор компилирует каждый .cpp файл отдельно и он совершенно ничего не знает про то, что творится в других .cpp файлах и какие там переменные определены, поэтому в другом .cpp-шнике ты не сможешь использовать переменную Resources. Если ты в другом файле еще раз определишь ту же переменную, то это уже будет другая переменная с тем же именем и линковщик, когда будет склеивать файлы обругает тебя сказав, что переменная Resources определена и там и там, и что он не знает какую из них использовать. Чтобы решить эту проблему существует механизм, который называется объявление.
Объявление -- это когда ты пишешь extern int x; или extern vector<resource> Resources;. Эта строчка говорит компилятору "Память выделять не надо, просто знай, что где-то в другом файле будет определена переменная Resources, под неё будет выделена память, а пока просто знай, что она существует и обращайся к ней по имени Resources". И все, теперь компилятор уже в другом .cpp файле будет знать о переменной Resources определенной в другом месте и использовать её, а не создавать новую переменную.
С функциями та же фигня. Есть определение функций -- это когда ты пишешь функцию с её телом, т.е. void foo() { ... } И объявление функции -- это когда ты пишешь функцию без тела: void foo(); Все что я писал выше, справедливо и для функций в том числе.
Как я уже говорил, каждая глобальная переменная должна быть определена один раз на всю программу. А объявлений может быть сколько угодно.
Теперь что касается директивы #include. Снова маленький срыв покровов, #include -- это просто copy-paste. Никакой магии. Когда, например, в файле main.cpp ты пишешь #include "myfile.h", препроцессор (такая программулина, которая запускается еще до работы компилятора) тупо возьмет и скопирует содержимое файла myfile.h в файл main.cpp. Вот именно так и сделает, без шуток. Ему наплевать на имена файлов или что-то подобное, он тупо берет и копирует текст из инклюда целиком, а потом уже компилирует. Вообще инклюды нужны для того, чтобы упростить вот этот процесс объявления и определения переменных. Можно обойтись и без них. Если ты в разных файлах используешь переменную Resources, ты можешь просто в каждом файле написать объявление extern vector<resource> Resources; и использовать его. А в каком-то одном файле (например, main.cpp) его определить, написав vector<resource> Resources; Это будет прекрасно работать. Но когда у тебя таких общих переменных или функций будет слишком много, ты заебешься повсюду копировать эти объявления. Поэтому люди придумали инклюды. Ты пишешь все объявление в одном файле, называешь его, скажем, myresources.h, и теперь везде, где ты хочешь использовать Resources или какие-то другие общие переменные которые ты туда прописал, ты пишешь #include "myresources.h" и препроцессор просто скопирует все твои объявления в этот файл. Вот так.
>>735723 Декларация и объявление -- это одно и то же. В русском языке есть слова "Объявление переменной" и "Определение переменной", в английском языке для этого есть слова "Declaration" и "Definition" соответственно.
Ну напишу в тонущем Сап /pr это моё любимое место в интернетах. И я хотел бы познакомится с годным адекватом-крестоносцем с целью напилить годноты. Проблема какая : Хочу зелёных клеток на github много много я собрал конфу из пары анонов чтобы напилить годноты есть пару человек которые успешно справляются с контентом в годный проект с кодерами полная жепа. и ищю чувака который будет 1-200 строк в день сможет коминтить и нести свои идеи в проект ____________________________________________________ контакты -- tox 35BA0C3B869A3D30072B553AC278E0AFC65BD8F27294FDAB231C1C7EE7C79568E7DAEA482324 или оставь мыло итт всё расскажу.. P.S.: настоящие люди только в интернете. очень хочу ещё раз убедится в предыдущем предложении
>>736049 >global illumination планирую не юзать это и обойтись только картой точечными источниками + отраженный свет на рельефе. >>736053 я тоже не имею с этого ничего, это просто развлечение.
>>736059 >обойтись только картой точечными источниками Ночь, улица, фонарь, аптека, Бессмысленный и тусклый свет. Живи еще хоть четверть века - Все будет так. Исхода нет.
Умрешь - начнешь опять сначала И повторится все, как встарь: Ночь, ледяная рябь канала, Аптека, улица, фонарь.
>>736063 ну не фонарь, а n фонарей.. да и блики тоже придадут чего-то. ну я просто хочу гдноты напилить а не кукарекать на 2ч что я капчюю и занят и в случае монетизации игори она пойдет всем разрабам тебе решать пробовать или нет.
>>736092 А за это спасибо! чайку тебе анон в планах небыло смотреть в инструкции. брал всё в лоб в целях портируемости на мипсы и армелы, но стоит поигратся с бранчами на этой фигне
Не дождался переката. Надеюсь 1.5 анона, оставшихся в тонущем, достаточно компетентные.
Вопрос: Какую посоветуете книгу по специфике крестов для человека с большим опытом C, Java, Scala (и знанием еще шести языков). На крестах, вроде, неплохо читаю чужой код (не уверен насколько идиоматичный был код, что мне в разное время попадался). Мне нужно максимально быстро пройти фазу вкатывания и начать лепить продакшн код так, чтобы никто не заподозрил, что я последний раз (кажется безуспешно) пытался изучать кресты лет так 1Х (не будем уточнять) назад.
P.S.: Тред со среды висит неперекатанный, это вообще типично для ОПа? Сколько часов/дней/месяцев это у него обычно длится?
Наверно, достаточно отдаленный от самого языка вопрос, но все же задам тут. Вот получается, читаю я тут книги, поглощаю информацию (бесполезную в том числе), но а потом-то что. Сначала мидл-не мидл, хуй поймИ, потом еще что-то, а в конце у погромистов что? Сеньор? Что этот снеьор должен уметь? Я так посмотрел, что область применения многих языков очень обширная и быть шарящим типом во всех этих областях не просто нереально. Так куда теперь идти более перспективно. Вот посмотрел ы кьют - ну это путь просто в гуй, а гуй - на губе хуй, какие там могут быть сеньоры?! Не видел ни одного объявления, чтобы требовался сеньор в области разработки гуев, наверно, это ближе к дизайнерам. Значит от кьюта надо отходить и брать его как дополнительный инструмент. Даться в сети, бд -а там что, ну написал я обертки для tcp/udp стеков, и что дальше-то? Опять какой-то тупик и дорога не сказать, что бы длинная была. Бд - тут уже пошире область, все же очень много баз данных со своими реляционными подъебками и внутренними особенностями (крипты и прочая хуйня, в которую я особо не вникал). Графика, вычисления на видеокартах - вроде неплохо, но идти долго, и стоит ли оно того? Подскажите, посоны, вообще не могу разобраться в себе сейчас. Все это осиливаемо, конечно, при приложении некоторых усилий, но будут ли они стоить разультата?! Что вообще нужно знать и уметь, чтобы ебу дать в начале, а потом в ус не дуть и жить припеваючи, не хочется работать обычным погромистом всю жизнь, ведь я вот смотрел, как в некоторой конторе работали главные инженеры - они были как саппорт для тех, кто по-ниже и делились своим опытом, вот в чем их работа состояла, принимали на оценку результаты и давали добро/браковали результаты - потому что они могут, скилловички, так сказать и это небезосновательно, что в них нуждается та контора.
>>736239 Вообще не понимаю вопросов. Ты - типок, у которого большой опыт на С, Java, Scala, спрашиваешь как выучить C++? Типа такой опытный, но не шаришь, как новую технологию нужно изучать? Значит не такой уж ты и опытный.
>можешь просто в каждом файле написать объявление extern vector<resource> Resources; и использовать его. А в каком-то одном файле (например, main.cpp) его определить, написав vector<resource> Resources; Это будет прекрасно работать. И таки работает. За счет понимания дело пойдет легче. tnx o/
>передавать по ссылке или указателю С непривычки путаюсь в них, пока стараюсь избегать.
С главным мейн понятно. Печально, что из-за локальных методов всяких window, event, не удается вынести развесистые ветки кода из главное функции, хотя среда и поиск частично решают проблему навигации на "главном поле".
>для тебя специально придумали классы Там, где классы уменьшают количество кода и упрощают дальнейшее редактирование, по возможности использую их. Вроде как могильные кресты это СВОБОДА ВЫБОРА. >не пиши в процедурном стиле >в крайнем случае используй синглтон Пока, на 2к строках, не понимаю, зачем мне ради небольшого порядка, переписывать и раздувать код. Может позднее придет понимание.
>>736282 Я не спрашивал "как учить?" (идиотский вопрос).
Я спрашиваю конкретно об отличиях крестов от перечисленных языков и о том какая из книг (перечисленных в ОП-посте или других) лучше всего раскрывает конкретно эту тему, не отвлекаясь на повторение всего, что есть в С и общие рассуждения о ООП и паттернах проектирования. Спрашиваю у тех, кто прочел не одни книгу, понимает их различия и может что-то порекомендовать конкретно для моего случая.
>>736367 Ой, ну какой случай-то, блядь?! Ты освоил столько технологий и не можешь самостоятельно определиться с литературой? Или для тебя являются загадкой, что нужно найти список фич языка и понять, какие фундаментальные подходы представлены этими фичами? cppreference и в путь.
P.S. Не думай, пожалуйста, что я просто так к тебе тут доебываюсь. Просто выглядит это так, будто ты сильно себя переоцениваешь в профессиональном плане. А когда не осознаешь, что ты нуб, то трудно профессионально развиваться.
>>736409 >cppreference Годная вещь. Уже читаю. Но там все вперемешку (как и, наверное, должно быть в справочнике). Где-то половина или третья часть из С. А некоторые базовые вещи слишком сухо описаны. Например, чем template отличается от дженерика в Java. В принципе, наверное, возможно по ней изучить язык (кое-как), но хотелось бы последовательного изложения всех базовых концепций, начиная с того места, где заканчивается C. >Не думай, пожалуйста, что я просто так к тебе тут доебываюсь. Норм. Был бы реально нуб, тогда бы напрягся от этого. Согласен на счет опасности собственной переоценки. Переоценка у меня случилась в том плане, что я возомнил о себе, что с таким опытом, кресты у меня уже "в кармане". Я не заложил в сроки проекта время на изучение ЯП, чувствую, скоро начну выбиваться из графика из-за этого.
Напомните всякую невесёлую хуйня которая не противоречит стандарту и может новичкам в понимании работы кода. Типа 3[a] или параметр компиляция для двух стеков — один для коллбеков, другой для промежуточных данных.
>>736602 >Game() >{ >Game(); >std::vector<Obj> _gameObj; >} Что это?
>>736603 Исполняемый собирается без ошибок, при запуске закрывается без объяснений.
>>736604 >Ты память под вектор не выделил выделял: objects.reserve(9000);
На всякий, с указателями попробовал и так:
vector<Obj*> objects(9000);
Ничего не меняется.
>>736590 Только сейчас заметил, теперь исполняемый крашится даже от присваивания через objects[0]->x = 64; т.е. раньше с objects[0].x = 64; программа не закрывалась.
Нафига сейчас эта запись через указатели?
Если убрать всякие objects[0]-> и рисовать через конструктор, то window.draw(Portal.sprite); По прежнему рисуется без проблем.
Пока гляну книгу, может пояснит за указатели(от которых пока больше проблем, да и синтаксис через -> как-то не радует)
Дебильный вопрос есть вложения инклудов: lib3 -> lib2 -> lib1; в lib3 находится class3, lib2 - class2; мне нужно сделать методы class2 доступными class3 через френдли, но при компиляции происходит ошибка, мол, lib3 ничего не знает про lib2; как это грамотно реализовать?
>>736959 Я никого ничего не заставляю. А что плохого в >РЕЗЕРВИРОВАТЬ ПАМЯТЬ ДЛЯ ВЕКТОРА Почему бы за один раз не аллоцировать столько памяти, сколько нужно? Тем более он точно знает сколько у него объектов.
>>736976 Окей, тогда поставлю вопрос так: У меня есть ебучий сервак, на котором я запиливаю мультитрединг, естесственно, описание класса треда должно быть в отдельной либе. Я запихиваю в статические поинтеры либы треда нужные контейнеры и прочее. Теперь нужно допилить еще и вызов методов самого сервака, во время выполнения треда. http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php Да, я пишу это говно на кьюте, можете обоссать. Да, кьютоблядь - не человек, не могущий в основы.
>>736981 Статю просмотри, мне нужен мультитрединг на сервере. После обработки сигнала incomingConnection(qintptr SHandle) По статейке должен запускаться отдельный тред в пуле. Пишу реализацию треда - тред должен обрабатывать входящие данные сокета, окей - добавил статическийй поинтер на структуру изеров. Теперь мне нужно вызывать методы самого сервера, как это сделать грамотно. Спасибо, Абу!
>>736988 >Ты не можешь им передать указатель на сервер? ДАА ПОТОМУ ЧТО Я НЕ МОГУ ОБЪЯСНИТЬ КЛАССУ ТРЕДА О ТОМ, ЧТО СУЩЕСТВУЕТ КЛАСС СЕРВЕРА, ПОТОМУ ЧТО ОНИ НАХОДЯТСЯ >lib3 -> lib2 -> lib1; >в lib3 находится class3, lib2 - class2;
>>737011 >нахуй тебе класс треда? Эмм.. делал по примеру, я же говорю делал по статейке сервер наследован от QTcpServer, в классе сервера есть указатель QthreadPool; при срабатывании incomingConnection() - происходит примерно следущее (ПО СТАТЬЕ, Я НЕ ЗНАЮ ПРАВИЛЬНО ЛИ ЭТО ДЕЛАТЬ В СЕРЬЕЗНЫХ ПРОЕКТАХ) void SERVER::incomingConnection(qintptr SHandle) { Runnable *task = new Runnable(); task->setAutoDelete(true);
task->socketDescriptor = handle;
pool->start(task); qDebug() << "Pool started"; } Получается, что сам тред должен быть классом. Вот и пилю. Я бы с радостью просто передал классу треда указатель на инстанс сервера и все. Только я не знаю, как объяснить ему что такой класс существует
>>737016 >Только я не знаю, как объяснить ему что такой класс существует
Но я же выше написал, блять!
В хедере клиента - выше пишешь class MyServer; В его цпп - делаешь инклуд. И передай классу указатель. Или заебень сервер синглтоном - в Qt даже средства для этого есть, правда сходу не вспомню - какой-то макрос и класс.
Блять, да ты своему классу можешь даже скормить указатель на QObject своего сервера - чтобы дернуть его методы даже кастовать к нужному классу необязательно - были бы они слотами.
>>736971 Для того чтобы сделать класс другом достаточно его декларации. В хедере третьего класса делаешь forward declaration второго. В файле реализации третьего класса инклюдишь хедер второго класса. Если у тебя в хедерах реализация, то ты скорее всего соснул.
>>737029 >>737029 Ебанат, как структура данных диктует тебе, где хранить данные? Тебе религия запрещает array указателей пилить? ТЫ откуда взялся здесь, даунько? Пиздуй стандарт читать.
>>737124 Я не знаю в чем постановка вопроса НО Зачем ты добавляешь лишний уровень абстракции? Не логичнее просто class Server: QRunnable? К чему этот класс пустышка с агрегацией сервера, которая вызовет ряд проблем ?
>>737128 Можно Но я хочу так Как мне объяснить классу Runnable, что существует класс сервер? Я думал это тривиальная детская задачка, а тут, оказалось, есть проблемы с этим
>>736980 >кьютоблядь - не человек Я что-то прослоупочил, а на чем бояре рекомендуют писать кроссплатформенные GUI, которые бы выглядели не как школьная говноподелка и не как творчество бородатого аутиста, которым могут пользоваться только только такие же аутисты?
const string s = "Sap /pr"; for (auto &c : s){ /... / }
Написано, что для c выводится тип const char&. Почему? Разве auto не отбрасывает const? Или при амперсанде в деклараторе это будет low-level const?
И еще: тут s типа const string. В объектах типа string символы наверное хранятся как char массив или что-то типа того, а если это const string объект, то по идее как const char. Вопрос: каким образом при создании const string объекта внутри него char преобразуется в const char?
>>737176 ничего никуда не преобразуется когда ты пишешь класс string, ты внутри заводишь поле char *. Когда ты создаешь константный объект типа string, то все поля внутри этого объекта становятся константными, а все функции, которые меняют состояние объекта, т.е. не помеченные как const (за исключением конструктора) не допускаются к вызову
>>736923 Решил попробовать разобраться с отладчиком в mvs, часок подключал зависимые библиотеки, по итогу графическую хуевину с хулоувордом отдебажить удалось. Но на другой код в 40к символов всплывает:
Необработанное исключение по адресу 0x779C016E (ntdll.dll)
Первый этап обработки исключения по адресу 0x779D22B2 (ntdll.dll) в Debug1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000004.
гугл ведет на всякие "найдите ошибку в лабе", но у меня то релиз нормально компилируется и заводится. Как понять в чем вообще дело?
Есть listview в одну колонку... Есть таблица в три колонки. Пытаюсь удалять через removeRow(int row) - почти все строки удаляются, кроме одной двух. Например, если поставить во-вторую колонку 4 - строка не удаляется, а поставишь 1 - удаляется. КАк это работает - в толк не возьму, primaryKey возвращает первую колонку, как и надо. Пиздос, в общем. http://pastebin.com/mdvHVqrP
33 и 34ая строка - уже сделал отдельную переменную, один хуй не понимаю в чем проблема.
Есть два вектора, которые держат две технически идентичные (но разные для восприятия) структуры. Забиты в одном файле, если важно.
Выделяю под них место, получая инфу с базы. Для первого - все проходит нормально - приходит значение "4", на "4" и расширяется.
Со вторым все идет через хуй пойми как. Он выбирает даты. Даты выбираются как обычно для qDate (daysTo) - значение "1" - все ок, capacity == 1 Но если значение больше 2 - начинается пиздец.
В функции и в конструкторе выводится "2" - он генерит "4" В функции и в конструкторе выводится "32" - он генерит "41"
В чем беда - вообще хуй знает. Объявлены глобально в хедере, без указателей и переобъявлений - проверил.
>>737748 Будешь из принципа сидеть в тонущем один?
анон помоги, я наложалАноним08/05/16 Вск 22:39:11#660№737873
В общем-то пресловутый рюкзак вводим кол-во предметов, вместимоть рюкзака, ценность предмета, вес предмета
И код вроде бы работает, но хреново. То есть при вводе кол-во предметов - 3, вместимость - 50, дальше ценность и веса предметов 60-20, 100-50, 120-30 код пашет, но если вбить например 1 предмет, вместимость 1000, и ценность с весом 500-30, то выдает нечто рюкзак превышающее, а если вбить так же 1 предмет, вместимость 10, стоимость-вес 500-30 выдает нуль, понять не могу где налажал
int main() { int n; int capacity; std::cin >> n >> capacity; vector<int> values(n); vector<int> weights(n); for (int i = 0; i < n; i++) { std::cin >> values >> weights; }
>>739983 Что значит "не всюду может компильнутся", конкретно что за ошибка/что не так?
Сформируй нормальный вопрос в не утонувшем треде ( https://2ch.hk/pr/res/736493.html ), в одном том треде вероятность найти ответ будет намного выше нежели в двух тонущих.
Вопрос от нубаАноним13/05/16 Птн 09:31:47#668№742024
Почему наследник приводится к базовому классу неявно, а базовый класс к наследнику - явно? Ведь наследник как бы содержит в себе базовый класс и по идее приведение базового класса к наследнику должно быть неявным. И вообще дайте подробности про приведения. Спасибо.
Была извергнуть крестоблядский стих,
Но распугала робких муз подружка,
Мой рифмы храм внезапно навестив.
О горе мне! Желанием объятый,
Дать бой не в силах женскому теплу,
В надежде, что успею к перекату,
Оставил лиру ржаветь в углу.
Мы предавались ласкам до рассвета,
И я в обьятьях юных сладко спал,
Когда ворвался в сумрак кабинета
Владыка духов, мой отец Баал.
Швыряя за проклятием проклятье,
С шелков атласных он меня стащил,
И прокричал, слюной забрызгав платье:
"ЗАЧЕМ ТЫ ЛГАЛ, ЧТО ТРЕД ПЕРЕКАТИЛ?!!"
От жутких воплей одурев спросонья,
Спасаясь от папаши тумаков,
Смятен и наг, свой срам прикрыв ладонью,
Я выпрыгнул в окно и был таков.
Братишки! Умоляю! Пощадите!
Стихи для сотни шапок напишу,
А нет - меня всем тредом обоссыте,
Но бате впредь не жалуйтесь, прошу...
Старший брат:
Предыдущий:
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов
простреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполне возможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Эти фичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Best practices
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все:
Проектирование
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Кроме того, на ангельском доступны стандарты C++11, C++14, а также последняя версия черновика стандарта C++17.
Тонкости языка
Книги для тех, кто возлюбил кресты всей душой и желает углубиться в детали:
Отдельные аспекты
Читать по необходимости:
и других фич последних стандартов
для разработки многопоточных приложений
остальным частям стандартной библиотеки
язык программирования, чтобы ты мог
программировать, пока программируешь"
в ужас даже исходники boost::MPL
на C++. Для его чтения не нужно знать
мертвые языки, в отличие от этого вашего Кнута
https://goo.gl/yDuQgG (часть 5)
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
https://goo.gl/WIPW9L (ангельская версия)
"sudo aptitude install codelite codelite-plugins"
для установки под *nix
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использовать текстовый редактор в связке с каким-нибудь компилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература:
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Литература:
https://goo.gl/toUDWc (исходники примеров)
https://goo.gl/qpkZFm (книга) +
https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
И еще куча библиотек на любой вкус.
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Предыдущие треды на архиваче
Старые ненумерованные треды
Отдельные Qt-треды