У меня к вам очень простой вопрос. Нахуя нужны поинтеры и референсы, если можно просто использовать pass by reference?
Поинтер хранит адрес. Референс хранит адрес. Поинтер отличается от референса только тем, что его можно инициализировать и переприсваивать.
У переменной, на которую будет ссылаться левый поинтер или референс, уже есть адрес. Нахуя мне нужен ещё один референс, если переменная является референсом на себя же. И нахуя мне нужен поинтер?
>>1230652 Потому что референс должен всегда указывать на валидный кусок данных, что противоречит идее выполнения адресной арифметики с ним. Даже в расте ссылки и указатели - разные типы. Просто указатели считаются небезопасными и их использование ограничено.
>>1230655 >Потому что референс должен всегда указывать на валидный кусок данных, что противоречит идее выполнения адресной арифметики с ним. Почему же противоречит? Скорее наоборот, поинтер может хранить совершенно нерелевантный адрес, что ставит под вопрос целесообразность арифметики над мусорными данными. Если, конечно, я правильно представляю область примерения поинтерной арифметики. Которая для меня ограничивается, перебором массива данных. >>1230658 >объект В каком смысле объект? Насколько я понимаю, поинтер - это тупо 4не обязательнобайта, которые банально хранят адрес.
>>1230660 > Почему же противоречит? Потому что к указателю ты можешь прибавить произвольное число и получаешь абсолютно валидный указатель, который может указывать куда угодно (даже на несуществующий кусок памяти). > Которая для меня ограничивается, перебором массива данных. Для этого указатели (как и арифметика с ними) не нужны совсем. Лично я указательной арифметикой только в embedded пользуюсь и то очень редко.
>>1230655 >Потому что референс должен всегда указывать на валидный кусок данных, что противоречит идее выполнения адресной арифметики с ним. Адресная арифметика тоже определена только для валидных поинтеров (на элементы массива).
>>1230661 >Потому что к указателю ты можешь прибавить произвольное число и получаешь абсолютно валидный указатель, который может указывать куда угодно (даже на несуществующий кусок памяти). Написанное в стандарте тебя неприятно удивит.
>>1230660 >В каком смысле объект? >Насколько я понимаю, поинтер - это тупо 4 (не обязательно) байта, которые банально хранят адрес.
Указатель всегда занимает какое-то место в памяти (зависит от разрядности системы) и там хранит адрес.
Что из себя представляет референс - решает компилятор и стандарт его в этом никак не ограничивает. Поэтому к нему нельзя применять арифметику. Также sizeof(T&) != sizeof(T*), потому что для ссылки отдельные правила.
>>1230674 Мне лень читать эту портянку и выискивать все неоднозначности в ней. Всё равно я указатели почти не использую. Если тебе лень или ты сам не в курсе, то ладно. Пусть это останется тайной.
>>1230677 >Мне лень читать эту портянку Ну тогда сиди тихо под шконкой, не вылазей со всяким > референс должен всегда указывать на валидный кусок данных
Добрый вечер. Мимонуб в треде, прошу подсказать, куда мне идти. Вопрос такой: предстоит что-то отвечать по теме Network Programming в C++. До этого читал Страуструпа, начал Коплиена и так, пару курсов прошел. Нигде о нетворке ни полслова. Что мне нужно будет знать и где это можно узнать? Шапку смотрел, гугл гуглил, нашел только пикрелейтед. Что скажете, хорошая книга, может лучше с чего другого начать?
>>1230683 А в чём ценность этих знаний? У тебя хоть зарплата выше средней?
Ты не пойми меня неправильно, на самом деле у меня действительно баттхёрт из-за того что я не знаю все обстоятельство при которых код на C++ выдаст мне UB. Это так ужасно. На самом деле ведь тебе меня жаль и поэтому ты пытаешься пополнить меня этим знанием, чтобы сделать меня сильнее. Ты как сенсей в этих старых фильмах про боевые искусства.
>>1230655 >Потому что референс должен всегда указывать на валидный кусок данных Та не, можно висячую ссылку создать и по ней зайти в невалидный кусок данных. int& f() { int i = 12; return i; } int& ref = f(); ref += 1;
>>1230688 >А в чём ценность этих знаний? У тебя хоть зарплата выше средней? > Он C++ в каком-нибудь вузике преподаёт или в школе учителем информатики трудится. Зарплаты у них сам знаешь... Вот и бесится.
>>1230688 Да, отрицание — это распространённая психзащита в наше время.
> У тебя хоть зарплата выше средней? Видимо, этот вопрос должен намекать, что твоя-то выше (несмотря на то, что ты не можешь читать стандарт из-за незнания языка), а значит ты прав. Но само твоё пребывание на сайте анимешников и битардов (даже спец. разделы тут на соответствующем уровне) делает смешными попытки произвести подобное впечатление.
>>1230692 >Он C++ в каком-нибудь вузике преподаёт или в школе учителем информатики трудится. Семён не заметен) Как раз в вузиках преподают, что к указателям можно прибавлять произвольное число и при этом значение указателя увеличится на sizeof указуемого типа умножить на прибавляемое число (или что-то в этом духе).
>>1230695 > Да, отрицание — это распространённая психзащита в наше время. Прежде чем использовать слова неплохо бы узнать их значение. Или это такая самоирония и ты сделал вид, что отрицаешь мою исповедь о том, что я действительно не знаю всех случаев когда C++ выдаст ub? > Семён не заметен А вот это уже паранойя. Осторожно, а то дальше будешь вместо собеседников видеть одних врагов.
>>1230695 >к указателям можно прибавлять произвольное число и при этом значение указателя увеличится на sizeof указуемого типа умножить на прибавляемое число (или что-то в этом духе) А можно для дремучих, что здесь не так?
>>1230735 Тебе не понять всю глубину C++ если попытаться объяснить это кратко и простыми словами. Иди читай стандарт от корки до корки и пока не прочтёшь не возвращайся.
>>1230740>>1230738 Вот не готов еще читать стандарт, понимаешь? Видимо, это какой-то высший уровень, когда все книги пройдены и ты уже language lawyer, Я еще далеко до этого. Мне нужно что-то типа брошюры Network Programming in C++ for dummies, можешь мне что-то такое порекомендовать?
>>1230745 Да вроде всё то же самое. В с++11 потоки добавили, а про сети пока что только разговоры идут - мол вроде и надо, но как-то не до этого. Сам я не в теме, но вроде на голых плюсах только мазохисты пишут, а остальные используют сторонние либы типа boost.asio.
Можно сказать, что наследование — это в каком-то смысле агрегация? Ну по сути-то класс наследник агрегирует в себе экземляр суперкласса. Конструктор и деструктор суперкласса вызываются и отрабатывают между началом и концом работы конструкторов и деструкторов производного. Всё так?
Аноны, можете какие библы посоветовать для работы с изображениями? А если точнее, хочу захватить часть изображения указав фрагмент, и отправить его в отдельную переменную.
>>1230747 Ну тут такое. Если у тебя базовый класс имеет хотя бы один виртуальный метод, то у него не может быть экземпляра. Если он читсто виртуальный, то у него нет ни данных ни реализации методов и его наследование не может быть агрегированием.
Если у тебя класс является агрегацией/композицией нескольких других, то можно же сказать, что он, в результате, наследует их свойства и поведение? Но, так же никто не говорит.
Во всех этих случаях речь идёт о повторном использовании кода, но, технически это делается по-разному, и терминология это отражает.
>>1230767 Ну да, только он же может агрегированное добро скрыть за интерфейсом. Хотя может и унаследованный метод перекрыть куда-то в защищенные уровни — и прощай типовый полиморфизм, хотя наследование, да, на месте кагбэ.
Блжад, почему же сложно всё так! А бывает какая-то условно библия ООП, где это с самых базовых аксиом разжевывается? Что-то похожее мне попадалось в первых главах OOD&A, но там потом стремительно унеслось в дебри. А так чтобы подробная экскурсия по азам, чтобы «детки, вот так наследование не делайте, пнятненько» такое бывает вообще?
>>1230773 Конечно существует. Называется практика. Пара написанных программ под 3 к строк и вопросы про ООП исчезнут. Будешь так сказать на кончиках мыслей чувствовать какой подход правильный в ситуации.
>>1230751 Есть вообще простой вариант: открываешь потоком файл, считываешь заголовок файла, потом заголовок пикчи, а потом в двумерный массив (вектор векторов) читаешь данные пикчи. И работай, копируй нужный тебе кусок пикчи. Косяк в том, что .bmp, например, хранится напрямую, а тот же .jpeg - уже не очень, то есть нужно либо курить организацию нужного формата, либо перегонять все в бмп.
>>1230763 отмудохают, потому что они рассматриваются как альтернатива друг другу.
С позиции времени жизни объектов: При наследовании объект базового класса будет создан и разрушен одновременно с объектом наследника. При агрегации агрегируемый объект может быть создан и разрушен вне агрегата, который хранит лишь указатель на него.
Также при наследовании тип объекта определяет его поведение. При агрегировании - нет. Например есть класс A и его наследники B, C. Если мы создаём наследника D от B, то он всегда будет вести себя как B. Если же D агрегат с конструктором D(A*), то он может вести себя как любой наследник A.
>>1230740 > Скажи, что по сетевому-то читать. В стандартной библиотеке C++ сетей как бы пока нет (обещают сделать к 2023 году). Так что читать надо будет литературу по конкретным библиотекам, например Boost.Asio.
>>1230747 >Можно сказать, что наследование — это в каком-то смысле агрегация? Не публичное — да.
>>1230761 >Никакой отдельный экземпляр суперкласса не создаётся Если при аггрегации у меня будет data member "по значению", то отдельный экземпляр тоже не будет создаваться, а будет subobject-ом.
Аноны, выручайте. В проекте юзается статически сбилженая Qt, однако встала необходимость заюзать QWebEngineView из QtWebEngine модуля, для которого статическая сборка не поддерживается. Можно ли как-то заюзать только dll-ки QtWebEngine-а так, чтобы не тянуть либы других модулей типа qtcore, qtnetwork и тд? они же блять статически сбилженые
Или может кто знает либы для отображения веб контента? Например, так как QtWebEngine основан на хромиуме, можно сделать свой виджет используя Chromium Embedded Framework (CEF). Но помимо овер 20Гб сурсов (это с самим хромиумом), его хуй скомпилишь. Плюс какое-то уебанское API или это я лох
Интересно, кто-нибудь здесь работает на плюсах? Сам имею желание вкатиться в computer vision, а там в основном кресты да питоны. Или это только для сверхлюдей, кресты обычный человек осилить не может?
>>1231175 То, что кресты пиздец сложные - это миф. Они безусловно сложнее, чем динамикопараша, но божественное окружение (ты же не дебил копаться каким-нить code::blocks) и компилятор сильно облегчают задачу.
Для типичного вкатывальщика с сосача даже граблями огород прорыхлить неподьемная задача, т.к. он ленивый и тупой. Вот и пишут, что СЛОЖНА.
>>1231096 >GCC >на винду Ну ёбанарот! У тебя на ПеКа не найдётся 20Гб на няшного пингвина? Покопаешься в консольке, поебёшся с Make'ом, поймёшь как эти самые программы собираются. А IDE это всё от лукавого, они скрывают от тебя процесс рождения программы. Поставь себе какойнибудь ебучий калькулятор. В лине можно преспокойнейше без всяких там ide кодить, среда оче дружественная для погромистов. Только читни для начала справочник по башу и какие виды пакетных манагеров бывают.
>>1231361 У нас в компании есть выделенный человек, который целыми днями занимается обслуживанием нашей билд системы - тонны CMake файлов и всяких скриптов.
Если у тебя дома под столом не сидит такой человек, то программировать под линуксом - боль и унижение.
Ананасы, такой вопрос. Есть текстовый файл и в нём записаны пути к директориям с:\mypath c:\mypath2 Пробовал через system менять директорию, через chdir, но ничего не срабатывало. Почему так может быть?
>>1231392 >Посылает нахуй пользователей единственной адекватной ОС >Сидит в треде языка, чей предок ( Си) был создан, как раз для создания прародителя этой ОС ( Unix ). Боже какая же ты мудаебина. Вангую, ты ебаное днище максимум способное осилить формошлепство на JS.
>>1231611 Вот точно причину не назову, но есть предположение, что слэши неправильные - когда парсишь текст, используй класс path из <filesystem> - он сам делает нужные слэши, а потом уже делай system("cd "s.append(объект класса path.string())) - должно будет сработать
>>1231621 > <filesystem> Почему-то гцц 8.1.0 отказался даже собрать программу с просто подключенным заголовком.
> но есть предположение, что слэши неправильные Даже просто код system( "cd c:\\" ) тоже не срабатывает. Ладно, с++ идёт нахуй. Буду пробовать другими средствами.
>>1231772 > Он в семнадцатом стандарте только есть такой Я в курсе. Но я как-то раз ставил гцц 7 версии и там пример какой-то работал правда std::experimental::filesystem.
> А если вручную передавать в качестве пути, тоже не работает? В другую сторону слэш пробовал? Уже по всякому пробовал. Вообще никак. Попробовал даже вот так myprog тут просто вывод пути к директории | xargs cd Но тоже не сработало.
>>1231652 >Даже просто код system( "cd c:\\" ) тоже не срабатывает. В каком смысле "не срабатывает"? `system` порождает шелл и выполняет в нём команду. На твоей программа изменение директории в другом процессе, естественно, никак не сказывается.
>>1231813 Потому что system ждёт завершения порождённого им подпроцесса, а подпроцесс при pause не завершается. Как можно не понимать таких банальных вещей?
>>1231989 Позиция вроде на мидла или на сеньора я даже не посмотрел если честно. Спрашивали много чего, начиная от типовых вопросов по С++, контейнеров, алгоритмов, многопоточности, и т.п. заканчивая задачками на алгоритмы и абстрактное мышление. Самое забавное, что я нихуя не готовился даже, т.к. приехала тян и мы ебались 3 дня подряд.
>>1232005 Я боюсь, что они тоже могут тут сидеть и спалят меня, если я расскажу задачи. Ну задачки такие как бы, про байтоебство, про алгоритмы, про сложности алгоритмов, про структуры данных, типа как что и где использовать, давали задачи, которые надо было решить с их помощью. Давали задачи на оптимизацию алгоритмов. Благо я задрот в этой теме и в байтоебстве тоже, не зря байтоебил на си долгое время и ковырял разные алгоритмы. По плюсам я не так хорош, но походив на пару собесов я выучил всякие каверзные вопросы. Ну мне повезло на вопросы на самом деле, я хз, но я откуда-то реально в этих вопросах и задачах хорошо шарил.
>>1232036 Помнится как-то устроился в крупную международную компанию на мидла. Прошёл перед этим 4 этапа собеса, растянувшегося где-то на неделю. А в итоге работа оказалась таким говнищщем, что я там и года не проработал. Так что сильно не обольщайся.
Пацы, хочу начать изучать C++, может кто-то из вас сможет меня напрпвить по верному пути, с чего начинать, а что возможно и не стоит. Это такая интересная тема, и я очень хочу начать изучать ее, но к примеру на курсы идти, я хз.
>>1232144 Потому что выучил пыху и жс, и сразу можешь что-то делать. А плюсы без предметной области нинужны. Ну сам подумай - сайт ты не сделаешь, парсер не сделаешь, брутфорс не сделаешь.
>>1230522 (OP) объясните мне пожалуйста, почему sizeof(Holder) равен 1 байту, а sizeof(DerivedHolder) равен 2 байтам, ведь оба этих класса содержат внутри только один класс?
>>1232370 Потому что в крестах наследование (не виртуальное) работает как композиция структур. Сначала идут данные базовых классов, потом данные наследника.
Например пикрил, struct A { char c; }; struct B { int x; }; struct C: A, B { ... };
На твоем пике в DerivedHolder один байт занимает пустой базовый класс и один байт поле е. DoubleDerived занимает один байт, т.к. два пустых базовых класса объединяются, как там и написано.
>>1232036 не ссы, братюнь, давай сразу, сколько примерно з.п. о чем спрашивали, ведь один хуй если знаний в голове не было то и не прибавится хоть здесь все ответы прочитал, какие алгоритмы задрачивал, слушай, скинь мне задачки на [email protected], а я тебе свои скину, был на двух собесах, вот охуенно будет, пообщаемся за си++
>>1232399 При этом забавно выглядит каст указателей. Чтобы привести указатель на С к указателю на В его нужно сместить. Все это компилятор делает сам, так что можно не заебываться на этот счет. С^ с = ...; A^ a = static_cast<A^>(c); B^ b = static_cast<B^>(c); // (int)a != (int)b;
С виртуальным наследованием, конечно, компилятору приходится еще больше дрочить вприсядку, потому что появляются таблицы виртуальных методов, а также смещения указателей иногда неизвестны статически.
>>1232410 т.е. это все для того что если мы создадим указатель на пустой класс, он должен указывать на что-то в памяти, а не хуй знает куда? Четкая книжка или откуда эти сакральные знания?
>>1232418 Чтобы разные объекты имели разные адреса в памяти. Размер же равен 1 байту, потому что байт это минимальный независимо адресуемый набор данных (для большинства систем).
Вроде в стандарте так написано. Хотя я уже точно не помню.
>>1232398 Несмотря на то что класс пустой, ты все еще можешь создать его объект. И у этого объекта обязан быть адрес в памяти и чтобы адрес оставался валидным хоть какое-то место в памяти этот объект занимать должен.
>>1232370 > объясните мне пожалуйста, почему sizeof(Holder) равен 1 байту An object has nonzero size if it is not a potentially-overlapping subobject, or is not of class type, or is of a class type with virtual member functions or virtual base classes, or has subobjects of nonzero size or bit-fields of nonzero length. Otherwise, if the object is a base class subobject of a standard-layout class type with no non-static data members, it has zero size. Otherwise, the circumstances under which the object has zero size are implementation-defined. http://eel.is/c++draft/basic.memobj#intro.object-8
Применяешь это правило 2 раза. Один раз к мемберу Holder::e, который has nonzero size согласно первому пункту (определение potentially-overlapping subobject http://eel.is/c++draft/basic.memobj#def:potentially-overlapping_subobject: A potentially-overlapping subobject is either: a base class subobject, or a non-static data member declared with the no_unique_address attribute ([dcl.attr.nouniqueaddr]). под которое мембер не попадает) Потом к классу Holder: у него nonzero size по четвёртому пункту.
> sizeof(DerivedHolder) равен 2 байтам Его base class subobject не должен иметь zero size, т.к. у отнаследовавшегося класса есть non-static data member. Implementation определила, что у него должен быть nonzero size. И определила его равным единице. Итого, у DerivedHorlder 2 (неперекрывающихся) subobject-а размера 1. Поэтому он должен иметь размер минимум 2.
>>1232578 >> sizeof(DerivedHolder) равен 2 байтам >Его base class subobject не должен иметь zero size, т.к. у отнаследовавшегося класса есть non-static data member. >Implementation определила, что у него должен быть nonzero size. И определила его равным единице. Итого, у DerivedHorlder 2 (неперекрывающихся) subobject-а размера 1. Поэтому он должен иметь размер минимум 2.
Тут я наврал, конечно же. Объяснение неверное.
base class subobject имеет размер 0, т.к. > Otherwise, if the object is a base class subobject of a standard-layout class type with no non-static data members, it has zero size.
Но он не может иметь тот же адрес, что и non-static data member того же типа, т.к.: Two objects with overlapping lifetimes that are not bit-fields may have the same address if one is nested within the other, or if at least one is a subobject of zero size and they are of different types; otherwise, they have distinct addresses and occupy disjoint bytes of storage.
Итого, хотя base class subobject у DerivedHolder нулевого размера, но т.к. первый дата мембер имеет тот же тип, что и базовый класс, то между base class subobject и мембером есть ненулевой padding. Отсюда размер 2 байта: padding + 1 байт от размера non-static data member.
>>1232408 а что конкретно скрыто за "привести указатель" ? вот есть указатель и есть его адрес после A a = static_cast(A)C ведь адрес его не измениться, так? Я так понимаю при вызове метода в метод передается адрес объекта(this) и соответственно доступ к данным организован через смещение от этого this. Как это в памяти выглядит?
>>1232254 >сайт ты не сделаешь - >парсер не сделаешь - >брутфорс не сделаешь - Причем на плюсиках ты можешь не только веб, но и железки брутфорсить, каково, а?
Ясно что плюсы не для этого и перечисленные тобой вещи на них не делают. Но это не значит будто сделать их нельзя. Просто учебного материала скажем будет мало, а на пыхе под аналогичные задачи очень много всяких туторов-гайдов.
>>1233033 Ну и нахуй тебе перемножать матрицы на си? Причем матрицы на си ты можешь перемножить и в питоне. Си надо изучить, написать пару десятков лаба.с, запилить какой-нибудь метод Гаусса, сортировки, вектор и дерево. А дальше надо нормальный язык брать.
>>1233051 >Надо написать софт с жёсткими требованиями по производительности и ресурсам. Ок, возьму java/python/c#, потому что это нормальные языки для серьёзных задач.
>>1233061 На определенном масштабе развертки софта выгоднее нанять целый отдел крестобогов и все переписать с джавапараши на кресты. Т.к. это будет меньше по затратам, чем затраты на железо.
>>1233056 Блять, а кто тебе мешает выч. методы и алгоритмы на питоне писать? Для этого тебе си нужен? Я всегда думал его в вузах учат на 1 курсе, чтобы объяснить, что такое ячейка памяти, указатель, стек, куча, зачем мусор собирать и прочее машинозависимое говнецо. Алгоритмы можно на чем угодно изучать.
>>1233070 >Блять, а кто тебе мешает выч. методы и алгоритмы на питоне писать? Святая толстота (или тупость?). Ну возьми ты тот же OpenCV и посмотри для чего там используется c++, java и python. Сразу поймёшь с каким языком место у параши, когда дело касается вычислений.
>>1233061 Боже ебаный ты шизойд. Я посмотрю на тебя макака тупая, как ты напишешь какую-нибудь real-time хуйню на своей ЖАВЕ или ПИТУХОНЕ, с недетерменированными задержками со всякими их GC и прочей хуитой.
>>1233079 Из питона и джавы можно вызвать программу на си. Например можно разделить проект на две части - та, которая не треубет производителности будет написана на джаве питоне, а производтиелньная на си крестах
>>1233080 Ну если уж на то пошло, то тогда надо Fortran брать. Он как раз для математиков был спроектирован. Там, кстати, многое заточено под работу с матрицами и векторами.
>>1233083 И нахуя этот гемор нужен? Джава - это язык для других задач. Если ты какой-то неосилятор, то действительно можешь юзать NumPy и хуячить на питончике, те части, которые не требуют производительности. Так кстати и делают многие.
>>1233087 Да, я писал вычметоды на плюсах в коммерческом проекте. А что касается войтивойти, то тут уж кто на что способен и куда вкатывается. На чём ты будешь вкатываться в те же embedded systems?
>>1233061 Это прокатывает, пока на одной машине помещается. А они знаешь ли не резиновые. Поставить несколько машин рядом? Ок, добро пожаловать в мир распределенных транзакций. Правда думаешь это легче, чем на C++ переписать?
>>1230856 Пробую поставить этот boost. Вначале он доёбывал какими-то придирками к аргументу --prefix="C:/Program Files/boost/installed" (Я пробовал писать и с одинарными кавычками и с двойными и с обычным слешем и с обратным и с двойным обратным — результат один ошибка и несколько строк с моим путем, где каждый раз слеши в разную сторону) психанул и без аргументов вызвал этот бутстрап, а потом сразу ./b2 install
Вот теперь то, что на картинке. При чем уже очень давно (пара часов, наверное) и конца и края нет. Я что-то сделал не так?
Внутри MVS при подключении в свойствах проекта автозаполнятор инклюдов видит boost, предлагает напечатать #include <boost/asio.hpp>, но потом не собирается и требует какую-то кучу букв.lib
Пример из бустовского туториала, где предлагают #include <boost/lambda/lambda.hpp> у меня работал еще до запуска скрипта с установкой и сейчас работает. Из строки собрать не выходит, не видно путей.
Несколько лет назад я писал TCP/IP сервер на си, затем как-то проебал эту парашу сетевую, не крутился в этих областях, а теперь куда ни плюнь все на буст asio ебенят, а на сях ща вообще чего-нибудь пишут под сеть или это уже навроде ассемблера?
>>1233124 Дописать в свойствах проекта путь бустовским библиотекам. В C:/Program Files/boost/ уточни, где они конкретно лежат. Если буст собран динамически, то еще и в переменную PATH добавить путь к его dll (или ручками скопировать в папочку, куда итоговый исполняемый бинарник твоего проекта выкладывается).
А вообще почитать нужно, как приложение компилируется и линкуется. Именно как происходит запуск cl.exe и link.exe. И с какими параметрами. А то привыкнут в этой вашей винде мышкой тыкать, а как чуть что по другому, так в лужу садятся))
>>1233150 > А то привыкнут в этой вашей винде мышкой тыкать, а как чуть что по другому, так в лужу садятся)) Если на винде, то можно всё это сделать (почти) двумя тычками мышки. Буст элементарно ставится через vcpkg и его можно поставить с глобальной видимостью, что значит все его хедеры автоматом станут доступны во всех проектах вижуал студии.
>>1233156 Ты о чем? Я разве предлагал ручками в консольке набирать команды по-пол экрана? Иметь представление о том, что происходит под капотом один фиг нужно. Хотя бы потому, что мир на VS и Windows не заканчивается. >>1233153 Вариант. Еще и Nuget для этого есть. Лично я использую Conan с автозапуском из CMake, ибо кросплатформеность нужна.
>>1233150 Я очень проебываюсь по этой теме и вот сейчас хочу наверстать. Собственно, поэтому и буст через консольку запустил ставиться.
Знаю, что обычно пишу в Makefile что-то типа all: отступ табуляцииgcc -o test test.c или для ++g++ -std=c++11 -o plus plus.cpp А потом могу запускать прямо в MinGW, набрав test или plus соответственно. С хидерами проблем пока что не возникало, но это были максимум <algorithm> или что-то еще из STL, как он их находит, не знаю. Хочу сделать, чтобы #include <boost/asio.hpp> при таком подходе тоже нормально подтягивалось и не нужно было писать в мейкфайл еще кучу длинных строк с путями к бусту. Это вообще возможно?
И почему он до сих пор мне показывает черный экран с надписями, он реально так долго ставится или пора отменять установку? (Он вообще на винду ставится или нет?)
>>1233241 Заранее прошу прощения, если вопрос мой дурацкий. Читал FAQ и Tutorial заметки от буста и нихрена из них не понял. То, что он выдавал по запросу --показать-библы вообще не содержало пункта asio, да и на сайте там его в списке нет. Если есть какой-то нормальный материал с ответами на мои вопросы, ткните в него носом.
>>1233241 >Он вообще на винду ставится или нет? Ставиться, ставиться. Разве что под WinXP не все части собираются. >он реально так долго ставится У него дофига заголовочных файлов. Если винт тормозной, то не удивительно.
>>1233255 Спасибо, собралось VCPKG. Оно советует буквально следующее >simply need to add it onto your CMake command line as -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake А куда это — не понимаю. У меня в папке с CMake файлов нет, в подпапке bin есть Cmake.exe, Cmake-gui.exe, cpack.exe, ctest.exe и cmcdelps.exe Все кроме гуя запускаются на долю секунды. В гуе копировать эту строку особо некуда. (В configure попробовал, заругало) Что это он хочет?
>>1233289 Таки-да, 10246 какой-то херни установило, когда Я Ctrl+C нажал, 102 не успело установить. Брюс Уиллис, ёба. Пофиг, удалил.
>>1233320 О, господи, нахера? Я зазубрил 1.5 команды написания CMakefile как раз чтобы ни с чем не разбираться да, зря, видимо, получается, vcpkg мне что-то там на тему симейка предлагает только на случай, если мне захочется в симейке делать, на остальные случаи это не повлияет?
А зачем мне вообще может понадобиться симейк в MVS? Я понимаю, вместо MVS: написал себе эти все CMakeLists.txt, запустил cmake -H. -Bbuild потом им же построил типа как cmake --build build и сидишь довольный, а в среде он нахрен сдался, если среда сама всё построит?
>>1233321 >А зачем мне вообще может понадобиться симейк в MVS? Ну типа писать портируемый проект в mvs со всеми удобствами ide. Под невиндой ты его открываешь в каком-нибудь QtCreator и также уютненько продолжаешь писать.
>>1233327 Конечно сделал, сейчас результаты такие же, как в самом начале: autocomplete видит boost/asio.hpp, но собираться проект с ним не хочет. Если поменять на какой-то boost/regex.hpp как в примере Getting Started, то всё нормально собирается. В чём дело? Из командной строки тоже не видит, может чего дописать надо или еще доинсталлировать?
>>1233336 Пересоздал новый проект, та же херня. 1> ... error MSB3030: не удалось скопировать файл ...\boost_system-vc141-mt-gd-x32-1_67.dll - файл не найден. 1>Сборка проекта "Boost — still does not work.vcxproj" завершена с ошибкой.
Я уже психанул и стал копировать вручную эту сраную дллку, нашел ее в папках VCPKG, скопировал, захожу туда, где MVS ее „не видит“ — и что же оказывается? Да она там есть и так. boost_system-vc141-mt-gd-x32-1_67.dll
>>1233338 Не знаю, что ты делаешь, но проверь разрядность и debug/release, а также попробуй прописать путь к используемой dll через настройки проекта. Может она тянет за собой соседей и её просто так нельзя копировать.
>>1233341 Спасибо за идею, проверил. Подобавлял везде папку с vcpkg (корень ведь, правильно?). Но не помогло ни хрена. Вручную покопировал это boost_system-vc141-mt-gd-x32-1_67.dll во все внутренние папки решения, похуй, не видит в упор. В файлы ресурсов в солюшнэкспройлере добавил уже зачем-то, один и тот же результат.
>>1233345 Пути к dll сразу для всех студийных проектов указываются в project->properties->vc++ directories->Library Directories. Для отдельных проектов Linker/Librarian->general->additioanl library directories. Cам путь можно вбить туда абсолютный (ну типа c:\vcpkg\ или где там dll лежит). Если заработает, то потом запилишь константы и через $() переделаешь.
>>1233345 Да ладно тебе, ты ж только начал. Впереди не менее увлекательные задачи портирования и развёртки твоей laba2.cxx.
Кстати, в крупных конторах обычно есть макаки-инструментальщики, которые отдельно и целенаправленно ебутся со сборкой, портированием и развёрткой проектов. Ибо даже бывалые красноглазики не в состоянии с этим справиться.
>>1233350 ох бля, писал программу две недели и еще две недели писал под нее инсталлятор, проверяя ее на различном оборудовании, пиздец, из ldd просто не вылезал, весь по уши в bash и pituhon, ебля нон стопом, рили хард!
>>1233615 >Ребят, где практики набраться , типо как стажером, но даже не за еду, ради скиллов и информации только бы. Сам студент. > всякие крупные компании предлагают позиции именно стажёров на неполную занятость. либо они организуют различные курсы для студентов на лето.
>>1233641 А без задания имени в конструкторе? С простой переменной можно это через макросы сделать, #define GET_VARIABLE_NAME(Variable) (#Variable) но как с указателем this я не знаю.
>>1233644 Лол, а что ты хотел? Чтоб компилятор каждому инстансу класса придумывал своё имя? И фамилию (от базовых классов), и историю с неожиданной развязкой: Светила полная луна, итератор инвалидировался после реаллокации контейнера...
Используй cout << this, указатель у каждого уникальный
>>1233347 Всё проверил, везде абсолютный путь на папку vcpkg. Проблема в другом: когда нажимаю собрать проект, в папочку с Debug подтягивается boost_system-vc141-mt-gd-x32-1_67.dll, но сам линковщик при этом ничего не собирает и кричит, что boost_system-vc141-mt-gd-x32-1_67.dll в этой самой папке не найден. В чем проблема? в MVS? в VCPKG? в Boost? в прокладке между табуреткой и компом?
Собеседовался щас по скайпу в яндекс, пиздец я проебался на задаче найти медиану из 3х чисел, которые могут идти в любом порядке и повторяться. аля : int median(int a, int b, int c) { // ... }
Я короче сначала сделал, через тупой перебор всех возможных комбинаций типа #define med(a,b,c) if(a <= b && b <= c) return b;
med(a,b,c) med(c,b,a) med(b,c,a) med(a,c,b) ...
Он попросил оптимизировать, я написал половину а дальше затупил. Короче сидел наверное час решал эту хуйню, он даже добавил дополнительное время мне, но полностью не решил.
Еще был вопрос каково будет время вставки N элементов в вектор через push_back Я ответил n log(n), т.к n элементов и т.к. вектор увеличивается в 2 раза если не хватает места, то получается вроде log n, так что общая сложность n log n. Но я не уверен.
>>1233666 На задаче проебался, зато в треде трипл выбил.
По медиане я только что такую хуйню придумал, лень гуглить нормальное решение: int median(int a, int b, int c) { return (a + b + c) - min(a, min(b, c)) - max(a, max(a, b)); }
Вставка в конец вектора в среднем О(1). Хотя размер реаллокаций растет экспоненциально, они происходят во столько же раз реже.
>>1233679 я так и не понял, что такое медиана. Но про вектор худшее время вставки это N, т.к. в зависимости от выбранного аллокатора - реаллокация может идти каждый раз. О - худшее время
Аноны, помоги, у меня есть массива в байтах и есть размер пакета в байтах, сколько нужно пакетов что бы уместить туда массив я считаю вот так > if (!body.size() % packet_length ) { >packets_num = body.size()/packet_size; >} >else { > packets_num = body.size()/packet_size + 1; >} Бля, в общем мне надо одно число на другое поделить и если результат не ноль округлить его до большего. т.е. если пакет 3 байта, а массив 20, делим 20/3 и получаем 7 пакетов
>>1233682 С помощью достаточно мудацкого аллокатора можно и O(N) получить и мамку твою выебать, кто ж спорит. Вопрос-то наверно был не про параллельные вселенные, а про стандартный вектор. На cppreference для push_back написано amortized constant.
помню меня спросили прям по телефону про размер вектора при аллокации или размер аллокатора вектора, в общем я до сих пор ответа не знаю (хотя размер вектора вроде 0) кто такой этот аллокатор?
>>1233799 Отрицательные степенью двойки быть не могут, так что можно заменить v!=0 на v>0. А без ынтрынсыков решение выглядит так: bool isPow2(int v) { return v > 0 && (v & (v - 1)) == 0; }
>>1233718 У меня округление с шагом в большую сторону, если рамерности вот уже хватет впритык все равно делается +1 шаг. Чтоб пофиксить въеби проверку размера буфера под размер пакетов.
>>1233666 Люблю задачки. Медиана: std::vector<int> v{a,b,c}; std::stable_sort(v.begin(), v.end()); return v[1]; // это добро работает O(nlogn) по сортировке (stable для предсказуемого худшего случая)
Время вставки: амортизированная сложность бэкинсертера O(1), в худшем случае O(n), от тебя скорее всего ждали ответ O(n), т. е. сложность вставки кол-во элементов, ясен фалос берем амортизированную. Про мультипликативную реаллокацию ты был прав, хотя оптимально и не ровно вдвое, но это очень близко и на практическом уровне точнее значение не нужно. (Положим, пи равно трём. Инженерная поговорка)
>>1233684 Почему переполнение? Разве внутри выражения в скобках эта байда не приведется к unsigned --> unsigned long --> long long --> unsigned long long по неявному приведению?
Аноны, стоит ли K&R изучить что бы ловчей по си++ собесы проходить, глупо конечно звучит, но на сях программил 10 лет назад где-то полгода, в то время даже особой разницы между си и си++ не видел.
>>1233860 обоснуй за округление в большую сторону? Кроме того вообще формула неверное, так-то получается по твоему алгоритму 15. Я вот такую хуету накодил пока [code] auto res = std::div(mBody.size(), PACKET_SIZE); int packets_number = res.rem ? res.quot + 1 : res.quot; [/code]
>>1233909 что бы мудаки-говноеды за его размер не вышли, в векторе есть проверка за выход за индекс, а в массиве нет. Смысл программирования - не задумываться, что бы не тратить время на такую хуйню, человек должен везде вектор на автомате использовать, за исключением байтоебщины и прочего казуала. Чем меньше мозг хуйней нагружаешь тем лучше.
>>1234099 >Смысл программирования - не задумываться, что бы не тратить время на такую хуйню, человек должен везде вектор на автомате использовать, за исключением байтоебщины и прочего казуала. Чем меньше мозг хуйней нагружаешь тем лучше.
Многие узнавшие понятие "преждевременная оптимизация" не знают/забывают, что есть понятие "преждевременная пессимизация".
Динамическое распределение памяти вектором это преждевременная пессимизация.
Кстати, ты узнавал, можно ли функции median кидать исключения? Вектор может кидать исключения. Так что ты, как ананас с UB >>1233679 , нарушаешь контракты своим решением с вектором.
>>1234118 я наверное другой анон, ну я свое мнение высказал т.к. тут критерии не указаны, то оно тоже верно, если в контексте задачи, собеседующий может порадоваться.
>>1234150 Да-да, вот про это всё говно. Что об этом нужно знать приличному программеру и где можно прочесть джентльменский минимум в максимально сжатом виде? Я хочу самую общую картину схватить, совсем незнаком с вопросом.
>>1234144 вот тебя и пидорнули, т.к. ты даже тут понять не можешь, что найти медиану означает написать программу где ты уже все исключительные ситуации предусмотрел
>>1233679 Да решением с мин макс функциями не плохое, но я нашел получше решение через сортировочные сети, странно, что я не додумался об этом на собесе, но тот долбоеб меня сбил с толку, я сразу сказал типа отсортировать и выбрать 2-е, он начал типа без сортировки и т.п, хотя по сути это в любом случае сортировка.
У меня вышло так:
void cmp_swap(int& a, int& b) { if(a > b) { int t = a; a = b; b = t; } }
int median(int& a, int& b, int& c) { cmp_swap(a,b); cmp_swap(a,c); cmp_swap(b,c);
return b; }
>Хотя размер реаллокаций растет экспоненциально, они происходят во столько же раз реже. Ну да по идее получается log2(n) реалокейтов, поэтмоу общая сложность n log n.
>>1233900 Бля, из всех предложенных тут вариантов, твой самый ущербный. Ты представляешь на сколько это будет медленно работать?
>>1234174 Так а это что, не веб? >>1234202 Я могу лучше: то же самое, только с forward_list и еще в шаблон обернуть, добавить там проверок всяких на is_integral, проверить отдельно лидирующий ноль, можно еще шизонуться и написать многоэтажный свич или иф, можно стать воздушным асом, можно Можно стать воздушной планетой. И будешь уверен, что эту планету примут по учебнику. Значит, на пользу физики пойдет одна планета. Величина — оторванная в область медианы — дает свои колебания на всю медиану.
>>1234218 >Так твое возвращает значение, а мое меняет. Третий свап не нужен. Первые два записывают в a минимальный элемент. Значит медиана это минимум из b и c.
>>1233666 Вот вам ответ: return std::max(std::min(a,b), std::min(a,b)) При желании max и min поменять местами. Вообще же задача простая, кто хочет посложнее — возвращайте не медиану, а моду
Чуваки, что нужно знать, чтобы попасть на стажировку куда-нибудь? А то я читаю вот такую хуйню: https://career.ru/vacancy/25924198 >Опыт объектно-ориентированного программирования А придешь, окажется, что надо иметь опыт минимум 10 коммерческих проектов, гитхаб с >1000 фоловеров, написать по памяти реализацию вектора а стл, иметь мягкий анус и глубокую глотку. Что точно надо иметь в портфолио?
>>1234262 Так там же на 1С придётся "программировать". Что касается опыта для стажёра - обычно достаточно рассказать про курсовую или лабу в которой ты использовал ооп. Потом тебя поспрашивают про основы языка и дадут задачку на смекалку. Всякую еботень типа написания своего sqrt или потокобезопасного контейнера с тебя не спросят.
тупой вопрос наверное, но как получается что используя стандартную библиотеку мы в начале своего цпп файла пишем инклуд необходимый h файл, в котором по идее содержатся только объявления, компилируем свой цпп, запускаем экзешник и все работает? откуда прога знает определения используемых функций, переменных из стандартной библиотеки, если мы скомпилировали свой цпп и препроцессор только подставил в цппшку из h файла объявления?
>>1234553 Нет, все равно не работает. Самое лучшее решение(оно не работает при 1 1 2 и других подобных сочетаниях )это if(a < b) swap(a,b); return std::min(a, std::max(b,c));
>>1234561 >откуда прога знает определения используемых функций Стандартные библиотеки по умолчанию линкуются. Можешь отключить флагами как libstdc++, так и libc.
>>1230522 (OP) >Эта книга предназначена для тех. кто еще никогда не программировал первая страница книги Страуструпа, а уже разочарование Двач, если я знаю си и питон, то какую книгу мне читать ? В шапке такого нет вроде практизы читать нет смысла, так как ц++ довольно сильно отличается от питона и си, но читать что такое переменная мне не оч хочется
>>1234485 Я знаю, что ошибка, просто лень было допиливать. Проверяет на 2, т.к. из из набора 1 2 и 1 2 3, должна быть 2ка на выходе. надо пофиксить, чтоб из набора 1 была единица.
Сегодня проходил собес в яндекс, обосрался на элементарнейшем вопросе про указатель и стек, хотя ответ знал, бес нашел на меня. Посоветуйте литры по указателям, чтобы идеально все аспекты понимать.
Аноны. Есть буфер с путем винды "C:\some.exe" Бывает что там и дохуя слешей. Скармливаю этот путь WinExec. Он ничего не делает. Методом проб и ошибок я установил, что проблема в том, что надо удвоить слэши. Собственно сабж, как сделать это более мудро?
>>1235577 Смотри. Я подаю tchar который я получил из GetModuleFileNameW, обрезал до слэша и добавив нужный мне .exe, скармливаю строку WinExec с (LPCSTR)(path), SW_SHOW ничего не происходит. Кормлю строкой с одинарными слэшами - пусто, даю с двойными - все норм. Хотя возможно проблема с приведением типа.
Сап, антоны. Подскажите в чем проблема. Накатил Qt Creator. Поставил Qt, к нему Qt Web Engine, Qt стоит версии 5.9.2. Для Web Engine нужен компилер MSVS 2017, оке. Поставил. Сажусь ваять свои нетленочки - и вот какую хуйню выдаеи компилятор в ошибках.
>>1235605 Извечная проблемма. Компилер выдаёт текст в 866 кодировке по умолчанию в консоли стоит, а креатор воспринимает ее как 1251. Попробуй в китах поставить галку для вывода в utf-8.
Анончики, нашел почти альтернативный вкат в кресты:
If I were new to C++, I would not start learning C++ with this book. Rather, I would use these below three steps and the relevant books in this order:
1. Accelerated C++ by Andrew Koenig & Barbara Moo -- Read and practice example code and exercises from this book first.
2. Programming: Principles and Practice Using C++ (2nd Edition) by Bjarne Stroustrup -- Chapters 5,6, and 7 are gems in this book. You can in fact use this book in parallel with the Accelerated C++ book and
3. (a) The C++ Programming Language (4th Edition) by Bjarne Stroustrup, -- Definite reference book to have. 3. (b) The C++ Standard Library: A Tutorial and Reference (2nd Edition) by Nicolai M. Josuttis, -- Clear examples and very methodical 3. (c) C++ Templates: The Complete Guide by David Vandevoorde -- What can I say! This is simply a classic.
Госпаде, вкатач, с какими же хуесосами приходится собеседоваться.
Прям такие дохуя умники сидят, лол, растопырив пальцы перед джунчиком. Хотя, вроде и ясно говоришь, что я вроде как только вкатываюсь. Но нет, блядь. Хуесос технический специалист прям устраивает с тобой ДУЭЛЬ блядь интеллектуальную. А если на чем-то подловит, то пизда, УХ БЛЯ, там ТРИУМФ, ваши знания СИ ПЛЮС ПЛЮС В ОБЩЕМ-ТО НИКАКИЕ.
>>1235650 А чё ты ожидал? Схуяли кто-то должен знать ответ на твой вопрос и расписывать решение? Гораздо очевиднее что отвечать будут на то, что лучше понимают и что знает множество людей.
>>1235662 Потому что это блять С++ тред, в котором по идее должны сидеть умные люди с образованием и пониманием CS, а не горстка выблядков "ВОЙТИВАЙТИ", засирающих тред своими тупорылыми вопросами, на которые сука в гугле находятся ответы за 2 секунды.
Пиздец. Они еще ахуеваеют, что их хуесосят на собесах. Да вы же блять настолько тупорылые дауны, что вас не то что в джуны, вас блять даже в обслуживание кофе машины не возьмут.
Иди нахуй от сюда в /b/ и создавайте там треды как вкатиться в айти.
Вот этот >>1235666 даун меня вообще выстегивает, сука ну почему ты настолько имбецил, что тебе блять в падлу загуглить вопрос, я даже не говорю о том, чтоб ты почитал книжку и нашел там ответ, т.к. заранее знаю, с твоим уровнем развития ты там большую часть слов не поймешь и не пройдешь дальше предисловия, но сука загуглить то можно, уебище? И так без тебя этот вопрос тут постоянно задают бесчисленные орды макак вкатывальщиков, которые думают щас они хело ворд из инета скапипастят и сразу пойдут устроятся Сеньором в яндекс на ЗП 400к в сек. Просто блять эпик дауны.
>>1235689 Ты тут настолько воду замутил, что я не туда ответ влепил. Тебе, гондон, следует пройти нахуй, потому что ты предлагаешь дебажить твой сраный говнокод, да ещё в залупу лезешь.
>>1235699 Всем похуй на твой сраный креатор. Это не относится к сабжу треда.
>>1235700 >дебажить Нахуй его дебажить? Тут проблема не в каком-то баге в коде, а в самом алгоритме. Если ты знаешь этот алгоритм, то возможно знаешь в чем проблема.
>>1235707 Начни с мнемонического названия переменных (v,c,t,i,k,u - вот это вот всё говно что у тебя там), затем перейди к инициализации агрегатов (строки 39-46), потом почитай про чистый код (таб = 4 символа, мусор 136-144 нахуй). Тогда можно будет прочитать, где ты обосрался с реализацией алгоритма.
>>1235583 чёт вообще срал и ебал этот виндоуз, ещё раз этот чувак подойдёт, чтоб я его прого доделал, то я ему щи переломаю. https://pastebin.com/pS09B68q Вот куски кода, что отвечают у него за функцию.
Я почитал про эти TCHAR и прочее, и слава богу что код под окна с оконными функциями я писал года 4 назад.
В общем, какая тут может быть проблема? Я так понимаю, либо в приведении к LPCSTR, либо таки в слэшах, так как буфер получает их одиночными.
>>1235678 чёт ты токсичный, может ты школьник, который тоже хочет быть воннаби нормис? Алгоритм же книжный, вот и подгляди в книгах, подумай что у тебя не так? Книги по чистому коду читал? про рефакторинг знаешь? А стандарты кода читал?
>>1235719 Ты реально аутист или тролишь тупостью? Хотя что тебе остается, ведь ты очередная манюнька мечтающая вкатиться в ойти и получать 200к/нс, ты стал изучать С++ т.к. слышал, что все крутые дядки и хакеры используют его и решил, что ты тоже станешь таким с твоей нулевой базовой подготовкой и ты реально думаешь, что алгоритмы и прочий матан вовсе не нужен сейчас, когда все можно спрашивать на форумах и копипастить со стековерфлоу. Ты думаешь, как только ты изучишь как работают циклы и условные переходы, ты сразу сможешь устроиться на высокооплачиваемую работу в ДС, ходить с важным видом по офису, потягивать смуззи, громко обсуждать различные модные айтишные темы используя максимальное количество заумных слов, чтоб все слышали какой ты умный. Но спешу тебя разочаровать: всего этого не будет и твой максимальный уровень это laba1.cpp.
Так что пошел нахуй с моего треда, где должны сидеть только истинные задроты.
>>1235725 Нахуй иди со своими пидорскими названиями переменных и чистым кодом. Там и так все понятно.
Цитата одного известного человека: >C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable tmp, which is much easier to write, and not the least more difficult to understand.
>>1235733 Ты тредом ошибся. Это CPP тред, да и стандарты кода, а так науки о коде не просто так высирали, а чтобы за тобой кто-то что-то мог прочитать, а главное ты.
>>1235729 Бля, ты тупая обезьянка, еще раз говорю я прочитал дохуя книг и статей по этому алгоритму и не могу понять ошибку. Короче, нахуя я в сотый раз распинаюсь тут перед тупорылым дауном?
>чистый код >рефакторинг >стандарты кода Вот это все выдает в тебе макакена. Я знаю про все это, но при прототипировании это обычно не используется.
>>1235737 А ничего что ЦПП и Си очень близкие друг другу языки с многими общими областями применения. А ты в курсе, что можно писать на ЦПП как на Си? Это первое.
Второе: >>1235741 >>чистый код >>рефакторинг >>стандарты кода >Вот это все выдает в тебе макакена. >Я знаю про все это, но при прототипировании это обычно не используется.
Но типичный макакен даже не знает о прототипировнии и его главная цель в написании программки красивенько все оформить, чтобы тимлид хуем по губам провел и сказал маладец.
>>1235726 >WinExec Смотрим мсдн: Note: This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
Нахуя ты юзаешь этого динозавра? Под виндовс 3 пишешь?
>>1235747 ты не поверишь, но там WinExec с этой программой, что он использует запускает какую-то утилиту Windows, которая работает из консоли. Как я понимаю, ему важно, чтобы когда он её врубает, то у него было SW_HIDE. SW_SHOW уже поставил я.
>>1235769 This directory contains the C and C++ code solutions as coded in the O'Reilly book "Algorithm in a Nutshell", Second Edition, by George Heineman, Gary Pollice, and Stanley Selkow, (C) 2016.
Во всей книге си, а ты нашёл там в директории ПИТОН ДЖАВА и закукарекал
И что мы видим? Говнокодик с непонятненькими названиями переменных? А где же ThisVariableContainTheSizeOfTheArrayWhichWeUsedToCountWorldInTheClassSortedWhichInhiritsClassBasInOutFouthLessonInMyPriviousBookWhichIwroteWhenIWas21AndMyDickCouldStillBeHard = 21?
Более того, глупо вообще сравнивать код из книги с кодом из реальной жизни.
>>1235777 похоже у тебя реально проблемы. Там таки понятный код, потому что переменный не похожи друг на друга, а книги по рефакторингу или стандарты ты не читал.
А вот помогать тебе внедрять в банк поиск по списку террористов (медленное решение), когда есть другой алгоритм, и он проще и быстрее для такого дауна, как ты.
Если тем более у тебя реально пробела в алгоритме, то это ещё большая проблема, для тебя, так как ты не можешь его выразить на псевдокоде, чтобы найти ошибку. Так что тестируй.
>>1235766 с_str() это получение указателя на внутренние данные в соотвествии с типом строки. если #def unicode то у него строка wstring и будет const wchar_t. иначе string и const char_t. В свою очередь LPCTSTR = const char or const wchar_t depending on _UNICODE, то есть там тривиальное приведение из char в char и wchar_t в wchar_t без преобразований. Другое дело, что UINT WinExec(LPCSTR , UINT ); не приспособлена для wchar_t*.
Но всё равно скорее всего дело в '\\' и в '\"'. Видимо он парсит строку как строковый литерал: WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
>>1235780 Боже, что за поток создания ты высрал? Боже, как таким идиотом вообще возможно быть?
1. У тебя что фикс на чистоте кода? Ты недавно прочитал Чистый Код и теперь пытаешься блеснуть своими знаниями в любом разговоре? Так вот знай, я читал чистый код и прочие книги по рефакторингу и скорее всего даже получше тебя в этом разбираюсь и знаешь что? Я ебал твою чистоту кода в ротешник. Как тебе такое? Если ты даун и не можешь понять что t[v] это доступ к вершине, что функция go это функция переходов конечного автомата по состояниям и out это функция перехода на листья в дереве, то это твои проблемы, ибо почти во всех источниках именно так этот код и выглядит в плоть до названия переменных.
2. Ты настолько тупой, что даже не понимаешь и не знаешь предназначения алгоритма Аха Корасика, что думаешь это для поиск по списку? Ты вообще отличаешь поиск по списку от паттерн матчинга? Ты просто невообразимо туп, так что лучше даже не лезь сюда.
3. Я сразу сказал, что проблема в алгоритме. Алгоритм выражен абсолютно правильно, дело в том, что есть его вариации специально заточенные под конкретные специфические случаи, детали этих реализаций четко особо нигде не описаны.
>>123580 Я тебе сказал, у тебя не та вариация. Такой алгоритм какой тебе нужен называется по другому. И ты даун, чтобы в банках делали поиск по списку? Там паттерн матчинг
Пацаны, вот скажите. Допустим я хочу написать модульное приложение, которое состоит из .exe файла и dll-ек(абстрактно, оно кроссплатформенное) под qt и я хочу чтобы в exe рисовалось основное окно, а каждая dll отвечала за вкладку. Как я это сделаю?
Единственное что мне приходит в голову - передавать qml как строку. Но это плохая идея. А как лучше?
>>1235939 Интересно. Вот допустим я хочу чтобы каждый новый модуль был самостоятельным и мог отвечать за свой интерфейс и чтобы добавить в програму новый функционал можно было просто создать новый модуль и не трогать старые вообще никак
У меня есть массив интервалов типа [0-3][0-8][4-8][4-11][9-11][12-16] Мне нужно сделать из него множество всех комбинаций без пересекающихся интервалов, типа [0-3][4-8][9-11][12-16] [0-8][4-8][9-11][12-16] [0-8][4-11][12-16] [0-3][9-11][12-16]
>>1230522 (OP) Есть ли вообще смысл использовать new вместо new [1]? Зачем было так делить операции? Чтобы потом кто-то пердолился, думая, есть там [] или нет? Да ещё и результат не определён в случае ошибки. Каков здравый смысл?
мне SIZE_MAX и и функуция max_size вектора charов выдают одно и то же число, 18446744073709551615. Что оно значит и откуда берется? Я прочитал что это максимальное значение объекта типа size_t и соответственно максимальное количество элементов которое может хранить вектор чаров. Но ведь даже если разделить это число на 1024^3 останется число с 11 цифрами, какое то невероятное количество гигабайт, откуда оно берется?
>>1235797 Дело было в том, что он не тот метод юзал. У него ничего не вызывалось изначально ( а приложение которое он мне дал реально было 16-бит), и оно вызывалось, поэтому я отловить не мог( особенно когда я переключал сборку на юникод). Переделал код под криэйтпроцесс и тепеоь работает все.
>>1236432 Только теперь проблема, найти максимальные уникальные последовательности. То есть чтоб на последнем выходе не было 1 элемент (12-16). Может я граф не правильно построил?
>>1236458 Нет, это дерево для бектрейса, то есть мы идем от root -> (0-3) x-> (0-8) ->x, на (0-3) мы смотрим что (0-8) пересекается и уже не идем дальше отбрасывая все поддеревья с (0-8) и переходим в root -> (0-3) -> (4-8) -> ... и так далее.
Увидел тут ссылку на этот сайт. Начал там делать задачи, щас пришло уведомление что скоро начинается еженедельный контест. Планирую поучаствовать. Есть еще тут народ участвующий там?
Ку, поясните дорогие, что значит выучить STL, как определить степень своих знаний, типо читал-видел достаточно, или надо как то обширно наизусть все знать вот это вот все, благодарен
Олимпиадного говнопогромирования пост. В условиях написано, что надо вывести число с точностью до 6 цифр после запятой, но при юзании дабла только 5, чяднт?
>>1236529 Да сделай свой список или вектор с блекджекомитератором и мемным аллокатором, почитай про мапы, хеш мапы, сеты и прочую поебень, изучи std algorithms, хули там. >>1236536 Есть же такая хрень, как std::setprecision(определена в iomanip), которая позволяет задать произвольную точность вывода чисел с плавающей запятой.
>>1236138 В чем проблема отсортировать отрезки а потом перебрать?https://ideone.com/BFrMSU Тут все равно лучше чем 2N не получится, если конечно надо выписывать все непересекающиеся множества.
>>1236830 Ну тип классическая задача и классическое решение. Два отрезка пересекаются, если их концы лежат по разные стороны от линий, которые они задают.
>>1236830 Там векторные произведения: v1 = B1B2 x B1A1, v2 = B1B2 x B1A2 - если точки A1 и A2 лежат по разные стороны от отрезка B1B2, то векторные произведения будут иметь разный знак, соответственно их произведение v1*v2 будет отрицательным. Потом то же самое проверяется для отрезка A1A2.
Посоветуйте материал по оценке алгоритмов (выч. сложность/расход памяти/сходимость). Вот эти вот все o(n), O(n), амортизированные константы и проч. Желательно книжечку или какой-то бложик с последовательным изложением.
Как сделать аллокатор с несколькими шаблонными параметрами? Чтоб соответствовал концепту Allocator. Для allocator_traits написано, что "rebind_alloc = Alloc::rebind<T>::other or if Alloc is A<X,...> then A<T,...>" Но я где-то проебался и оно не хочет компилироваться именно на том месте. https://ideone.com/evpXbL Полдня сижу над этой пиздой.
Решил написать вектор который работает не через ебучие аллокаторы, которые не умеют в realloc и не умеет быстро копировать через memcpy. Особо не тестил, только вот написал. Можете постестить, буду признателен за выявленные баги. А я пока пойду спать.
>>1237661 Хорошо, отвечу. Codelite - что-то вроде текстового редактора с подсветкой синтаксиса и глуповатым автокомплитом. Примерно на уровне vim/emacs с парой плагинов. Лучше уж взять codeblocks. Он тоже говно, но умеет гораздо больше чем codelite. Можешь посмотреть на vs code, может понравится. Но вообще везде используют студию или clion, может еще qt creator. Это единственные 3 человеческие ide для крестов.
>>1237668 Потому что пока не поставишь 100500 ненужных библиотек, хуй он будет нормально работать. И он исключительно виндусовский, что автоматически его переводит в уровень рабов.
>>1237687 Давай считать: 1. Kernel.dll 2. .net 3. Обязательный пакет расширения для винды, обязательные компилы для линуховых 4. Для эмуляции, обязательно поддержка гипервизора 5. Powershell если пишешь под мобильники 6. Еще 10 штук пакетов Visual C++ от времен бородино до 2018.
И все это что бы нормально установить и работать в какой то сраной IDE.
>>1237693 1. Что это вообще такое? 2. Установлен 3. Это нормально. В линуксах кернел-хедеры. 4. Не обязательно 5. Может быть 6. ставится один, текущий. Тем не менее - если ты пекой пользуешься, они уже стоят.
Какая-то _ОЧЕНЬ_ странная аргументация, если честно. У тебя ССД на 32 гигабайта, или что?
Ну и да, ИДЕ не сраная, а де-факто стандарт индустрии.
>>1237693 Что ты несешь? 1. Это и так в винде есть, дебич 2. .net - по дефолту в 10 винде уже он есть 3. Для линукса - да. Про пакет расширения никогда не слышал. 4. Не обязательно 5. По дефолту есть в 10 винде 6. Ставится 2017, никаких других не надо
>>1231748 Я не уверен на все сто(компилятора под рукой нет проверить), но есть вот такая штука: https://en.cppreference.com/w/cpp/iterator/data Могут перекрываться области видимости, из-за чего твой массив видится как эта функция. Хотя чуйка мне подсказывает, что дело не в этом
Есть у кого впечатления от средства C++11 <threads>? Перескакиваю, по сути, с pthreads на него. Говорят, что функционала меньше, но зато кроссплатформенность. Да и нативные средства по-прежнему можно вызывать. С вас по сути только "отзыв", особенно если с другого API вкатились, как в сравнении оно...
Господа, помогите разобраться. То ли у меня мозги стухлись на ночь глядя, то ли я нифига не понимаю. На 1.png код при n = 10000000 выполняется за 470 мс. Ключи, как видно, предварительно запихнуты в вектор(или в массив, не важно, пробовал и так и так). На 2.png код при таком же n выполняется за 1991 мс. Здесь вектор не используется, а ключи берутся непосредственно из счетчика цикла for. В чем подвох?
>>1238011 Прости, можешь объяснить поподробнее? Я так понимаю, ключ все равно передается по ссылке и unordered_map использует его только для вычисления хеша. Так какая разница откуда мы передадим значение по ссылке?
>>1238020 >Так какая разница откуда мы передадим значение по ссылке? При линейном обращении к um шанс, что нужное значение лежит в кэше гораздо выше. С массивом у тебя мало того, что обращение к памяти рандомное, так еще и опосредованное, в два приема. То есть процу сначала надо дождаться, пока придет значение из вектора, а потом еще пидорасить бинарный поиск в um.
>>1238032 Ну, вообще по логике так, да. Только, во-первых, в массиве и векторе соседние элементы лежат рядом, то есть вероятность того, что соседние элементы вектора есть где-то в кеше, тоже довольно большая. А во-вторых, что самое интересное, все с точностью наоборот к твоим словам. Ты перепутал скриншоты. По ним видно, что в случае вектора(скрин 1) доступ быстрее, чем линейный(скрин 2). И, если подумать, последовательные ключи 1,2,3... будут иметь совсем разные хеши, т.е. могут лежать далеко друг от друга и попадание одного элемента в кеш не означает попадание туда соседа. Но все равно какая-то хуйня, я запутался.
>>1238043 >Доступ по ключу за константное время. "Константное" время на практике очень сильно зависит от того, как идет обращение к памяти. Вплоть до того, что для небольших массивов линейный поиск может быть быстрее, чем хэш таблица.
Аноны, такая проблема: Работал в визуалке 2017 года, работал с символьными динамическими массивами. На визуалке "программа" работает некорректно. Выводятся вообще рандомные символы. Как я понял, неправильный адрес берется компилятором. Скопировал код в Dev C++ и C++ Builder - все нормально. Как фиксить парашу от микрософта?
Доброй ночи. Я тут сходил на собес, паттерны по банде четырех вроде нормально знаю, но теперь спрашивают, а скажи мол, дорогой, по GRASP паттернам. Я же вообще ни в зуб ногой, че это за хрень такая. Домой как вернулся, гуглить — только статьи в хабровикипедиях понаходил. А литература какая-то есть на эту тему, что посоветуете?
>>1238565 Всем без разбору, где требования к языкам только C++. Я даже C знаю очень неуверенно, а о питонах всяких и речи не идет. Хочу уже куда-то устроиться, а не все сидеть и „вкатываться“. Так что с ГРАСПом-то?
8 лет прогал под линукс, дома последние лет 5 тоже линукс стоял как основная система + винда для игорь на другом диске. Теперь появилось такое желание попрогать под виндой. Раньше сказать, я ненавидел С++ под виндой, ибо WinApi это просто пиздец, корявое уебище по сравнению с красивым и удобненьким linux api + Студия говно, но я нашел Resharper C++ попробовал его вроде годно. Единственное, что до сих пор смущает - это отсталый компилятор у студии, в котором мало того, что много чего из новых стандартов не реализованно, так еще и нету всяких санитайзеров, что просто киллер-фитча, который я постоянно пользуюсь в gcc, которая позволяет находить различные сложные баги. Плюс вывод ошибок у студии уебищный и не понятный по сравнению с gcc который прямо очень точно указывает, что не так да еще и цветом выделяет, студия выплевывает какую-то несуразную хуиту по которой вообще не понятно в чем проблема. Зато у студиии дебагер вроде как получше. Еще бесит у студии флаги компилятора уебанские и совсем другие, чем у gcc, clang, intel и проч. Еще не понятно, что у студии с CMake'ом.
Так вот что скажите, если ли какие-то обходные пути?
>>1238640 А что на счет санитайзеров, адекватного вывода компилятора, CMake, и прочего?
>>1238643 Для себя я обычно всякие алгоритмических программы делаю. На работу щас устраиваюсь, там под винду надо будет делать.
>>1238649 Ой не, я Eclipse траил много лет под линуксом, за все эти годы переодических попыток, я так и не разобрался как там скомпилировать что-то. Эклипс это просто кусок говна. Юзал QtCreator долгое время, потом пересел на CLion с его появлением. Но Clion до сих пор не особо со студийным компилером работает, а отладчик его вообще не поддерживается.
На gcc под виндой, половина фишек типа санитайзеров не работает.
>>1238656 >На работу щас устраиваюсь This is the third thread you've been applying for a job. So sad reading this. But its a fair price for being a linux c/c++ developer. Red-eyed guys have to suffer.
>>1238667 >This is the third thread you've been applying for a job. So sad reading this. But its a fair price for being a linux c/c++ developer. Red-eyed guys have to suffer. Лол. Это паста или нахуя ты на англ. написал? Вообще по линуксу дохуя всего, просто так попалось, что мне понравился проект, платят норм, и есть перспективы съеба с пидарахи. А так на линуксе намного больше по плюсам вакансий, чем на винду.
>>1238670 If we go to a local job-placement site like hh.ru and check your statement about development under different operation systems we will find out that its totally wrong. There are only 1k positions marked both "c++" and "linux" against 3k positions marked with "c++" in total. What would you say in opposition to this fact?
>И где доказательства, что из этих 2к на винду больше тысячи? We cant get the certain numbers from the inquiry. In my experience if an employer doesn't point out "linux" in a description then its a windows-based position, though.
>>1238634 QtCreator + MSVC компилятор, ежжи. З.Ы. Только креатор предпоследний бери. Из ГУИ на выбор как с++ Qt виджеты, так и QML JS фигня с пробросом с++ функционала, забавная вещь.
Решил собрать свой "кроссплатформенный" проект, который я писал и тестил под линуксом, в студии.
Во-первых, я ахуеваю на сколько студия уебищная с работой с CMake это просто пиздец, постоянно че-то не обновляется в этом ссаном кеше, блять через жопу все опции как-то, флаги компиляции как-то криво приходят, пиздец одним словом.
Во-вторых, я хуй знает как, но блять файловые стримы под виндой работают в 100 раз медленее. Мое приложение много работает с файлами, и я долбоеб, почему-то решил использовать плюсовые стримы, хотя знал что это кусок говна, но не ожидал, что настолько. В общем, идея там простая: я задая фиксированный буффер через rdbuf()->pubsetbuf() и уже пишу/читаю потом. Короче на линуксе чтение/запись работает очень быстро типа файл в 10 мегов, пишется из памяти через с++ стримы в районе пары мс, под виндой эта хуйня занимает по 3-4 СЕКУНДЫ!!!! Я сначала не понимал, почему мое приложение так медленно работает, потом запустил профайлер и ахуел, что это файловый стрим так тормозит, заменил его на Сишные стримы все стало нормально. Но это просто эпический пиздец.
В-третьих, как меня заебала студия своим уебищным UI, при компиляции поднимается окошко с логом компиляции и ошибками и СРАЗУ ЖЕ закрывается, я блять ахуеваю просто, постоянно надо нажимать туда чтобы посмотреть ошибки, а держать его открытым постоянно - это место занимает. Короче пиздец.
В-четвертых, ебучие хуй разбери логи студийного компилятора, я которых хуй разберешься.
В-пятых, Ебучее WinAPI, сегодня час потратил пока искал в инете как превратить код возврата ошибки в строку, там пиздец.
>>1239094 1. Да 2. Делает хуйню 3. Неосилятор 4. Неосилятор 5. Неосилятор
> РРРРРРРРРРРЯЯЯЯЯЯЯЯЯЯЯЯЯЯ СТУДИЯ ГАВНО МАМ
Вопрос на миллионАутист01/08/18 Срд 20:34:28#494№1239142
Зачем C++ ввёл ссылки? ну правда, были указатели, они могут быть шаблонными типами, с ними не возникнет этих сраных ссылочных проблем, которые ещё и варьируются со стандартами. "Ссылка просто предоставляет нам более простой интерфейс по сравнению с указателями. Теперь не надо постоянно разыменовывать." - Примерно так пишут в учебниках. На деле: > семантика переноса > ссылки rvalue, lvalue, универсальные ссылки > Ой, у вас тут std::move отваливается, замените на std::forward > Ой, вы думали, что тут rvalue, но он как аргумент, конечно, rvalue, но формальный параметр есть lvalue по природе своей. Не ешь, подумой > Здесь у вас кусок говна получился с копированием, мы же хотели прямую передачу > Вы что, не знаете, как сворачиваются ссылочки? И это притом, что: > Указатели неплохо смотрятся в шаблонах. > Указатели прозрачны в плане модели памяти и вообще довольно наивны. Ни у кого в голове не будет сомнений по поводу природы указателя, в то время как изучающие C++ без С могут спустя года не понимать, что компилятор все ссылки в конечном счёте сводит к указателям как естественным носителям информации "где".
>>1239130 Я вроде ясно написал, что СИшные стримы работают нормально, когда я ими заменил плюсовые. При чем тут ОС?
>>1239141 Просто обоссал и убил твою семью, большего ты не заслуживаешь.
>>1239145 >"Мир разработки ПО" Лел. Вообще я думал ваш мир намного более продвинутый, но сейчас понимаю, что линукс в этом плане идет впереди лет на 20.
>>1239151 Серьезная да, но остальные мелочи тоже выводя из себя спустя некоторые время.
>Попробуй сменить компилятор. Так смысл, если программа должна быть кроссплатформенная? Под студией она уже хуево работает, значит под нее уже надо менять решение.
>>1239159 > кроссплатформенная Не кросскомпиляторная. Вообще, если ты нигде не обосрался и не написал какой-то код с undefined behaviour в редких ситуациях, то тебя долбать судьба твоей обёртки системных вызовов волновать не должна. Не нравится - пиши ifdef'ы и разные вызовы для разных осей, лул.
>>1239166 FILE * это указатель на стрим, если что. > The fopen() function opens the file whose name is the string pointed to by pathname and associates a stream with it. Вы уже забываете свои корни
>>1239161 Да я пару постов назад писал, что хочу попробовать на студии пописать. Тем более я там же писал, что у всяких gcc под виндой половина фитч не работает, типа санитайзеров.
>>1239163 В том-то и дело, я кроме STL ничего не использовал и по идее должно было работать нормально в любых компиляторах.
В общем, я думаю проблема в ебучих плюсовых буферах, которые на каждый символ вызывают функцию.
>std::basic_istream::read >When using a non-converting locale (the default locale is non-converting), the overrider of this function in std::basic_ifstream may be optimized for zero-copy bulk I/O (by means of overriding std::streambuf::xsgetn)
>std::streambuf::xsgetn > Reads count characters from the input sequence and stores them into a character array pointed to by s. The characters are read as if by repeated calls to sbumpc().
Короче стримы сами по себе медленное говно. Жаль в плюсы не завезли мемори мапинг.
>>1239191 Абстракции абстракциями, но если бы ты почитал тот тред дальше, то увидел бы, что разработчики gcc почему-то позаботились о быстрой реализации этих стримов для больших блоков данных, а в студии похуй. Хотя это даже хорошо, а вообще лучше бы из С++ удалили файловые стримы, и оставили бы только стринг стримы, для удобного форматирования. Ну или хотя бы завезли какие-нибудь классы для работы с большими бинарными файлами.
>>1239190 Ну что ты пристал? Никто уже не помнит зачем ссылки ввели. А && ввели, потому что хомяки новый функционал клянчили. Мол вон в питухоне ещё инструментария навалили и какие там всякие приколюхи - нам это тоже пиздец как надо.
>>1239201 >Ну что ты пристал? Я просто представил, как на меня будут смотреть, если я не буду их в коде юзать вообще. И есть дикое желание, если честно...
>>1239203 Да всем пофиг на самом деле. Писать на c++ это как жить в Китае или Индии - вроде язык общий и традиции, однако отдельные этносы друг друга нихуя не понимат. Вот как у нас тут челик из Южной Индии мира линухов не может найти себя - так и по всей отрасли.
А их никто и не трогал. Оставили как есть. Хочешь использовать && - используй. Не хочешь - можешь написать то же самое на указателях как в бородатом 98м.
>>1239216 >Писать на c++ это как жить в Китае или Индии - вроде язык общий и традиции У крестоблядков ООП головного мозга, что и порождает проблемы, можно так же посмотреть питухонщиков.
Сейчас подключил SFML и открыл дефолтный пустой проэкт в Code:Blocks. Всё делал по ультрапростому туториалу, и врятли мог ошибиться. Но выдаёт кучу ошибок будто не подключена вообще SFML, ide тем не менее видит классы, хотя не знаю смотрит ли она в хэадере или это встроеное.
>>1239246 Ну любители c, например, пердолятся с хранением указателей на функции в структурах, чтобы имитировать объект с методами. В c++ это встроено в язык, хотя в большинстве случаев это не нужно.
Попробуй написать код для вот такой ситуации без &&. class A {B* m_p;}; A f(); A a1 = f(); A a2 = a1;
>>1239237 > Code:Blocks Почему. Почему. Почему постоянно ньюфаги упоминают этот кусок дерьма. ЗАЧЕМ? Почему нельзя поставить Студию\Шлион\Культикреатор. Почему ставить этот высер сифозной макаки?
Двач, почему в C++ компиляторы обнуляют указатели в структурах? Можно ли это отключить как-то? В c они это тоже делают, причём везде, но только с включением оптимизации.
Могучие местные крестовики не знают, что плюсовые стримы могут иметь такую-же или большую скорость, если отключать проверки. Виндовый компилятор медленее в дебаге, т.к. имеет 100500 проверок на безопасность, многие вещи пролетающие в гцц как по маслу, в винде падают с абортом, т.к. код ансейф. Попробуй с -Ox на винде, и каким-то -Ofast на гцц. Плюс в винде многие небезопасные оптимизации выключены вообще и нужно ручками все указывать, тот же strict_aliasing например. Вообще в современном мире компилировать код чем-то кроме clang+llvm моветон
>>1239489 Слушай, я сегодня напишу специально тест для стримов С++ и сишных, нативных ОС файловых функциях и мемори маппед файлов. Так вот ясен хуй я компилировал с максимальными оптимизациями при проверке. Просто сами плюсовые стримы так сделаны хуево по крайней мере в студии.
Объясните как подключать библиотеки. У меня MinGW. Засунул .a файлы в \lib, хэдеры в \include. Ещё есть dll, куда его? Почему не подключается библиотека?
Посоны! А у меня тут такой тупой вопросик. А какая особая разница между функцией и классом с оператором()? Ну помоимо того что класс это ещё и всякие хуйни там можно понавешивать. Нахуярить вместо функций классов и использовать безымянные объекты как функцию.
Visual studio на самом деле это лучшее IDE. Правда ещё есть Clion, он даже получше будет чем Visual studio, более того он кросплатформенный, но он стоит дохуища денег, 12000 в год. Мне на линухе так вообще приходиться пользоваться "qtcreator", параша полная, но даже это лучшее из того что представлено на линухе из IDE (помимо вышеупомянутого Clion'a).
Объясните тупому. OpenGL - это просто спецификация, так. Реализация спецификации сделана в драйверах GPU. Тогда что я подключаю #include <GL/glut/glew/GL.h>. И если я не закину dll в проект, то говно не скомпилируется. В спецификации написано, что это >OpenGL Loading Library Нихуя не понимаю блять
Нужно нарисовать граф с посчитанным расположением вершин. Интерфейс на Qt, позавчера в первый раз читал доки. Есть ли способ избежать отрисовки примитивов? Что-то вроде QChartView, но с рёбрами.
>>1240094 OpenGL в винде предоставляет возможности программирования только на OpenGL 1.1. Для того, чтобы писать на чем-то поновее, нужно загрузить нужные расширения из системы. Т.е. сама винда загружает только 1.1, надо дозагруживать
>>1240835 auto main(auto argc, auto argv) { std::vector<std::basic_string<decltype(argv)>> v; for(auto i = decltype(argc)(); i < argc; ++i) { v.emplace_back(argv); }
Сап, В некой программе создается виртуальная область памяти и виртуальный регистр.
У регистра есть методы get и set, которые наследуются из другого класса. Нужны для того чтобы читать из регистра и писать, регистр может иметь атрибут RO, RW, WO, в зависимости от этого мы определяем можно ли вызвать get или set.
Задача: мне нужно реализовать маппинг этого регистра к памяти по определенному адресу, чтобы вызывая get объекта, я выполнял логику get или set регистра.
У класса Memory я делаю метод map в него подается адрес на который я хочу замапить регистр и сам регистр.
void Memory::map(int addr, Register ✼reg_m) { int64_t tempAddr = (int64_t)(int✼)reg_m; .... } Здесь я получил адрес регистра, т.е. адрес объекта, но теперь вопрос: Как у этого объекта вызвать метод зная только его адрес? Грубо говоря: 0xdeadc0de.get()
А сама программа будет работать так: Register Reg0(8, RW); //создали регистр Memory memspace(0x00, 0x60); //создали область памяти размером 0x60
memspace.map(0x53, &Reg0); //мапим регистр на 0x53 memspace.read(0x53); //тут уже будем читать из регистра, проходя логику проверки аттрибута регистра, и принимаем решение, можно ли с него читать или нет
>>1241124 >Как у этого объекта вызвать метод зная только его адрес? >TvoyClass✼ obj= reinterpret_cast<TvoyClass✼>(obj_addr); >return obj.get(); ?
Методы они не у адресов, они у объектов. Ну или я не понял, что ты вообще делаешь. Если ты в map() передаёшь указатель на Регистр, нахуя ты его в безликий адрес переводишь-от, почему бы этот же указатель и не сохранить? Потом reg_m->get() вызовешь да и всё.
>>1241167 просили поволохать битьы - поволохал. срезался на ололофункциях с мемсетами мемцпай ЧТО ВЫВЕДЕТ ПРОГРАММА НА ЭКРАН ЧТО ЗНАЧИТ НЕ БУДЕТ РАБОТАТЬ ПОЧЕМУ ИМЕННО НЕ БУДЕТ РАБОТАТЬ ЧТО ИМЕНО ВЫВЕДЕТ
>>1241177 там был кусочек ебанутого кода. и в общем было ясно что там в определенный момент память потечет, и еще куски какой-то ебанины. я постарлся указать на то что там потечет памятть и нет смысла смотрю ту ахнинею, что есть еще. но ЭТО ОКАЗАЛОСЬ ОЧЕНЬ ВАЖНО
>>1241145 Ну да. Те же тестовые ингда требуют написать без использования STL. Зачем? Чтобы кандидат мог ковырять легаси говно или заниматься оптимизацией.
Ребята, учу Python, а после хочу продолжить изучать с++, какие подводные и какие плюсы я с этого получу? В СИпп знаком с переменными, циклами, условиями, а потом дропнул тк начал глубоко изучать ассемблер для кр555
>>1241678 Ассемблер - это детская игрушка по сравнению с С++, в асм нету ничего сложного, единственные что может вызвать там затруднения - это понимание работы памяти и аккуратное ее использование, а так хули там есть инструкция есть 1-3 операнда, которая она принимает, сам по себе язык очень примитивный, а вот С++ это пиздец, кроме того же понимания работы памяти, там надо понимать и знать еще кучу вещей, кучу разных нюансов, знать кучу различных подводных камней. Поверь мне, я знаю и х86 асм и плюсы уже 10 лет и то я не могу сказать про себя что я гуру в плюсах, до сих пор иногда нахожу вещи в них, которые я не знал или не понимал.
>>1241722 Да это то все понятно, я к тому, что трудности меня не пугают. Да и дрочу я на си, еще на 2 курсе как узнал об языке, так и влюбился Все можно гуглить, все можно смотреть в справочниках Мне интересно, я стану богом со связкой python и cpp?
>>1241728 Да как вы заебали. Выучу - стану богом. Калькуляторов. Язык это просто детский лепет. 95% нужной инфы не программирование. А дискретная математика, теория информации, линейная алгебра, матан, статистика, теория вероятностей, алгоритмы, структуры данных, протоколы. В зависимости от области применения. Вот мне ебучию криптографию и телекоммуникационную начинку побоку начем писать. Хоть да яваскрипте, только оно не влезет и памяти не хватит. В последнюю очередь мне были важны нюасы языка, а вот статистические данные и вероятностная модель в первую
>>1241734 Че так жестко? Можно много крутых проектов сделать не знаб глубин матана, а если прямо прижмет, то всякие стаки, хабы и просто f9 try наше все
>>1241736 А знаешь, я не знаю. Ну сервер написать на нем, всякую дрянь типа шифровальщиков, хуков. Язык многогранен и он не только для решения " в чем смысл жизни? -7" Или как там было, в теории большого взрыва?
>>1241735 Просто понять, слышал человек что-то про теорию связи или нет >>1241738 Этого говна и так навалом. И проще это сделать не на плюсах. А за шифровальщик и присесть можно
>>1241739 Бро, я не знаю этой теории, но щас зайду в гугл и ознакомлюсь. А почему бы и не на си это писать? На питоне тоже можно, я и писал на нем, но доверять всяким py2exe это пиздец и объем файла становиться пиздец огромным из-за зашивания в ехе интерпретатора py
>>1241744 Ну ознакомишься. А вот полноценную начинку цифрового тракта по всем 7 уровням модели osi написать после ознакомления не сможешь. И выдрочив весь стандарт тоже не сможешь. И обосновать, почему надо именно так не сможешь. Суть в этом. Есть много областей, где знания только языка недостаточно. >>1241745 Ну вот и ответил. А то ну не знаю, ну прост, шоб было))) тогда да, плюсы и архитектура ос. Может быть ещё сети
>>1241748 Osi знаю, как же блядь заебало писать на парах про эту хуету, если надо будет всегда конспекты открыты. Да и зачем мне все это знать на старте, все приходит с опытом, кругозор увеличивается И так далее итп
>>1241749 Ну напишешь ты на листочки с прикладного по физический. И после этого электрические сигналы магическим образом превратятся в картинку? Разве что большого протонного хуя. Тут не опыт, а цос, тэс, ти и тервер сразу нужны, а не постепенно.
>>1241751 Я так то учился на компьютерных системах и комплексах, есть понимание как чаго почему. Диплом сдал на 5, на защите хуярили прямо Электротехника аппает невероятно в этом
>>1241730 Да все в рот ебали тебя и твои теории автоматов. Нормальные парни пишут на React и Node, попивают крафтовое пивко в барах, и носят андеркаты, добираясь на работу на гироскутере, пока такие чмошники, как ты стоят в сторонке и молча завидуют.
Допустим, у меня есть некая последовательность функций, которые нужно вызвать, но при этом как только любая из них вернёт false, дальше идти не надо. Есть ли какой-то красивый способ такое организовать, кроме оборачивания каждого вызова в if(!funcN()){return;} ?
[code] Бля почему С++ такой ущербный язык, что Foo f(&i) вызывает конструктор по ссылке из-за того, что он не может неявно скастовать int в const int [/code]
>>1242000 Я говорю почему С++ такой ущербный язык, что Foo f(&i) вызывает конструктор по ссылке из-за того, что он не может неявно скастовать указатель на int в константный указатель на int.
Алсо, по ссылке код уже пофикшеный, но стоит только убрать enable_if и все пойдет по пизде.
>>1242011 >он не может неявно скастовать указатель на int в константный указатель на int. Он всё может. Просто байнд к ссылке лучше, чем qualification conversion
>>1242087 Я из гугла тоже могу копипастить в тред типа ебать я эксперт. Ведь ты именно так и сделал, загуглил вопрос и пришел сюда кукарекнул с ебать видом эксперта, а потом, когда я попросил тебя обосновать конкретную вещь, ты тут же слился, ибо сам нихуя в этом не понимаешь.
>>1241499 static constexpr inline noexcept Но Холмс, зачем? Это должно быть на рефлексе как правило хорошего тона или тут есть какой-то смысл именно для этой задачи?
>>1242706 Сам то читал его, постер картиночек? Может ты даже знаешь, что на самом isocpp написано, что стандарт не является средством для изучения языка и тд?
>>1241136 Спасибо за подсказку! Анон, надеюсь ты еще здесь...
В безликий перевожу, потому что каждая ячейка mem-space`а имеет поле mapped[addr], где addr - адрес ячейки в этой области памяти, в это поле, собственно, и пишется указатель на то что замаплено, а там может и быть и ПОРТ, и РЕГИСТР, и ШИНА и даже ROM. И они реализованы в будущем будут по разному. Еще это нужно будет мне чтобы отрисовывать дерево маппингов.
Когда я создаю регистр, он наследует свойства (или как правильно) класса Device, в котором есть все что касается всех устройтв без исключения (hard_reset, value, и т.д.). Так же конструктор ставит в специальное поле Device->type флаг, кторый и обозначает тип этого устройства (defines ниже).
Далее когда происходит read\write из ячейки mem-space`а, программа смотрит, что замаплено? Сначала смотрит dev_m->get_type(), и если это порт то приводит указатель к классу Port и вызвает Port::read(), если там регистр то Register::read() и т.д.
В общем, подумал, подумал я и сделал все вот так, в map передается класс Deivce:
Теперь вот 2 вопроса: 1. Не сильно ли я зарылся в абстракции? 2. Вот этот switch выше так же будет и в read, write, map, unmap. Можно ли как-то его в функцию засунуть? Я думал, думал, но пока не пойму что она должна возвращать? А то везде switch, получается написан... И много выходит повторяющегося кода.
>>1230522 (OP) Сап /pr/, вкатывальщик 16 лвла ищет книгу чтоб не было много ебли с основами программирования Я знаю си и питон, шарю в байты хуяйты и тд, какую книгу мне читать ? Пикрандом
>>1242752 В С++ Хачю работать штобы 20к грывень в месяц Хочу разобраться как работает язык, стандартные библиотеки и какойта фреймворк чтоб на хлеб с маслом хватало Я просто люблю программирование
>>1242754 >Я просто люблю программирование Больше похоже, что ты читать любишь. Ну тип нормальная мотивация - я хочу делать то-то и то-то (и для этого мне нужен c++), а не наоборот.
>>1242771 Я хочу программировать шоб в кайф было, и для этого мне нужен коммон лисп, но я его не осилил из-за отсутствия опыта. Решил выучить C++ для поднятия скилла в программировании. Потом уже начну учить лиспы Вот написал такой и понял что я долбоеб и не могу сформулировать свою мысль нормально. Ну ладно
>>1242735 Тебе может на полиморфизм глянуть? Виртуальные функции там и всё такое. Если твои регистры и прочие наследуют от Device'а, в интерфейсе которого есть нужные тебе read, write и т.д., то и не нужны никакие касты. Храни массив указателей на Device (записывая туда адреса объектов твоих сабклассов), а потом просто вызывай space[addr]->read(), который вызовет нужный метод у настоящего объекта.
Иначе у тебя фигня какая-то получается, если всюду придётся городить свитчи с непересекающимся кодом.
1. Имеется абстрактный класс с чисто виртуальной функцией. class examp;
У него есть protected-поле: T t; В конструкторе работает код типа t = set_t(const T& _t); где T examp::set_t(const T& t) { t = _t; return t; }; Однако, когда в конструкторе вызываешь функцию типа такой: void examp::set_t(const T& _t) { t = _t; }; поле t никак не инициализируется, чому так?
>>1243090 1. При чем тут чисто виртуальная функция? 2. Имена переменных просто заебись нет 2. t = set_t(const T& _t); - что это за хуета? 3. T examp::set_t(const T& t) { t = _t; <----- константной переменной присваиваешь значение, как так-то? return t; }; Короче, я нихуя не понял.
>>1242355 именно для этой не нужен, за статик сорри, копировал из своего говнокода, там это был публичный метод класса.constexpr сам знаешь зачем. inline - потому что раньше пихал его везде и страдал синдромом forceinline'а, просто осталось. noexcept вроде как ускоряет время компиляции (хотя я понимаю, что это ничтожнофункция никакого прироста не даст)
noexcept, ЕМНИП касается гарантий и, пиша это слово, ты ручаешься, что не бросит ни при каких обстоятельствах. И это то, что раньше было throw(), т. е. nothrow гарантия. Я так понял, что из всех вариантов throw() только она и осталась, а остальные из языка поубирали без вариантов на замену.
constexpr до конца не понимаю, зачем. Ну напишу его, и что дальше? Илья Муромец вырасти должен?
Поясните за std::move, пожалуйста. Имеет ли смысл его использовать, если у меня ~100кб данных раскидано на кучу небольших векторов (~300)? Сначала получается вектор даблов, потом его надо переделать в инты и записать в атрибут класса (который имеет лишь конст гетер, так что не могу напрямую в него из трансформа писать). Хочется точно не копировать данные без необходимости лишний раз.
Попробовал как-то так, но почему-то с мувом даже медленнее выходит — https://repl.it/repls/FullMildMiddlewareс мувом в push_back'е, подозреваю, тоже не всё правильно.
Как есть сейчас, можно использовать для, например, int array_of_size[sum<1,-2,3>()]; // и всё компилируется Стоит убрать constexpr, пойдут ошибки компиляции. Хотя функция-то и так и так возвращает значение во время компиляции. Непонятно, зачем еще от пользователя какие-то словечки. Но факт остается фактом, так это работает.
>>1233140 Значение оператора sizeof() для указателя на функцию? Как и для любого другого указателя.
Соответственно, его инкремент даст тебе на современных домашних машинах вторые 8 байт, считая от нулевого байта функции. Скорее всего они будут указывать в случайные код / данные функции, но если функция ну очень короткая то хызы, тогда они могут указывать бог знает куда.
Ответы на все вопросы:
- http://en.cppreference.com/w/
- http://www.cplusplus.com/reference/
- http://www.open-std.org/JTC1/SC22/WG21/