годные онлайн курсы для новичесовна степике лучше пройти курс от cs center, чем аналогичный от mail.ru, это https://stepik.org/course/7и его продолжениеhttps://stepik.org/course/3206этот курс бесплатныйвторой курс от ребят из яндекса и физтеха на платформе cousera:https://ru.coursera.org/specializations/c-plus-plus-modern-developmentучтите, что он платный, но, в принципе, если вы готовы платить за обучение, лучше взять этот курс, а не другие которые есть на рынке, imhoбазовые знания с которыми вы должны выйти на собес можно взять из мейерс "эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14"джосаттис "шаблоны C++: справочник разработчика" второе изданиеобе на русском, обе есть в цифре в сетивидео с конференций и митапов, надеюсь кого-то они развлекут:cppcon russiahttps://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA/featuredcorehard братишек-белорусовhttps://www.youtube.com/channel/UCifgOu6ARWbZ_dV29gss8xwcpp-party от ребят из яндексаhttps://events.yandex.ru/events/cpp-party/cppconhttps://www.youtube.com/user/CppConboostconhttps://www.youtube.com/user/BoostCon/featuredmeeting c++ от дойчейhttps://www.youtube.com/user/MeetingCPP/featuredстарички accuhttps://www.youtube.com/channel/UCJhay24LTpO1s4bIZxuIqKw/featuredпитерский митап по с++https://www.youtube.com/playlist?list=PLtDc3cNvuhAIU_LRYg6xFaJV_95Kkt79n
Аноны, в общем недавно в одной книге прочитал, что НЕЛЬЗЯ возвращать из функции ссылку или указатель на локальную переменную и сразу затупил.Допустим я хочу вернуть строку:char GetStr() { char cStr[1024]; /initialization / return cStr; } — ТАК ДЕЛАТЬ НЕЛЬЗЯchar GetStr() { char cStr = new char[1024]; /initialization / return cStr; } — И ПОЛУЧАЕТСЯ ТАК ТИПА ТОЖЕ НЕЛЬЗЯ (хз почему)А как тогда правильно возвращать сишную строку?А если хочу вернуть string:string& GetStr() { string str; /initialization / return str; } — ТАК НЕЛЬЗЯ (ССЫЛКА ЖЕ)string GetStr() { string str; /initialization */ return str; }— А ДЕЛАТЬ НАДО ТАКхотя в последнем случае по логике самого же языка я возвращаю строку по значению, но дохуя умный компилятор все равно возвращает ссылку. Дак в чем же тогда проблема если я буду сам писать string&. СЛОЖНО.
>>1296014конкретно к плюсам? в базе ты должен таки знать алгоритмы-структуры, сишку на уровне книги K&R, ну и кресты на уровне онлайн курсов из шапкидальнейшие знания уже будут зависеть от специализации: современные кресты раскидываются по все более узкоспециализированным нишам со своей спецификой
Какого хуя это дерьмо не работает ? Объясните долбаебу.https://codeshare.io/register?saveCodeshare=amDWx0По идее в этом говнокоде сортировка RadixSort
>>1296063>https://codeshare.io/register?saveCodeshare=amDWx0Ебать я криворукийhttps://codeshare.io/amDWx0
>>1296051сишную строку возвращают через параметр функции, при этом требуется соглашение (не выражаемое семантикой языка) кто будет удалять эту строкуstd::string можно возвращать из функциичаще всего это еще и относительно быстро, так как делается rvo
>>1296065хотя можно и через возвращаемое значение функции отдавать строкутолько, опять же, требуется соглашение о том как вызывающий код будет удалять эту строкукак минимум надо знать при помощи чего выделялась память под строку - new или mallocпотом еще нужно учитывать, что разные рантаймы могут быть, например, в вызываемой библиотеке свой рантайм будет, а у вызывающего кода - свойтут вообще множество проблем возникаюткоторые решаются старыми сишными методикамитипа предоставления функции, которая будет освобождать ресурсы, выделенные в библиотекелибо способом, когда вызывающий код сам выделяет память, в которую уже вызываемый код разместит эту строкув общем, это не крестовый подход
>>1296068>требуется соглашение о том как вызывающий код будет удалять эту строку>это не крестовый подходда как-то вообще тупо, заебался с этими выделениями памяти.Стоит заменить все char'ы на vector<char> как на оверфлове советуют, или есть лучше подход?
>>1296051Ты понимаешь что под ссылкой или указателем на локальную переменную имеется ввиду конкретно адресс переменной созданной в этой области видимости.Ну к примеру:int(звездочка) ReturnTmp() {int a = 5;int(звездочка) b = &a;return b;}При попытке в дальнейшем использовать адрес возвращенный такой функцией ты получишь ошибку, ибо при выходе за пределы области видимости переменная "a" будет уничтожена и указатель "b" будет указывать хуй знает куда, т.к "а" хранится в стеке и уничтожается при выходе за область видимости.А вот что касаемо такого варианта:char(звездочка) GetStr() {char(звездочка) a = new char[10];return a;}То адрес полученный через такую функцию будет действителен даже после выхода за область видимости функции, т.к все что выделено через "new" никак автоматически не освобождается, ибо находится в куче, а не в стеке.
>>1296051> Аноны, в общем недавно в одной книге прочитал, что НЕЛЬЗЯ возвращать из функции ссылку или указатель на локальную переменную и сразу затупил.Хуевая и устаревшая книга, не читай ее. НЕЛЬЗЯ использовать new не в конструкторе и без соответствующего ему delete в деструкторе. Вот это нельзя. И из этого будет следовать все остальное. Если в книге используют голый new в коде - не читай ее.>char GetStr() { char cStr = new char[1024]; /initialization / return cStr; } — И ПОЛУЧАЕТСЯ ТАК ТИПА ТОЖЕ НЕЛЬЗЯ (хз почему)Потому что память будет течь как твоя мамка при виде большого черного хуя.>Дак в чем же тогда проблема если я буду сам писать string&. СЛОЖНО. Конечно сложно, если ты берешься за С++, не зная сишки. Возвращать указатель на временный объект очень хуевая идея.
>>1296203Теперь да, понимаю, но тогда другой вопрос. В какой момент переменная становится недействительной.допустим:int(звездочка) ReturnTemp(){int a = 5;int(звездочка) b = &a;return b;//уничтожение переменной тут или нет?}int value = ReturnTemp();переменная гарантированно уничтожится сразу после 'return b', но до присваивания, и в value уже будет лежать мусор? или это неопределенное поведение? или так будет работать?
>>1296211>Конечно сложно, если ты берешься за С++, не зная сишки.Два чаю, тут даже не только в этом дело, у него нет понимания что такое стек и что такое куча, в чем разница между ними и что собственно делает оператор new, как работают указатели и ссылки и в чем между ними разница, области видимости мимо него тоже видимо прошли.
>>1296211Не, книга норм Andrei Alexandrescu C++ Coding Standards, там как раз и советуют избегать выделения и освобождения памяти в разных местах.Это тупой пример от меня, просто я знаю что он точно работает, но почему-то противоречит написанному “Не возвращайте указатель/ссылку на локальную переменную”или может когда выделяешь память в куче переменная уже не считается локальной. короче СЛОЖНО.>Возвращать указатель на временный объект очень хуевая идея.Ну теперь понятно что хуевая. Просто я в тот момент думал что компилятор сам оптимизирует и возвращает ссылку на временный объект и у меня диссонанс возник от того что компилятор может, а я не могу, а там оказывается так http://alenacpp.blogspot.com/2008/02/rvo-nrvo.html>компилятор может не создавать временный объект и сразу же создать строку в возвращаемом объекте>>1296232Ну давай, объясни мне на пальцах разницу между кучей и стеком (а то я действительно не понимаю)
>>1296229допустим:int(звездочка) ReturnTemp() {int a = 5;int(звездочка) b = &a;return b;} < Тут.Если верить дебагеру, конечно, ради интереса создай класс с деструктором, создай переменную этого класса в main и пройдись дебагером по коду нажимая F11, деструктор будет вызываться именно на этом месте.
>>1296239>Ну давай, объясни мне на пальцах разницу между кучей и стеком (а то я действительно не понимаю)За бесплатно? Хуй тебе, иди гугли, смотри видео на ютубе, или в книжке прочитай какой-нибудь, если и так не поймешь, то увы.
>>1296239>Это тупой пример от меня, просто я знаю что он точно работаетОн работает. Ровно по такому принципе работает функция fopen - она выделяет память под структуру типа FILE и возвращает указатель, и надеется, что ты вызовешь fclose, в котором память освободится. Эта книжка не про то, работает или нет, а про то, как надо делать.Есть такой язык Си, и в нем нужно выделять буферы внутри функций. Так как сборки мусора нет никакой, то нужно соглашение о том, кто будет выделять, вызывающий (как работает например strcpy - выделяешь снаружи буферы под результирующую строку, вызываешь) или сама функция (так работает fopen). Первый способ считается получше для авторов библиотек, потому что считается, что выделевший память под буфер точно не забудет ее освободить, а вот если функция сама выделяет память, заставлять юзера ее освобождать - это он должен документацию читать, бе.В С++ оба этих способа являются неправильными. Буферы должны выделяться в конструкторах, а освобождаться в деструкторах. Не потому что по-другому не работает, на С++ можно писать так же, как на С, а потому что это будет не С++, а С или крестосуржик.>когда выделяешь память в куче переменная уже не считается локальнойКонечно нет. Локальной переменной будет указатель на буфер, а не сам буфер.> Просто я в тот момент думал что компилятор сам оптимизирует и возвращает ссылку на временный объект и у меня диссонанс возник от того что компилятор может, а я не могу,Пиздец у тебя каша. Вот посмотри внимательно на код из статьи АленыA MyMethod(A &_hiddenArg, B &var){ _hiddenArg.A::A(); _hiddenArg.member = var.value + bar(var); Return}И скажи, где ты тут увидел, что компилятор возвращает ссылку на временный объект? Наоборот, он принимает ссылку на область памяти hiddenArg и создает объект сразу в ней, избегая лишнего копирования. А ссылку на временный не возвращает никто, потому что по выходу из функции стек чистится и что там будет никто не знает (самое мерзкое, что в 90% случаев все будет работать нормально, так как стек чистится просто смещением указателя, сами данные не трогаются и временный объект немного повисит незатертым новыми данными, поэтому такие ошибки ловятся тяжело).
>>1296263>(самое мерзкое, что в 90% случаев все будет работать нормально, так как стек чистится просто смещением указателя, сами данные не трогаются и временный объект немного повисит незатертым новыми данными, поэтому такие ошибки ловятся тяжело).Прога все равно вылетит при обращении к нему, один раз по глупости допустил такую ошибку и прога тупо вылетала.
>>1296263>Наоборот, он принимает ссылку на область памяти hiddenArg и создает объект сразу в ней, избегая лишнего копированиято есть при таком вызове val = MyFunc(); в функцию неявно еще передается ссылка на val?Но вообще я тебя понял, возможно я действительно кодил в стиле C и только сложности себе создавал. Ну значит теперь буду использовать обёртки вокруг new/delete.Еще нагуглил make_unique, который видимо все и используют, чтобы не утруждаться с освобождением памяти.
Анон, если я пройду полностью специализацию от Яндекса на курсере, то смогу устроиться в какую-нибудь компанию в ДС? Нужны деньги, чтобы снять короткометражку, работать в it всю жизнь не планирую.
>>1295983 (OP)Так, посоны, поясните мне за эту хуйню.struct S{ std::forward_list<S> fl;};int main(){S s;s.fl.push_front(s);s.fl.front().fl.push_front(s);s.fl.front().fl.front().fl.push_front(s);}Чё это за хуйня и почему это вообще работает. У меня мозг взрывается уже.
>>1296477Ну объясни же? Такая хуйня ведь не должна работать, но работает, я не могу представить себе эту структуру даже, она сама себя включает сук.а
>>1296478Блять, я вот просто не понимаю, ну объясни внятно что по твоему мнению не так? Почему это не должно работать?
>>1296480Ну там в объект c вкладывается объект с Причем не один, сколько угодно можно так делать. Это не нормально я считаю.
>>1296483>>1296480struct S{ std::vector<S> vec;};int main(){S s;for(auto i:{0,1,2,3,4,5,6,7,8,9,10}){ s.vec.push_back(s);}std::cout<<s.vec.size()<<std::endl;}Вот, смотри! 11 раз в векторе, который часть объекта s содержится s!
>>1296488> содержится sА в самом первом сверху s содержится сам этот вектор! Схуяли! Ну я правда не понимаю, бля. Правда размер 10.std::cout<<s.vec.back().vec.size()<<std::endl;
>>1296492Ну а дальше 9, 8, 7. Как это работает бля. А?std::cout<<s.vec.back().vec.back().vec.size()<<std::endl;
>>1296494Если ты, долбоебушка, думаешь что это один и тот же объект вложенный в себя же несколько раз, то ты ошибаешься, хотя бы проверил бы - https://ideone.com/xlpi2cНо даже если и не так, то я вообще не вижу смысла в твоём негодовании. Ну что так? АЛЛО!!!?!?!!? Объясни внятно, блять.
>>1296500Блять, я тебе что-то должен? Хули я тебе должен что-то "сразу сказать"? Я за свое образование платил бабки, между прочим.
>>1296504Ну ты мог бы сразу сказать, а не выёбываться. Не должен, конечно, но мог бы. Выебоны не красят человека.
>>1296506Ну возможно, но у меня пригорело просто. Да и я сначала не понял что именно тебя смущает, на самом деле.Ты концентрируешь свое внимание не на тех вещах, лучше уж разберись что такое стек и куча, что значит передавать объект в функцию по ссылке или по значению, в чем разница, базовые принципы языка пойми, вместо этого.Даже если и объект может хранить ссылку на самого себя, то что с этого?Даже если сделать так чтобы в этом примере это все был бы один объект, то что с того?https://ideone.com/0RNfi0Ну есть такая возможность в языке, что дальше?
>>1296512>Ты концентрируешь свое внимание не на тех вещах, лучше уж разберись что такое стек и куча, что значит передавать объект в функцию по ссылке или по значению, в чем разница, базовые принципы языка пойми, вместо этого.Я всё это знаю, я так-то уже полтора года как работаю, просто у меня случился смысловой глюк, вот эта очевидная мысль что там просто копирование происходит с каждым разом никак не хотела приходить в голову, я понимаю, что это какой-то бред, но не понимаю, почему так. Поэтому и скинул, чтобы кто-нибудь тыкнул. Спасибо ещё раз.
>>1296517Аа, так вот откуда такой хейт. это>>1296471 мой первый пост. Ладно, действительно всё очевидно тут, спасибо, что помог глаза разлепить. Добра.
>>1296503с твоими исходными данными и установками на жизнь лучше, наверное в веб податьсятам и заработаешь денежку на свою самореализациюкресты это не лучший способ по быстрому срубить бабла
>>1296890Есть способ, но для этого нужна ещё одна переменная.В конструктор передаешь какую-либо локальную переменную по ссылке, например bool, внутри присваиваешь ей какое-либо значение нужное тебе, например true если ошибки нет или false если есть какая-то ошибка, в зависимости от того какое значение уже в main обрабатываешь ошибку, если она есть, если нет то просто продолжаешь работу. Это как пример, но я думаю это не самый лучший вариант, т.к это сферический костыльный-велосипед в вакууме и лучше кинуть исключение.Алсо, насколько мне известно, так деды делали когда в плюсах ещё не было исключений.
>>1296840>как в крестах срубить бабла? пишешь софт на заказ: фрилансерские биржи либо находишь людей кому нужно сделатьплюс часть людей работают в блеке, либо серый софтлибо shareware - пишешь софт, потом его продаешь, как то еще монетизируешьно большинство предпочитают просто устроится на работу в офис либо удаленно и работать за зарплату и премиикто-то идет в стартапы в надежде получить опционы сверху
>>1296890ну, как раз это и был один из мотивирующих факторов, почему страуструп сделал в с++ исключенияв языке ведь еще есть и перегрузка операторов, из оператора тоже ведь ошибку можно вернуть только исключениемесли же coding styles проекта предполагает полный отказ от использования исключений, используется методика двух этапной инициализации объекта, с функцией init() и остальными костылями в придачулучше в таких проектах не полностью отказываться от использования исключений в конструкторах, а использовать фабрики классов, либо более сложные порождающие паттерны, но отлавливаеть все исключения в самой фабрике
Вопрос от ньюфага. Прочитал Липпмана, и возник такой вопрос. Для средней сложности программ я пока не вижу необходимости явно динамически выделять память под объекты оператором new, ведь чуть не все нужные вещи можно сделать через контейнеры стандартной библиотеки. Соотвественно, не нужно ебаться с половиной самых сложных и заебистых фич языка.Я что-то упускаю, и все эти конструкторы копий и перемещения, перегруженные операторы присваивания, умные указатели и виртуальные деструкторы всё же нужны, или и без них норм?
>>1297034Вот здесь посмотри, в djvu:https://vk.com/wall-54530371_146817Вероятно тот же файл, но я не проверял:https://rutracker.org/forum/viewtopic.php?t=3847786№33819, выберешь только его в списке закачке.
Анон, помогай! Есть таблица системных вызовов шинды.https://j00ru.vexillium.org/syscalls/nt/64/Как обращаться к апи я знаю, но как мне использовать эти системные вызовы напрямую? Что мне делать то с этими байтоёбскими значениями, чтобы получить желаемый результат, без вызова native/win api. С меня тонны нефти.
>>1297029В контейнеры в STL это и так динамика, просто они изначально сделаны так, чтобы пользователь не волновался о памяти, она выделяется в методах/конструкторах и чистится в деструкторе, как это и должно быть в плюсах. Ты этого не видишь, но это есть.Динамика нужна в любом случае, ибо стек содержит в себе места всего под 1 МБ памяти с оговоркой на то что можно увеличить до двух и если тебе нужно хранить какие-то большие объекты во время работы программы ты нигде как кроме в куче их не вместишь.
Подскажите прогу чтобы только начать пробовать писать. Нашел какое-то входное приложение на андроид(сололерн) и тип там предлагают Сode::Blocks. Нормальный он? или есть что-то по красивше, ибо на официальном сайте он обновился последний раз в 17 году.все что знаю по програмированию это паскаль на школьном уровне(до двойных массивов) и сейчас вот до самостоятельного написания функций с процедурами в институте дошел.
>>1297029Нет, ты ничего не упускаешь. Явно используют new в своем коде только долбоебы-деды, которые уверены, что vector - это медленна, unique_ptr - это сложна, ну и те, кого эти деды научили говну.>Я что-то упускаю, и все эти конструкторы копий и перемещения, перегруженные операторы присваивания, умные указатели и виртуальные деструкторы всё же нужны, или и без них норм? Это нужно дизайнерам классов. А дизайнить рано или поздно придется. Но, опять же, если твои классы будут содержать готовые классы типа векторов, то пилить вручную все эти конструкторы тоже не придется. Но, тем не менее, нужно знать, как это работает.
Аноны, имеет смысл на современных процессорах ебаться с апроксимацией алгоритма вычисления расстояния между двумя точками?Короче говоря, квадратный корень так и остался тормозной операцией от которой надо бежать как от ёбаного огня или эта такая же примитивщина стала теперь как перемножение даблов?Область применения игоры, так что критично только время, ну и чтобы алгоритм не сильно (%15 максимум) пиздел.
>>1297518угуплюс всегда можно глянуть ассемблерный выхлоп компилятора, чтобы точно знать, что будут использоваться нужные инструкции
>>1297520Можно их просто взять и вызвать самому (если не сталкивался, то нужно искать SIMD intrisics).Если делается много вычислений в цикле, можно очень большой прирост получить если самому все на интринсиках написать.
>>1297493Вот сам посмотри:https://godbolt.org/z/ZgTiWrС ffast-math компилятор делает rsqrtss и один шаг Ньютоном. Без ffast-math делает дополнительную проверку на отрицательный операнд.
>>1297493>Область применения игоры, так что критично только время, ну и чтобы алгоритм не сильно (%15 максимум) пиздел. Что у тебя там за игры такие
>>1297029>и все эти конструкторы копий и перемещения, перегруженные операторы присваивания, умные указатели и виртуальные деструкторы всё же нужныОни нужны, если класс хранит данные в куче, а сам при этом ведет себя как value-тип (например строки или большинство коллекций из стандартной библиотеки). На практике в прикладных программах это редкость, а классы, которые управляют данными в куче в 99% случаев некопируемые, поэтому проще у класса удалить копирующий конструктор и оператор присваивания, и управлять указателями через unique_ptr или new/delete.
посоветуйте какие книги начать читать для начала, и что лучше сначала изучать C++ или C#? И вообще с чего начать(
>>1297747>Они нужны, если класс хранит данные в куче, а сам при этом ведет себя как value-тип Смотри.struct Yoba {vector<Danniye> danniye;};Класс хранит данные в куче, а при этом сам ведет себя как value-тип. И никаких конструкторов копий и перемещения. Чудеса.
>>1297749Скажу по своему опыту, я начинал освоение с книги: "с++ за 21 день", спустя пару дней я начал писать пакмана и даже в 2д неплохо вышло на винбги. З.ы. это было первое моё программирование в жизни, а с, с++ стал любимым языком)))
>>1297764просто я даже не знаю с чего начать, нигде не могу найти какие книги начать читать, ведь все с чего-то стартуют ибо не бывает такого чтобы кто-то взял, прочёл книгу и сразу всё понял. Так много вопросов и так мало ответов, спасибо за совет
>>1297766Ну я вот вкатываюсь, тоже нуфаг, так что может подскажу. В предыдущих тредах в шапке давали ссылку, в этом вроде нет:https://github.com/sosachbot/cppthreadhat/wikiДля вкатывальщиков с нуля есть книга Страуструпа, там он всякие байки с историями и прибаутками на 2 тысячи страниц раскатывает. Я такое читать не смог, захотелось разъебать монитор, но может тебе зайдет. А вот книга Липпмана и Ко мне зашла прямо заебок. Но она предполагает, что ты уже немного шаришь в программировании. Третью книгу из рекомендованных для нафань (Прата) я не читал, не могу сказать что там.Ну и в целом готовься, что вкат займет достаточно много времени. Концепции там после динамической скриптопараши могут показаться сложными, да и сам объем материала весьма большой. Даже вводные курсы больше тысячи страниц.
>>1297766ХЗЯ начинал кодить с варика 3. Сначала писал простые триггеры: пик 1Потом немного осваивал Jass: пик 2Ну а дальше купил какую-то книжку по с++ обложка была жёлтая с нарисованным человечком сидящим за столом, помню меня она очень бесила т.к. там автор (насколько я помню) довольно специфично обучал кодингу т.е. книжка явно была не для новичков в программировании вообще.
>>1297763Хорошо, когда так просто можно сделать, но это возможно далеко не всегда. Типовой пример: pImpl с наследованием. То есть ты хочешь избавиться от лишних аллокаций, и сделать так, чтобы наследники и родитель использовали один приватный объект.
>>1297826Да-да, убегай скорее из треда, пока тебя страшные байтики в жопу не выебали.Нахуя вообще кресты изучать, если не хочешь знать, что там под капотом, и не умеешь этим пользоваться?
>>1296460Не слушай ебланов.Пройди курс и напиши сетевую игру на буст асию и кокос2D под андроид (тупо танчики 2мерные). Еще желательно знать базовые алгоритмы и структуры данных (первые 3 курса специализации от вшэ и какой то забугорной шараги на курсере).60-70 к на руки твои. Через полтора года проси 150.
>>1296460А сори блять, я не дочитал про твою мотивацию про короткометражку.С таким подходом рили нахуй иди, учи верстку и верстай на фрилансе странички с индусами.>>1297884Вот этот совет мб кому то адекватному будет полезен.Если переводить на 40ч/неделю думаю займет от полугода до 9 месяцев вся затея.
Накидал себе говно чтобы не ебаться с расстановкой разметки в бугурт-тредах, а оно не видит пробелы и \n. Внимание, вопрос, где я долбоеб?https://pastebin.com/zrZA9fBQОбходной костыль уже придумал, конечно, но все таки интересно
>> noskipwsИдите вы нахуй эксперты хуевы, короче. Как байтоебство обсуждать так все молодцы, а как рассказать что >> пробелы сжирает так все в молчанку играют блять
>>1297938> while (file >> a)Это форматированный ввод (исключает space symbols). Тебе нужно file.get(a).
Анон, что то я туплю.Режу прогру на составляющие кладу в разные .срр файлы, выношу объявления в .h заголовки. Но большинство функицй и классов используют одну и ту же библеотеку.Мне в каждый заголовочник кидать инклюды?Алсо, компиляю используя утилиту make. Допустим сначала я компилю все файлы в объектные, мои объектники будут излишне жирными из-за инклюдов? Или всё станет похуй на этапе линковки?
>с++>в 2018>когда есть функциональные языки>когда есть высокоуровневые языки аля С# или java>когда даже жабаскриптер джуниор получает больше синиора крестовикаНу вы и говноеды господа
>>1297839В Е К Т О Р И З А Ц И ЯМ Е М О И З А Ц И ЯЛ У П А Н Р О Л Л И Н ГК О Н С Т А Н Т П Р О П А Г Е Й Ш Н
>>1297978Самое главное, чтобы послепрепроцессинга в единице компиляции у тебя были нужные декларации функций. Почитай про модель компиляции Си.
>>1298030Тоже проиграл с манямирка.Это в лучшем случае если повезет. И после 3х лет работы. И так и быть может дадут как жс-прогеру в москве
Я и не видел что перекатили тред. Репостну вопрос сюда тогдаАноны, как можно написать функцию, которая будет искать все возможные варианты сум какого-то числа? Как на пике. Пытался найти возможные суммы числа (пик 2),а после перетасовывать элементы в них, но выходила какая-то хуйня. Если менять элементы сравнивая с последним, то строки по типу 1 2 2 будут давать мало вариантов, а если с первым - то все остальные. Может кто подсказать примерный алгоритм? Инет обрыл, нашёл только варианты как для пик2. Уже 6 часов сижу думаю, и нихуя не придумал. Если кому нужно, функцию для поиска пик2 оставлю под спойлером cpp.sh/8554k
>>1298212Тебе нужно найти все уникальные пермутации каждого уравнения твоего второго пика. Так как элементы повторяются, то тебе нужны именно уникальные пермутации. Быстрое гугление дало https://www.geeksforgeeks.org/distinct-permutations-string-set-2/ что, возможно, даст тебе ответа.
>>1298224Пермутации ведь учитывают все элементы? То есть в строке 1 1 1 2 оно будет и еденицы с еденицами тасовать?
>>12982121 + 1 + 1 + 1 + 1 - это 00002 + 1 + 2 = ( 1 + 1 ) + 1 + ( 1 + 1 ) - это 10013 + 1 + 1 = ( 1 + 1 + 1 ) + 1 + 1 - будет 1100И так далее.
>>1298230Это ведь битмаски называется? Я с ними не работал еще просто, инфу бы какую-то почитать сначала.
>>1298233Это тупо двоичные числа. Только тебе нужны уникальные комбинации, соответственно надо будет сортировать по длине последовательностей нулей и единиц, чтобы 1110 и 0111 учитывались один раз.
>>1298234Как раз таки мне нужны не уникальные, если я тебя правильно понял. То есть 1 1 1 2 и 2 1 1 1 это разные строки. >>1298235Ну я пробовал растосовать их обратно, методом свапа и потом возвращения. Если сравнивать все элементы с первым, то не выдаст всех комбинаций для строк типа 1 1 3, а если с последним - то для 1 2 2. Если же поставить два условия, то почему-то не меняются местами пары из 2 элементов. Остальные при этом работают. cpp.sh/4uwv7 - то, на чём остановился.
Аноны, скорее всего не туда заполз, но больше некуда.Решил я значит поучить мат. анализ, нашел учебник Фихтенгольца (вроде все хвалят) и чёт нихуя не могу понять, что за хуйня тут несется? Допустим у меня есть число e=128, ведь оно может быть любым больше нуля. И есть два вещественных числа 1.7354 и 50.8458Если я заключу из между 125 > 1.7354 > 1 и 125 > 50.8458 > 1, то они обязательно равны? Как это вообще блять? Может быть кто-то тут сможет мне пояснить, ибо в тематике пусто
>>1298239>Как раз таки мне нужны не уникальныеНу тогда просто по возрастания берешь все числа от 0 до N-1, представляешь в двоичном виде и суммируешь последовательности единиц, и вместо них выводишь сумму + 1. Если два нуля подряд, выводишь + 1 + , если ноль между единиц, выводишь +. Еще надо учитываешь лишние единицы в начале и конце.
>>1298240Какое угодно e. Ты взял одно. А возьми e=1. Возьми e=0.23131. Возьми e=0.0000007. Если какое e ты бы не взял, неравенства действуют - значит, они равны.
>>1298264Спасибо за подробное объяснение, анон. Алсо, что посоветуешь по математической логике почитать?
>>1298267Нам в универе читали по Введении в математическую логику Эллиота Мендельсона. Потом сам для себя дочитывал в оригинале. Как по мне, вполне хорошо объяснено всё про формальные логики, модели, теорию множеств, арифметику и тд. Больше не вникал в данный предмет.
Крестаны, не прогонитеЕсть массивint arr[2][3] {0};Хочу вытащить из arr подмассив. Почему это можно сделать только через пердолинг со сслыкой:int (&sub)[3] = arr[1];Почему нельзя пропустить ссылку и написать простоint sub[3] = arr[1]; // ???Тут дело только в том, что массивы нельзя присваивать, или есть что-то еще?
>>1298419Не, вектор "нечестно". Именно на массивах надо.Вообще вопрос возник в связи с range-based for - хрен пойми, чего он от меня ждет. То ли я тип в принципе неверно задаю, когда пишу без ссылки, то ли он (for) тупо не может инициализировать, а тип я угадал dthyj.
>>1298410Ты бы Си подучил прежде чем в плюсы лезть. Почитай про массивы, про array decay и как вообще с массивами работать. Ты, по идее, хочешь скопировать arr в sub. Или чтобы sub указывал на подмассив. У массивов нет такой семантики, только лишь у указателей.
>>1298439О, пошла стандартная мантра про неосиляторство. Как будто в устаревшем низкоуровневом говне есть что-то сложное, лол.
>>1298439>С вышкой физикапросто на твоей фирме кто-то тащит за тебявозникают сложные проблемы, которые ты не видишь, но скиловые трудяги (с кодерской вышечкой, да, да) просто вовремя их решают и всеты этого просто не замечаешь, делаешь текучкуно когда вот такой челик свалит на другую работку, эти проблемы придется решать тебеи тут ты обосрешсяэто касается всех вкатывальщиков - пока нужно выполнять текучку, они справляютсяно как только случился факап - проблему они решить не могут
>>1298690Хуйню пизданул. У меня у самого прогерская вышка, но там ничему такому о чем ты говоришь не учат. Умение решать такие задачи только на практике и нарабатывается. А в универе нам вообще лекции Кнута читали. И это еще не самый плохой вариант. Лучше уж Кнут чем книги фимозных преподов застрявших в эпоху Дельфи.
>>1298807лабы, курсачи сам писал? диплом сам делал? вот тебе и практика.никто не запрещает это на современных технологиях делатьесли ты ничему не научился в вузе, то это не "эпоха дельфи" виновата...
>>1298817Я то как раз всему и научился потому что поменьше доверял вузу и сам учился. И поэтому собственно и съебал с Рашки и теперь в Ирландии работаю. И да ирландские вузы ничем не лучше в этом плане. Алсо про лабы посмеялся спасибо. Учитывая уровень их полезности который стремится к нулю.
>>1298820Двачую. Вкатывальщик проштудировавший SICP + HDTP уже на голову выше студента среднего тех вуза.
>>1298820>всему и научился>теперь в Ирландии работаю>посмеялся спасибои сидишь такой в рабочее время на ресурсе для даунов, студентов и студентов-даунов. освещаешь нам путь к Знанию.
Я только недавно начал изучение с++.Вопрос: Как в char-массиве выполнять арифметические преобразования? К примеру: char-массив - 7 + 3. Как преобразовывать 7 и 3 из char в int? Как мне это посчитать? Без использования стринг.
>>1299136>+ 3. >Как преобразовывать 7 и 3 из char в int? Как мне это посчитать? Без использования стринг. Прибавь к каждому символу '0' и домножь на базу, балбес
>>1298212>как можно написать функцию, которая будет искать все возможные варианты сум какого-то числа?Я как-то такую прогу писал, но она на другом компе. Гугли производящие функции, короче, может где-то найдёшь задачу про варианты размена суммы определёнными монетами, а потом обобщишь, я сам уже не вспомню, что там было конкретно.
>>1299277>Сколькими способами можно разменять доллар монетами в1, 5, 10, 25, 50центов?https://www.mccme.ru/ium/postscript/s12/gasnikov-5.pdf Вот тут есть пример.
>>1299277> которая будет искать все возможные варианты сум какого-то числаА, жопочтец, думал считает их количество. Гугли алгоритм генерации разбиений, беглый гуглинг вот такое выдаёт, вроде подходит.http://old.tusur.ru/filearchive/reports-magazine/2008-1/113-119.pdf
>>1299277Да уже выше скинули пару ссылок. Я по одной из них решил. Сейчас над другой хуйнёй голову ломаю, но тут уже сам буду решать. За помощь кстати спасибо, всем ответившим.
>>1297781Предыдущее издание лучше с точки зрения нуба, правда оно написано еще до с++11.В пятом издании он очень часто, иногда по нескольку раз на одну страницу, прибегает к формулировке "будет объяснено позже страниц эдак через 500-800", отчего остается слишком много открытых вопросов. В четвертом же издании весь материал изложен вполне последовательно, после прочтения, например, главы, остается минимум неясностей.Алсо, в пятом издании то ли Липпман разучился излагать мысль, то ли это просто перевод шакальный, но там есть места, которые вообще не поддаются никакой логике. Так же часто у задачек дибильные формулировки.>Для вкатывальщиков с нуля >книга СтрауструпаЭто шутка, мем. С первых же страниц идут классы, такие штуки как new и т. п. Короче чтоб это читать нужно уже знать язык в объеме той же книжки Липпмана, например.
>>1297781Нуфаг прочитавший Прату репортинг. Книга хорошая, дня полных нуфагов самое оно. Даст неплохую базу, но при этом читается вполне легко. В конце каждой главы есть задачи и вопросы по теории. Мне книга понравилась, когда начинал читать Липпмана не понял что он хочет уже на 80 странице и забил хуй. С Пратой таких проблем не возникало
>>1299404потому книга страуструпа для обучения возможностям конкретного языка, а не для обучения программированиюи это правильно
Вкатился из админства, писал скрипты до этого bash и на хуйне типа сирешеткипрочитал дейтела спп по диагонали , покопипастил примеры - вообще нихуя не понятно, в первый раз вижу столько воды, ебашит рекурсию в 4главе, новичкам с 0 наверное кайф вообщепосоветуйте книгу по составлению алгоритмов на примерах(не обязательно цпп, но желательно), может быть притянутое ближе к стм\ардуино, чтобы примеры были "а че так можно было?" , как можно больше примеров надо чтобы разбиралосьвообще не понимаю как обрабатывать большое количество исключений, начинаю пиздец путаться в алгоритмах, хочу понять как думают люди кто разрабатывает что то больше чем линейный скрипт с двумя исключениями и автозапуском лол
>>1299571Потому-что итератор это объект, который хранит в себе указатель на какой-либо объект в контейнере. Для него перегружена операция разыменования, чтобы можно было этот объект через итератор достать.
>>1298663С++ язык высокого уровня. На нем ты можешь писать как легкие, так и сложные программы. Все зависит от твоего уровня знаний.
>>1299573>прочитал дейтела спп по диагонали , покопипастил примеры - вообще нихуя не понятно, в первый раз вижу столько воды, ебашит рекурсию в 4главе, новичкам с 0 наверное кайф вообщеКниги для обучения с нуля на С++ все говно. Я учил С++ когда за плечами был бейсик и делфи, было более-менее, хотя глаза у меня на все открылись после прочтения K&R и Дизайна и эволюции. А с нуля утопнешь в деталях, не видя сути.>посоветуйте книгу по составлению алгоритмов на примерах(не обязательно цпп, но желательно)Кормен. Но вряд ли тебе нужны алгоритмы.>может быть притянутое ближе к стм\ардуиноВо-во, тебе не алгоритмы нужны. В эмбеде же примитивная логике везде.>вообще не понимаю как обрабатывать большое количество исключений, начинаю пиздец путаться в алгоритмах, хочу понять как думают люди кто разрабатывает что то больше чем линейный скрипт с двумя исключениями и автозапуском лол Кратковременная память у всех людей это объектов 7, поэтому если у тебя в функции больше 20 строчек, дели ее на логические блоки и дальше мысли уже этим блоками.На самом деле у меня без проблем мозг парсит функции и по 150 строчек, но я просто мысленно выхватываю эти блоки, обзываю их и "не вижу" внутреннее содержимое. Но книги научиться так делать не помогут, надо кодить. Попробуй задачки порешать а-ля олимпиадные, но не сильно сложные.
Двач, помогач? Как превратить файл в unsigned char array ? В C# есть File.Readallbytes. А на крестах как такое вытворить?
>>1299747Как-то такstd::ifstream in("file.txt");std::vector<char> yoba;std::copy(std::istream_iterator<char>(in), std::istream_iterator<char>(), std::back_inserter(yoba));
>>1299627Это несомненно так.Только вот для выосокуровневых задач проще использовать другие языки. Сишку в основном для низкоуровневого говна используют
Анонче, помоги старому.Как проверить на вместимость два параллелепипеда?Попытался сделать, но выходит какое-то говно (пикрил).С меня три.чаю.
>>13000601. Не используй транслит2. Инициаилизруй и объявляй переменные ближе к месту использования, greatSec тебе нужно объявить перед соответствующим if'ом, не раньше3. Пиши по возможности чистые функции и отделяй обработку от ввода и вывода данных. Вообще странно что у тебя есть объект parallelepiped и вместо int yoba::vmestimost(yoba drugoy_object) ты используешь вот эту лапшу4. int great = 0;int (условие) great++;if (great == 1) - можно переписать какif (условие) {int great = 1}Вообще с таким количеством if'ов эта переменная лишняя, достаточно else5. Алгоритм у тебя "первая сторона больше всех сторон, вторая больше всех сторон, третья больше всех сторон" - неправильный. Например кубик 5,4,3 и 4,3,2. Один друг в друга влезут, но 3<4, значит по твоему коду не влезут.Насколько я понимаю, нужно отсортировать стороны по размеру и попарно сравнить. Можно отсортировать хардкоженными ифами типа как тут https://stackoverflow.com/questions/4793251/sorting-int-array-with-only-3-elements , но вообще6. У тебя длина, ширина и высота - искусстенные понятия. Если бы ты задавал параллелепипед массивом из 3 чисел, пришел бы к более очевидному решениюvector<int> yoba1 = {p1.dlina, p1. shirina, p1.visota};std::sort(yoba1...);vector<int> yoba2 = {p2.dlina, p2. shirina, p2.visota};std::sort(yoba2...);int great = 0;for (int i =0; i < 3; ++i) { if (yoba1 <= yoba2) {great--;} else if (yoba1 >= yoba2) {great++};}if (great == 3) ...//если они равны он это не сдетектируетif (great == -3) ...
Ананасы, плиз, хелп.У gcc есть какой-нибудь ключ который проверяет пометил ли я в производном классе виртуальную функцию как override?
>>1300162https://stackoverflow.com/questions/29145476/requiring-virtual-function-overrides-to-use-override-keyword
>>1295983 (OP)вкатывальщик - кун итт.Что лучше для вката в с++, читать книги/смотреть курсы или делать небольшой проект? Проект по моим прикидкам довольно простой и там не сколько сами плюсы, а больше использование библиотеки и готовых методов.
При передаче массива в функцию, передается только указатель на нее, получается что действия над массивом внутри функции изменяют именно его, как именно скопировать массив, чтобы такого не происходило?
ОПРЕДЕЛЯЕШЬ ШАБЛОН ОПЕРАТОР ВЫЗОВА ДЛЯ УДОБСТВА@ЧТОБЫ ПОТОМ ПИСАТЬ huy.template operator<ebat>(rot_straustrupa);
>>1300261копируешь массив во временный массивэтот временный массив передаешь в функцию, она отрабатываетдальше работаешь с измененными данными во временном массивеудаляешь временный массиввсе это можешь завернуть в собственную функцию-обертку
>>1300204>вкатывальщик - кунуже знаешь на что потратишь заработанные кучи бабла?поездки на море неск раз в год, небодяженый кокс и 18ти летние шлюшки? да?
>>1300174а если к тебе, положим, на улице подойдет незнакомый челик, и попросит метнуться ему в магаз за сигами? сделаешь?
>>1300204Читай книги и смотри курсы. Причем с уклоном в байтоебство. Проект писать не советую, тк ты просто напишешь его слабо. Хотя можешь проделать следующую вещь. Написать небольшой проект с текущем уровнем знаний, прочитать тройку другую книг, пересмотреть еще несколько курсачей, подрочить на стаковерфлоу месяцок другой и потом написать тот же самый проект уже с новым багажом знаний. Сравнить свои работы.
>>1300264>array vectorЯ не особо хорошо пока что с ними знаком, пойду почитаю.>>1300274Можно конечно, но кажется это как то костыльно, в стандартной библиотеке же что то должно быть для этого
>>1300285В стандартной библиотеке, как раз все так и устроено, даже еще более кастыльней. На плюсах по-другому не сделать.
Аноны, есть какой-то гайд для непосвященных для БПФ? Нужно написать умножение многочленов по этому способу, на хабре в статьях предполагают что я уже знаю что это. А мы это блять не проходили еще. Сейчас смотрю какой-то видос и возникают вопросы, а ответы хуй где получить можно. В тред математиков пиздовать чтоле.
>>1300340Аноны, разбирающиеся в матане, можете подсказать правильно ли я понял алгоритм? Сначала мы имеем два многочлена какой-то степени. Далее мы расширяем их степень до 2n-1, и в первый мы записываем ну или принимаем как чётные части результируещего многочлена, а во второй - нечётные. Далее мы ищем узлы интерполяции которые равны корню из комплексной единицы в степени n, и после ищем значении A(x^2)+x*B(x^2)в этих точках, и поскольку поточечное умножение равно свёртке функций, то мы записываем его в результирующий массив. После интерполируем полученные значения и на выходе получаем многочлен-результат. Так, или где-то ошибки есть? Голова уже не варит пиздец
>>1300338>Компик себе куплю, буду в игоря играт мммто есть 8м часов отъебашишь в офисе за компомпридешь домой и будешь еще 4+ часа сидеть за компом но уже "разлекаться"?меня так на 3 года хватило, потом я кончился как программист и как человек
>>1300025>Сишку в основном для низкоуровневого говна используют Ай да мудило, хуй тебе в стыек.Все обстоит ровно наоборот. Сишку используют для души, для возвышенного. Сишка - это наивысший уровень блаженства.А всякая ентерпрайз-хуита вроде джавы или ришотки - это бизнес-задачи, это приземленное, это низость.
>>1300370Во первых если мы говорим о чистом Си без богомерзких плюсов то возможно. Во вторых, джава для высокоуровневых задач намного лучше. В третьих, твои возвышенные речи подошли бы лиспу. Вот он действительно возвышенный а богомерзкий си и его отроки для бизнеса и прочего говна
>>1298690Ох ебать давай, чем твоя кодерская вышечка тебе так помогла прям?Я если че и в ОС/алгоритмах[/сетях не хуже колег шарю, работаю в БОЛЬШОЙ ИЗВЕСТНОЙ КОМПАНИИ.
>>1296051>или указатель на локальную переменнуюПотому, что они находятся на стеке, а стек довольно быстро перезаписывается.>А как тогда правильно возвращать сишную строку?1. В теле функции выделить память каким-нибудь malloc-ом, запихать туда строку и вернуть указатель на память.2. Передать в эту функцию указатель на память.
>>1300586для расширения функциональности классы стандартной библиотеки рекомендуют агрегировать, а не наследоваться от них, тому есть причины, которые нет желания здесь объяснятьтакже поведение стандартных контейнеров расширяется введением собственных шаблонных функций, принимающих итераторы, либо делают более специализированную функцию, принимающую конкретный контейнер, их еще называют "функции помощники"в случае если функция-помощник делается для твоего класса, ее можно объединить в одно пространство имен, но засорять пространство имен std не рекомендуется
>>1300404Э, ты не путай уровень языка с уровнем задач.Язык относят к высокому/низкому уровню исключительно по тому, насколько приходится иметь дело непосредственно с железом при написании программ, все остальное от лукавого.А уровень задач, решаемых с помощью языков - это вообще в значительной мере субъективная штука. Софт для марсоходов, например, писался на С, и называть это задачей низкого уровня по меньшей мере странно. С другой стороны, задача запилить персональный хоум пейдж в интернетике, например. Решается задача при помощи языков высокого уровня. Однако, сама задача - плевое дело, высокой квалификации не требует, ну никак нельзя сказать, что это задача высокого уровня.
сап, котаны.удачно вкаттился в кресты.теперь думаю набираться знаний и пробовать через 1,5-2года вкатиться в геймдев.что осваивать? опенгл? фреймворки для 2д игрушек для начала?с чего начать и куда рыть?заранее спасибо.
>>1300971>удачно вкаттился в крестыВот тут ты и проебался.>>1300971>1,5-2года вкатиться в геймдевUnreal Engine.
>>1300980платформеры лучше клепать на %языкнеймангельский ? + еще полтора годазаходи на сайты уехавших компаний и смотри требования, дизайнить локации у них есть местные индусы, чтобы вкатиться нужно быть сеньером помидором с 6+лет стажем за 5-8к бачей, когда все другие отрасли на с++ уехавшие имеют ощутимо больше, линейная алгебра и спп эксперт кноулейджвсе валят на мобилки потому что деточки подрастают новые, и им уже нахуй не нужно пк, а если не для бизнеса можно долбиться куда хочешь>удачно вкатился в кресты.за 21 день ?
>>1301000>на крестах меинстрим это не >почти веськак ты с такими формулировками своих вопросов докатился до работы на плюсахопределись с направлением и должностью, там видно будет
>>1295983 (OP)SupВопрос по openmpЕсли подрубаю распараллеливание, в X и Y часто оказываются одинаковые числа, если заполнять их нормальным распредлелением (пик 2, явно видна наклонная линия). Если заполнять их биномиальным, то проблема отсутствует (пик 3). Если генератор случайных чисел не threadsafe, то почему нормально отрабатывает биномиальное распределение?
>>1301188>Если генератор случайных чисел не threadsafe, то почему нормально отрабатывает биномиальное распределение? Какая нахуй разница, как проявляется UB?
>>1301208Одновременное обращение к двум разным элементам одного массива это data race? Даже если оба потока, как в моём случае, пытают прибавить единицу?
>>1301215Ой-вей... ГПСЧ имеет состояние. Которое он меняет при запросе следующего числа.Использование не-потокобезопасных методов у объектов из разных потоков без синхронизации ведёт к data race и UB.
>>1301274Ебанутый синтаксис у этого вашего си++, вот и не понимаешь.Это же надо додуматься, фигурными скобками обозначать кучу семантически разных вещей, таких как: операторные скобки/локальные скоупы, определение класса, определение структуры, тело функций/методов, определение перечислений и инициализация массива/структурытут вообще заебись: разделитель - запятая вместо точки с запятой. Но зато столько дрочева на cout << hui << endl и вырвиглазные лямбды, шо пиздец.
>>1301385у тебя 3 вида скобочек в распоряжении, все занятыальтернатива скобочкам - ключевые словано си проектировался в первую очередь с соображением лаконичности, чем синтактической чистоты
>>1301410Если бы действительно делали упор на лаконичность, то получился бы форт. А так взяли алгол и заменили begin/end на {}
>>1301421си - структурная парадигма программирования, практичный алгол, в общем, а форт - стековый яп, сравнивать их вообще нельзя
>>1301451Наверное, чтобы они могли конвертиться друг в друга, через конструктор преобразования или конвертирующий оператор
А существует ли IDE, которая давала бы подсказки по порядку вычислений выражения? Или плугин на какую-нибудь IDE.Ну то есть чтобы набил i++ + ++i, глянул подсказку как оно считаться собирается и сразу понел, что хуиту написал.
>>1301512бля, возьми да распечатай себе табличку с приоритетом операторов и не еби вола. двадцать раз в неё посмотришь, на двадцатьпервый уже смотреть не будешь
>>1301512Ахуеть, вот это ты ленивый. Не выебывайся и подрубай дебаг, если в уме просчитать не можешь.
>>1301512Компиляторы же (гцц как минимум) в таких случаях справедливо информируют тебя о том, что ты мудак.
>>1301421>Если бы действительно делали упор на лаконичность, то получился бы форт.Ты бы ещё "брейнфак" вспомнил.
Можно ли написать функцию ввода? Например, что то вроде:void vvod(double x){ cin>>x;} , но чтобы это работало?
сап двач, допустим, есть класс хуй и в нём есть поле длина хуя. Есть 10 объектов хуя с разной длиной. Можно ли как-то посчитать сумму длин всех объектов?
>>1302250ну бля я же не могу как со структурами массив объектов сделать автоматически, чтобы потом эта функция всё брала оттуда
хотя не совсем, мне сказали надо придумать:-функция-друг, позволяющая определить общую стоимость устройств, входящих в оборудование;я придумал как реализовать это вне самого класса, а как так хз
>>1302260тут тоже всё понял, но тогда следующий вопрос:Вот создаю я массив объектов, но ведь тогда у меня по сути объекты без переменной, а просто arr[0], arr[100]. Можно ли их как-то обзывать?
>>1302184И как задетектить все созданные объекты определённого класса (Если заранее не был предусмотрен массив)?
>>1302285Так предусмотри.https://stackoverflow.com/questions/18015276/how-to-automatically-maintain-a-list-of-class-instances
>>1302285Создаешь массив указателей на объекты.Аргументом конструктра суешь массив, this бушбэчишь. Например.
>>1295983 (OP)Обоссыте но не бейте, алгоритм вроде бы правильно составил, но с массивами в с++ не получилось. Как сделать функцию которая принимает массив и возвращает тоже массив?https://pastebin.com/QRKUjn60
>>1302290>Как сделать функцию которая принимает массив и возвращает тоже массив?Прочитать Кернигана и Ричи. Также прочитай вот это http://acm.mipt.ru/twiki/bin/view/Cintro/CfaqPointer , ты соснул на пункте 2.6Твой вуз - говно, если учит тебя алгоритмизации с помощью сишки, которую еще к тому же называет с++.В сишке массив - это только статический массив с известно заданным размером. То есть int arr[5]; это массив. В крайнем случае int arr[] = {1,2,3,4,5};, так как тут размер известен из присваивания и все. Это будет массив, который компилятор выделит тут же в текущем скоупе на стеке.Когда ты пишешь int yoba[] в параметре функции, это полный эквивалент int@ yoba (@ - это звездочка) - то есть указатель на какой-то буфер с интами неизвестной длины. Соответственно не работает у тебя, потому что sizeof(nums) равен вовсе не тому, что ты думаешь, он равен будет размеру указателя на твоей системе. набери std::cout << sizeof(nums) << std::endl; и проверь.Сделай вот такyoba(int@ arr, int arr_length), а лучше yoba(int@ arr, size_t arr_length)Возвращать тебе ничего не нужно, потому что ты передаешь указатель, и функция будет менять данные по этому указателю.Если ты не хочешь менять входной массив, а хочешь иметь два массива, то нужно написать такую сигнатуру:void yoba(int@ input, int@ output, size_t arr_length).А вызывать так:int input = {1,2,3,4,5};int output[5];yoba(input, output, 5)С динамическими массивами yoba тоже будет работать:int len = 5;int@ input = (int@) malloc(len @ sizeof(int))int@ output = (int@) malloc(len @ sizeof(int))yoba(input, output, len);И на будущее запомни: не вздумай никогда вызывать malloc внутри подобной функции, выделяй память всегда снаружи и там же освобождай.
Ну и да, когда выпустишься из своей говношараги, пиши так:vector<int> yoba(const vector<int>& yoba_input){}А вызывай так:vector<int> vec(5);vec = yoba(vec);Для экономии можно in-place обработку сделать:void yoba(vector<int>@ yoba), но лучше не надо.
>>1302294Тогда уж лучше сделать как-то так, чтобы не засорять логику маллоками и сайзофами:typdef struct (int@ items;size_t len;) moi_massiv;moi_massiv@ create_moi_massiv(size_t len) ...moi_massiv@ moi_massiv_from_array(int@ i, size_t len) ...void delete_moi_massiv(moi_massiv@ m) ...some yoba(moi_massiv@ massiv) ...и использование:int len = 5;moi_massiv@ input = create_moi_massiv(size_t len);moi_massiv@ output = create_moi_massiv(size_t len);yoba(input, output);delete_moi_massiv(moi_massiv@ input);delete_moi_massiv(moi_massiv@ output);
>>1302430Лучший вариант я предложил - использовать vector. А ему надо лабу сдать, а не велосипеды пилить.
Ебать тут терпеливые аноны, я охуеваю как они с такой трезвостью на такие вопросы отвечаютмимо-вкатился пол год назад
>>1302445Переполнения буффера попробуй. Разберешся как работает память, поймешь и указатели, и битовые операции, и заодно поймешь, что С строки не нужны.
>>1302785>Переполнения буффера попробуй.о, дас сегодняшними механизмами защиты что стоят в операционках по умолчанию, заебешся воспроизводить типовой пример из какого-нибудь учебника по безопасность 15ти летней давноститот еще челлендж
Народ, подскажите, как сделать из Boost.Bimap два вектора?Не могу найти, писец у буста документация говно.
Господа. подскажите, пожалуйста, какие условия необходимо соблюсти, чтобы класс был zero cost abstraction?
class A {int a;};class B : public A {int b;};int main() { B b(8,9); std::vector<A> v; v.push_back(b); // crash}che delat
>>1303346Что сказать-то хотел? Чтобы класс был без vtable, чтобы тривиально создавался/перемещался, чтобы был POD?
>Вопросы по синтаксису идут на хуйА можно спросить несколько тупых вопросов про перегрузку оператора присваивания, конструкторы копирования/перемещения, всё это с ссылками и без. Или посоветуйте книжку/статью, где это в подробностях описано - в моей про перегрузку почти ничего не было, описаны только простейшие штуки.Вот что-то типа такого. Можно не отвечать (хотя я бы не отказался от некоторого внесения ясности), просто для примера.Простейший класс, у него перегружено присваивания для int. Четыре варианта. Что я тут написал и какой вообще смысл у каждого, лол?1. Вызывается пустой конструктор, потом операция присваивания, деструктор. this - указатель на реальную переменную a, всё это аналогично обычному вызову метода. return this нужен, только если я хочу написать конструкцию вида b=a=17. Верно?2. Тут уже не слишком понятно, вызывается конструктор, оператор присваивания, и уже после него на строчке с return вылезает конструктор копирования для временного объекта и тут же деструктор для него. Походу, это итоговое значение выражения "a=17", которое просто генерируется и тут же исчезает? Зачем это нужно, если есть вариант с ссылкой? Кормить функцию, которая необратимо повреждает экземпляр класса, и потому нужно подобную копию?3. ... Если у меня два вектора и я хочу реализовать сложение, мне приходится подобным образом создавать временный объект b и в конце функции его возвращать.Почему тут не вызывается оператор копирования/переноса, как это вообще работает? b внутри функции просто априори совпадает с y, то есть return и b вижу только я - для программы его как будто не существует. Если я правильно это понимаю, должна выделится на стеке память под a и y, и ещё во время вызова функции/перегруженного оператора должна на том же стеке выделится память под b, которая в конце функции перемещается в y, после чего стек освобождается. Тем не менее, этого не происходит, этой b как будто просто нет, заместо неё сразу стоит y, для которой используется обычный конструктор по умолчанию и после применяется перегруженный оператор как метод.А если возвращать значение по ссылке, то ide выдаёт предупреждение, что тут возникает ссылка на объект на стеке, что вызовет (и вызывает) падение программы.4. Тут всё ясно, кажется.-44 и +4 — указатели на a и второй экземпляр.
>>1302697Нахуя графика нужна? Она все равно нормально нигде работать не будет, и не будет совместима ни с одним фреймворком.
>>1303387>1. Верно?Да>2. Зачем это нужноНе нужно>3.Похоже тебя посетил RVO, это к удаче и богатству, попробуй скомпилировать без оптимизаций. Хотя наверно ты так и делаешь, а конпеляторы нынче дохуя умные.
>>1303362Например. Есть две группы методов, работающие с double, но в этих методах эти double означают разные вещи и хочется, чтобы это было понятно из типов, и компилятор не позволил бы смешать их в одном выражении.Одно из решений - сделать класс-обёртку, но так, чтобы в рантайме не создавались никакие объекты, и везде были чистые double.
>>1303453Ты не boost units изобретаешь случайно?Вообще это гуглится по "c++ strong typedef".https://stackoverflow.com/questions/34287842/c-strongly-typed-using-and-typedefhttps://www.fluentcpp.com/2017/05/05/news-strong-types-are-free/
>>1303462>Ты не boost units изобретаешь случайно?Нет. Помимо double это может быть вообще какой угодно тип/класс. Главное, чтобы машкод с этой абстракцией получался тот же самый, что и без.>Вообще это гуглится по "c++ strong typedef".Спасибо.
Блед, есть одна либа... И она кроссплатформенна.Недавно к ней запилили х64 поддержку добавив х64 либы оракла. Но это чудо работает лишь под винду, х86 линукс и бсд.В чем могут быть косяки? Я хуй знает. Ошибки имеются в плане char, как я понял, как эту хуйню пофиксить? Статический анализатор говорит мне лишь о data loss в интах. Но там и не подаются значения больше обычного инта.
>>1303425>попробуй скомпилировать без оптимизацийТак и делал. Я нашёл - если компилировать return (b), заместо return b, то move-конструктор на месте. Что любопытно, даже -O3 не оптимизирует эту глупую скобочку, всё-равно вызывается дополнительный конструктор.
>>1303589>Я нашёл - если компилировать return (b), заместо return b, то move-конструктор на местеПиши багрепорт, лол. Это пиздец, коли так
>>1303596>>1303589Тут не баг скорее всего.Помню в одной статье какой-то приводился пример уже не помню про что именно, что если написать return (a) и return aто это будет как бы два разных действия.
Народ, в общем, есть задача, нужно создать класс, который принимает пакет данных блоками со скоростью 500 Mbit/s, средняя длина блока - 1024 байта. Нужно записать в файл весь присланный пакет. Не очень пока понимаю, как лучше сделать. Просто записывать в память каждый блок и в конце сумму этих блоков скинуть в файл, или не все так просто? Надо ли здесь где-то применять многопоточность?
Аноны, пытаюсь разобраться с обратной польской записью везде пишут что это должны все знать с рождения, нашёл вот неплохой пример http://www.cplusplus.com/forum/beginner/119724/Но поскольку мне важны именно приоритеты, я не могу понять где именно они назначаются. И почему в данном коде нет операций со скобками, хотя в теории пишут также что в итоговом выражении скобок быть не должно? Может кто выделить часть где там назначаются приоритеты операциям?
>>1303840Говорю наобум, как бы сам сделал.Два треда. Первый принимает данные, записывает в буфер (размер - N страниц памяти, попрофилируй, как лучше). По заполнению ставит в очередь второму потоку (и дёргает кондвар какой-нибудь). Второй поток только и делает, что берёт буфер из очереди и записывает в файл (а если данных нет, крутится или спит на кондваре).Оптимизации:1) Пул буферов (то есть первый поток берёт оттуда свободные буферы, а второй отдаёт туда использованные).2) Лок-фри очереди3) Попробовать использовать OVERLAPPED/AIO вместо того, чтобы городить два треда. Но я с ними почти не работал и не знаю их оверхед.Но ~65 мегабайт/с это приличная скорость, как бы у тебя писатель не был перегружен.
>>1303877Спасибо большое, попробую что-нить сделать. В какой сфере работаешь и сколько лет опыта, если не секрет?
>>1303840Задача про бассейн и две трубы из школы. Что мы имеем. Быстрый процессор, 500 мегабит в бассейн вливается, остается выяснить, с какой скоростью выливается. Если у тебя SSD, выливаться будет очень быстро. Поэтому просто берешь и делаешь и сохраняешь данные в файл стандартным ofstream'ом. Даже в память можешь не складывать. И асинхронности никакой не нужно.Если же у тебя HDD и выливается не так быстро, то имеет смысл от mmap'ить файл и скидывать данные прямо туда. Получится многопоточное решение, где один поток это твоя прога, а второй - ядро ОС.На крайняк буфер и два потока, один пишет, другой читает. Собственно, если у тебя данные с какого-то прибора, не сети, свой буфер понадрбится.>>1303877 - ебанутый оверинжинер и преждевремянный семяизвержитель оптимизатор. Всем KISS
>>1303920Тебе именно в структуру записать, или считать структуру? Впрочем метод всё равно один будет .read((char *) &(хуйню в которую читаешь),&(размер хуйни в байтах)). Таким же способом можно считать и целую структуру в заранее созданный обьект. Про доступ не понял, у структуры все члены открытые по умолчанию.
>>1303926Ой, блэд, хуйню написал. Тупой щито поделать.Надо считать структуру, а потом как нибудь пользоваться данными из неё. Чары отдельно, инты отдельно. И пользоваться данными их них
>>1303902>>>1303877 - ебанутый оверинжинерУж расписал по полной. Я думал, что он самый простой вариант уже проверил и не сработало. А про mmap я и не подумал как-то. Самый лучший вариант будет, возможно.
>>1303931Нихуя не понял опять. Берешь и считываешь целую структуру, в чём проблема? Скажем структура struct MyStruct. Создаешь обьект MyStruct first. Создаешь обьект офстрима и считываешь как я выше написал. Можно считать целую структуру, проблем нет
>>1303934Ладно, пойду перечитаю лекцию. Я первокур который хуйнёй страдал на лекциях.А надо делать индивидуальное задание. И хоть его через месяц сдавать, но жопа то подгорает от непонятности.
>>1303920Реализуешь operator<< и operator>> примерно таким образом https://thispointer.com/c-how-to-read-or-write-objects-in-file-serializing-deserializing-objects/friend std::ostream & operator << (std::ostream &out, const Student & obj){ out << obj.mId << "\n" <<obj.mName<<"\n"<<obj.mPhoneNumber<<std::endl; return out;}Дальше просто открываешь файл через ifstream и читаешь ,через ofstream пишешь с помощью file << yoba;Если нужно бинарно сохранять, то как-то такstd::ostream& operator<<(std::ostream& out, const MyClass& obj) { out.write(reinterpret_cast<const char*>(&obj.field1), sizeof(obj.field1)); // or something better defined // ... return out;}Самый кайф в таком подходе, что он может даже в рекурсию
>>1303938Тебе там анон выше неплохую вещь советует.Бтв чего непонятного? Структура в памяти хранит свои поля последовательно, в файле байты лежат в таком же порядке.Пример: в .jpeg-файле сначала идёт хедер байта определенной длины. Просто байты. Ты считываешь их в нужную структуру и получается, что эти байты кладутся на твою структуру и ты теперь можешь обращаться к полям структуры. Так же с хедером изображения и самими данными изображения. Я вообще считывал весь _двумерный_ массив пикселей в char[height*(width+offset)] и с ним работал.Как раз потому что все просто лежит последовательно.Или вот так: представь себе слепого. Он умеет держать в правой руке члены, а в левой - анальные пробки с хвостами и прекрасно знает, какие они на ощупь и потому ругается, если ему их дают наоборот.А рядом два ящика - один с членами, а второй с пробками. Этот несчастный слепец опускает руки в ящики и достает оттуда предметы. И, так как в правой руке у него только члены, а в левой только пробки, то они идеально сидят у него в руке. И теперь ты можешь у него спросить, какой длины член в правой руке и насколько пушистый хвост в левой.Вот руки его - структура, а ящики - файл. Так понятно?Ну и, если предметы в ящиках перепутаются, то он по-прежнему будет их считать правильными, но отзыв о них тебе даст уже ложный. Это уже если ты не знаешь о том, в каком порядке у тебя лежат байты в файле.
>>1304063Хедер файла определенной длины*быстрофиксС jpeg сложнее должно быть, подробнее про .bmp:То есть там сначала структура bitmapfileheader, структура bitmapinfoheader, а потом куча структур rbgtriple. У каждой из них поля a, b, c, d и т.д.(чесслово, не помню наизусть) определенной длины в байтах - значит, в файле будут лежать длина_в_байтах(a) байт, длина_в_байтах(b) байт, длина_в_байтах(c) байт и т.д.При объявлении переменной типа нужной тебе структуры, ты выделяешь память, равную сумме длине полей этой структуры с разделителями в порядке объявления. И просто байты из файла накладываются на неё.Пускай более умный/шарящий анон меня поправит, если я где не совсем прав.
>>1304068Разделители - очень образно, их на самом деле в памяти нет.Да и программа не знает, что там и в каком порядке.Считала 20 байт из файла - положила их в структуру длиной 20 байт.И пускай структура вродеstruct myStruct{int i,int j,int k,int l}.И тогда, если ты не проебался и читаешь с нужного места, подряд идущие 1234 в твоём файле считаются побайтово и запишутся последовательно в структуру - i == 1, j == 2, k == 3, l == 4.
>>1304070Да блядь, ну хули я такой невнимательный.Там на одно интовое поле больше должно быть, чтобы все было правильно при 20 байтах.
Функция имеет один и тот же код для аргумента типа type& и type&& (просто транслирует в другую функцию с куда большим количеством аргументов, где для разных ссылок разный код) - как записать её один шаблон/конструкцию?
>>1304091Гугли универсальные ссылки, либо из шапки возьми эффективное программирование Скотт Мейерс 2014г если не ошибся, глава 5 практически полностью про это.
>>1299653Да, я не смог в эмбед логику, минус проект минус жизнь(минус мотивация за неделю)Как смочь в логику простую? особо тяжело даются ответвления(отработки исключений всякие логические) в коде, умл не осилил хотя думал что поможет разобраться пикрандом
>>1304106>>1304104Благодарю, я почитаю, прям то что надо.Дело было в том, что нужно было не просто универсальную ссылку, а ещё с перегрузкой, тому что функция имела схожий смысл для двух разных типов (код совпадал только для двух разных ссылок, но не типов), которые передавать не по ссылкам оче долго.Там прям глава была:>Избеrайте переrрузок дnя универсаnьных ссыnокТеперь даже не знаю как лучше, лол. В реальном коде выглядит ещё хуже. Может быть я не привык просто, но нужен какой-то более вразумительный синтаксис для ограничения типов шаблонов, мне кажется.И не совсем понятно зачем смешали синтаксис для универсальной и rvalue ссылки - не вижу никакой логики. Сделали бы что-то отдельное вроде T# или T@ - можно было бы применять в функциях без всяких угрёбищных шаблонов, смысл интуитивно понятен, да и компиляторам проще разбирать код.
>>1304068>более умный/шарящий анон меня поправитвыравнивание структур паковать их надо в данном случае
>>1304119Там в конце 5 главы рассказывается как избежать этого. Тебе нужно перегрузить один шаблон чтобы он был универсальным, а внутри самой функции распределять нужные тебе операции с помощью std::forward. Диспетчеризация дескрипторов, вроде так называлось
>>1304187Не надо надеяться на язык в данном случае. Пишешь вручную сериализатор и десериализатор и горя не знаешь.
Внутри класса есть строкаstd::getline(std::cin, title);Но она срабатывает только для первого объекта, а для остальных пропускается. Почему?
>>1298240Ты объебался с русским языком. "Необходимо равны" означает не "обязательно равны", а "настолько равны, что на разницу между ними можно забить".По поводу примера: рабочий точит деталь с допуском +/-128 мм. На чертеже деталь имеет некий размер 1000 мм. Рабочий один раз выточил 951 мм, а второй раз 1050 мм. Ну и похуй, потому что в допуск он уложился. Результаты 951 мм и 1050 мм необходимо равны при заданном e = 128 мм.Фихтенгольц конфетка, он объясняет для полных даунов, ты просто немного перемудрил, со всеми бывает. Сам сдавал по нему всякое дерьмо, готовясь за часы до экзамена.
>>1304512>Ты объебался с русским языкомТы тоже> "Необходимо равны" означает не "обязательно равны", а "настолько равны, что на разницу между ними можно забить".Нет. Это близко к выражению "необходимо и достаточно"Если из A => B (и А следует B), то B необходимо, чтобы было A, а A достаточно, чтобы было B."то а и б необходимо равны" на современный русский язык переводится как "то следовательно, а и б равны". В твоем примере из>Результаты 951 мм и 1050 мм необходимо равны при заданном e = 128 мм.получается "мы задали e=128, следовательно 951=1050", что есть бред. 951 и 1050 не равны, потому что можно задать e=10
>>1304521Мимопроходил> B необходимо, чтобы было A, а A достаточно, чтобы было BНаоборот же. Для A необходимо, чтобы было B. Ведь без B нет A. Для B достаточно, чтобы было A. Но не необходимо, ведь кроме А могут быть другие предпосылки. Посуди. C => B, C |= C,B, но С => B, C |\= AПодумай ещё раз.И вообще в таком контексте "необходимость" напоминает скорее "необходимость/случайность - necessity/contingency" из модальной логики, чем "необходимость/достаточность - necessity/sufficiency". То есть НЕОБХОДИМО, чтобы они были равны - не существует такого варианта событий, при котором они не равны.
>>1304558>Для A необходимо, чтобы было BЯ так и написал. Обрати внимание, что у меня нет "для", а просто "B необходимо, чтобы было A". Просто тебе падеж не очевиден. Если В - это Вася, то я сказал "Вася необходим, чтобы было А". А не "Васе необходимо, чтобы было A", как ты подумал.>И вообще в таком контексте "необходимость" напоминает скорее "необходимость/случайность - necessity/contingency" из модальной логики, чем "необходимость/достаточность - necessity/sufficiency". То есть НЕОБХОДИМО, чтобы они были равны - не существует такого варианта событий, при котором они не равны. Он-то написал '"Необходимо равны" означает не "обязательно равны", а "настолько равны, что на разницу между ними можно забить"', что прямо противоположно "не существует такого варианта событий, при котором они не равны".
>>1304521> получается "мы задали e=128, следовательно 951=1050", что есть бред. 951 и 1050 не равны, потому что можно задать e=10Ваш спор об особенностях описания условий русским языком тут бесполезен, потому что ты тупой и не можешь понять очевидных вещей.Для е = 128 имеем условную равность 951 и 1050.Для твоего е = 10 уже условно равны 951 и 960.И именно в этом смысл того, что написано на пикче, которую ты приклеил к своему посту. только почему автор решил именно так это описать - хуй знаетДля любого студентика, который осилил хоть немного походить на пары матанализа, знакома такая хуйня: lim (an) = A - значит, что начиная с какого N для всех n > N выполняется условие |аn - A| < e, где е - эпсилон - больше нуля.И для нормального человека ясно, что "больше нуля" == невероятно мало, но не ноль.А потом, когда узнаешь о вычислительных методах, поймёшь, что это е - это точность вычисления.И для заданной точности е==128 и е==10 равными будут разные числа, сечешь?
>>1304578Хотя, видимо, вы настолько проблемные в своем пту колледже, что вас к понятию предела готовят такой леммой.
>>1304612Стиль жопочтения очень похож. Выдумал "условное равенство", которого в лемме нет, подумал, что эпсилон в матане - это машинный эпсилон, плюс подростковый уровень речи на оскорблениях, который ставит в ситуацию, когда не просто школьник чего-то в матане недопонял, а школьник общается типа на равных.
Двощ, нужно сделать кубический корень отрицательного параметра в С++ Билдере 2010. Проблема в том, что там нет функции cbrt, так как судя по гуглу ее запилили в 11 году, а pow не работает с отрицательными значениями. Что делать? Бочку?Лаба.
>>1304681А, блин, не дочитал.>pow не работает с отрицательными значениямиИ? Раз лаба, значит первый курс. Раз первый курс, значит матан. Вспоминай, какая симметрия у кубического корня.
Долбаеб с обратной польской записью снова в треде я и не уходил впрочем. Прошу помощи в составление алгоритма, костыли я сам напишу. Я преобразовал выражение вида A&B&C в AB&C& по алгоритму обратной польской записи. Как можно разбить это выражение на части согласно приоритету? Пытаюсь вывести поэтапное решение вида A&B и A&B&C ну или &C . В данном примере если разбивать с помощью стека, как если бы мы выполняли вычисления, всё работает. Но на более сложных как, например AB&C+D/* я не могу придумать алгоритм. Может кто помочь с этой хуйней? Уже второй день голову ломаю, и в итоге ничего не придумал.
>>1303940>>1304063Долбоёб первокур снова на связи.Братаны, спасиба :3Правда я не так сделал, а как долбоёб в квадрате, но всё же заебись. (Препод требует чтобы в плюсах мы писали как в си) file = freopen("rooms.txt", "r", stdin); struct Komnata { int ID; char ros[8]; int chel; int cost; }; int i = 1; struct Komnata nomer[1000]; while (col>i) { scanf("%d %s %d %d", &nomer.ID, &nomer.ros, &nomer.chel, &nomer.cost); i++; }А как прочитать файл так что-то можно было использовать команды?Вот у меня файл и нужно использовать вот эти адд, гет, и их подкоманды, инком, клиент. Начальная цифирька — количество строк. Я её прочитаю без проблем, а остальное?7ADD CLIENT SERVICE = ECONOMY BEGIN_DATE = 11.07.2020 END_DATE = 28.09.2020GET INCOME BEGIN_DATE = 15.07.2020 END_DATE = 28.07.2020 GET QUEUE ID = 170 DATE = 27.12.2020ADD CLIENT SERVICE = COMFORT BEGIN_DATE = 03.04.2020 END_DATE = 05.06.2020 ADD CLIENT SERVICE = STANDART BEGIN_DATE = 22.09.2020 END_DATE = 17.11.2020GET QUEUE ID = 246 DATE = 27.12.2020GET ROOM ID = 567Как считать их куда нибудь отдельно, чтобы потом брать и использовать? Команду адд клиент туда, тип комнаты эконом туда, даты туда?Причём команды по количеству символов разные, хуй поймёшь, короче.Вот про такое на лекциях вообще помоему не говорили даже как реализовывать потом эти команды. Типо на свитчах и ифах всё это строить? Или как-нибудь в подпрограммы кидать?
>>1304710Просили же не копировать код в посты. Залей на какой-нибудь онлайн компилятор и ссылку кидай
>>1304711Да в принципе я только похвастаться принёс.И он работает только в визуалке.https://ideone.com/VAO2LdКак прочитать файл с командами так чтобы возможно было понять где команды и потихонечку их выполнять?
>>1304695>инфиксную>обратной польскойСначала разберись в этом вопросе, а потом снова приходи, если что-то останется непонятным.
>>1304689У обратной польской нотации нет приоритетов, в этом её суть. Но приоритеты есть у инфиксной, и суть алгоритма >>1304725 в том, чтобы преобразовать инфиксную нотацию с приоритетами в RPN.
>>1304063>Структура в памяти хранит свои поля последовательноВ памяти компилятор может добавлять пэддинг для повышения эффективности. Структура типа {char; int; char;} на современном сферическом компиляторе в вакууме с большой вероятностью будет выдавать сайзоф 12. Так-то бинарный вид в стандарте на кресты вообще не оговаривается.>>1304708Тебе надо написать парсер для твоего мини dsl. Читаешь построчно команды, далее по токенам, со свичами и подпрограммами.
>>1304732Лучше почитаю. Я так охуею тыкаться в стены.Если чо, выполню задание за 6 баллов вместо 12 баллов и похуй. Всё равно за кодинг стайл и структуру программы нашкребу что-нибудь.
>>1304730Да, там анон другой уже написал, что я не совсем точно описал.Я потом вспомнил, что когда я пытался сам определить структуру для считывания хедера изображения(чтобы не подключать windows.h), то проебался именно в этом моменте с выравниванием и размером структуры, где-то это можно было отключить, естественно, где именно - не помню.
>>1304725>>1304729>Алгоритм сортировочной станции — способ разбора математических выражений, представленных в инфиксной нотации.Это я уже написал. Всё работает корректно, но мне нужно вывести этапы которые производит алгоритм. Вот скажем пик. Далее программа вычисляет значение поэтапно, в приоритете который я задал. И мне бы хотелось вывести эти этапы. Скажем выполнило AB& - вывод A&B, далее ~D и в конце (A&B)|C&~D. Вот тут то, чего я хочу добиться https://math.semestr.ru/inf/table.php.
>>1304683> Вспоминай, какая симметрия у кубического корняСтепень 1/3. Функция pow, которая возводит в степень, не работает с отрицательными значениями.Попробовал exp, но оно дает пикрил3, если вот это >>1304688, то обрезает дробную часть.
>>1304766Да хоцца разбить, но чтобы строка разбилась на все слова и слова улетели в массив или ещё куда нибудь.
>>1304770Ты хочешь разбить массив строк и записать его в другой массив? Ты ебанутый чтоль. Если твои слова разделены пробелами то strtok всё еще подходит, загугли как это правильно сделать и всё.
>>1304797Ты должен будешь каждой строке присвоить часть твоей изначальной строки. Иначе результат уйдет в никуда. Если хочешь чтобы они ушли в массив строк - создавай массив строк, и каждому элементу присваивай часть изначальной
>>1304764Что значит брать?char str[] = "Hui pizda";char str2[2];strncpy (&str2[0], &str[0], 2 );Как-то так. Слайсов в С нет.
>>1304803Фу ебать.С виду няшечшка хуйняшечка, а стоит только звук включить - обычная руснявая пизда.в первый раз вижу её стрим
>>1304521Хватит мешать матлогику с матанализом. Причем тут необходимо и достаточно?Ну для e = 128 951 будет необходимо равно 1050-и. Для другого e не равно. Как на большинстве современных машин существует 1e-9 (или уже не современных, лол) в качестве такого эпсилона, так на машинах будущего машинный эпсилон для плавающей точки уменьшится, и бывшие необходимо равными величины уже не будут таковыми. На мой взгляд ты не понимаешь, зачем нужно понятие необходимо равных величин и пытаешься подменить его понятием равных.
>>1304521Ну тебе в принципе уже всё расписали, так что вот этот псто >>1305051 я наваял зря, забей. И всё же я охуел с того как ты из понятия необходимо равных перепрыгиваешь в "необходимо и достаточно" и начинаешь сыпать A => B => C => Sky => Allah, это просто пизда.
Аноний, подкинь литературу по многопоточному программированию. Что такое потоки с чем их едят. Мъютексы хуютексы...
>>1305051>Причем тут необходимо и достаточно?При том, что Фихтенгольц написан языком 19 века и я попытался объяснить тупым школьникам, что значит слово "необходимо". Он ее использует всегда, когда что-то из чего-то следует. В современных формулировках ее не используют.Попытка не удалась, потому что школьники оказались слишком тупыми и не способны осилить лемму.>На мой взгляд ты не понимаешь, зачем нужно понятие необходимо равных величин и пытаешься подменить его понятием равных. Шизик, у Фихтенгольца нет никакого понятия необходимо равных величин. 128 не равно 951, потому что не для любого эпсилон больше 0 существует интервал размером меньше e, в который попадают оба числа. Прочитай лемму раз сто, может дойдет.
>>1305245можешь начать с Энтони Уильямс - Параллельное программирование на C++ в действиихотел ее в шапку добавить
Как сделать указатель на метод класса ? Есть пик:void(List::add_e)(int) = &List::Add_element;void(List::show_e)(int) = &List::Show;прототипы:void Show(int A)void Add_element(int new_element)Что-то не то получается, add_e/show_e у меня не определяются как указатели.
>>1305325[code]class Yoba {public:Distance fly(Perdole perdole);};using YobaFunc = Distance (Yoba::*) (Perdole);[/code]
>>1304512>"Необходимо равны" означает не "обязательно равны", а "настолько равны, что на разницу между ними можно забить".Шизик? https://ru.wikipedia.org/wiki/Необходимое_и_достаточное_условия
>>1305251>Фихтенгольц написан языком 19 векаВ 21 веке логика стала немодна и "необхоидимо" не употребляется?
>>1305403>>1305341Как к нему обратиться ? Пытаюсь как к обычному указателю на функцию, но пишет, что выражение перед скобками должно иметь тип поинтер-ту.
>>1305051>понятие необходимо равных величинВраки, нет такого и не нужно оно.Для того чтобы уместить джва числа a и b в сколь угодно малый промежуток, необходимо чтобы a и b были равны.Вот о чем эта лемма, вот в каком смысле Ф. использует слово "необходимо".
>>1305444Вот gcc такую дичь компилирует, только вчера тестил. Сверху возможные замены через using или typedef, чтоб каждый раз не таскать скобочки.kra - класс, type - аргумент шаблона (или как оно там называется).В функцию можно передавать и как "<имя класса>::<имя метода>", так и как "<экземпляр класса>.<имя метода>". Без всяких & и *
>>1295983 (OP)помогите мне пожалуйста разобраться с OpenCV и CUDA. Я хочу прочитать видео с помощью класса cudacovec из opencv. я использую метод cv::cudacodec::createVideoReader(fname), но после этого вылетает вот эта ошибка.>OpenCV(3.4.1-dev) Error: The function/feature is not implemented (The called functionality is disabled for current build or platform) in throw_no_cuda, file /home/nvidia/devel/opencv/opencv/modules/core/include/opencv2/core/private.cuda.hpp, line 111terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(3.4.1-dev) /home/nvidia/devel/opencv/opencv/modules/core/include/opencv2/core/private.cuda.hpp:111: error: (-213) The called functionality is disabled for current build or platform in function throw_no_cudaТо есть, в моей версии CUDA, 9.2 вообще нет этой функции? Я пытался поискать другие способы прочитать видео, но не смог разобраться что именно делать. На форуме nvidia https://devtalk.nvidia.com/default/topic/1043750/?comment=5295044в теме с той же проблемой что и у меня пишут, что надо установить библиотеку nvcuvid, мне её отдельно нужно установить? И как мне её подключать в проект, с помощью заголовочного файла, или в .pro файле что-то прописать? И какой всё-таки метод использовать для создания video reader?
>>1305490Тебе нужно пересобрать opencv с поддержкой cuda по инструкции типа https://github.com/BVLC/caffe/wiki/OpenCV-3.3-Installation-Guide-on-Ubuntu-16.04
>>1305501я установил OpenCV с поддержкой CUDA, то есть класс например GpuMat у меня есть. Моя проблема в создании video reader с CUDA и отсутствующей функцией.
>>1305404чё?в той книжке даются минимальные знания о том как писать многопоточку, если то о чем там написано считают сложным, то лучше и не пытайся ее делать
>>1305245>Аноний, подкинь литературу по многопоточному программированию. Что такое потоки с чем их едят. Мъютексы хуютексы...https://actor-framework.readthedocs.io/en/latest/Introduction.html
есть ли смысол ебатся с с++ если можно выучить node js, py, php и вкатится в веб и зарабатывать over 9000к/сек при тех же старанияхмимо абитуриент кун
>>1305658>абитуриент>зарабатыватьАйтишники капусту рубят, пойду учиться на погромиста!111Какой же ты даун.
>>1305658Ну меня, например, тошнит от веба, а всякие числодробительные и компьютервижн проекты радуют.А так у С++ стараний больше, а денег меньше, потому что рыночек. Но С++ гигантский плюс для поиска удаленной работы на западе. Неебический.
>>1305661>ряя в аЙти и так уже много, тупое школоло ряямне всегда было интересно как работает мой кампудахтор и в частности программная его чась. если б я думал только о бабле я и не задумывался б изучать что то сложнее питона
>>1305674>пукчто сказать то хотел?ты програмист вообще, что ты тут делаешь если не магешь в конкструктив
>>1305676Да с тобой нехуй говорить, всегда ему интересны были пека, только задается вопросом нахуй ему учить что-то кроме пыха и жса, ведь на них бабки можно рубить. Конченный.
>>1305664>Но С++ гигантский плюс для поиска удаленной работы на западенадеюсь, ты говоришь на основании личного опыта
>>1305658в твоем вопросе и содержится ответраз ты абитуриент, то скорей всего у тебя есть мамка и папка, готовые кормить тебя еще 5 летно лучшее что ты сможешь сделать - это не теряя время подучить веб-разработку и уже на курсе втором устраиваться на удаленочкуесли выберешь плюсы - твой путь окажется гораздо, гораздо сложнее, а как вариант и вообще закончится ничем
Помогите плз, с этим кодом, что нужно сделать, чтобы он заработал?Я очень тупой, буду безмерно рад любой помощи. http://www.cyberforum.ru/cpp-beginners/thread167333.html
Пиздос, тут каждый раз перед сессией стая студентов набегает и начинает спрашивать про сортировку пузырьком и подобную элементарную хуйню?
>>1305758так и естьеще вкатывальщики, спрашивающие почему их hello world не компилитсяно в отличие от пхп-треда отвечают им такие же мало знающие студентысостоявшиеся кодеры здесь есть, но они молчат или только отвечают на интересные сложные вопросывообще это специфика крестовой специализации - люди предпочитают молчать после нескольких лет работы "в поле"
>>1305691Да. Я начинал в 2012, несколько раз пытался в веб-вакансии с рейтом хотя бы $15, каждый раз выбирали не меня - очень большая конкуренция. А с крестами было просто - специалистов мало и все заняты.
>>1305799Это плохой вопрос, если тебя интересует вкат. Интереснее на чем я специализировался тогда. На переводе кода со скриптовых языков на С++, на анализ опенсорса. То есть такая типичная фрилансерская работа по чистке сортиров вилкой. Но, в отличие от веба, вечно таким заниматься не будешь, хороший крестовик редкость.
>>1305595Там у них много переопределений и 2000 строк. Мне бы чистый список без перегруженных операторов. struct element{ int x; element Next, P;};struct List{private: element N ,Prev;public: List() { Prev = nullptr; N = nullptr; } ~List() { while (Prev) { element temp = Prev->Next; delete Prev; Prev = temp; } } void Add_element(int new_element) { element temp = new element; temp->x = new_element; temp->Next = Prev; Prev = temp; }void Add_element(int i, int new_element) { int A = element_quantity(); element temp = Prev; element data = N; while (temp) { N = Prev; temp = temp->Next; if (A - i == 0) { element *obj = new element; Prev = obj; obj->x = new_element; obj->Next = temp; temp = obj->Next; } i++; } }Нужно чтобы Адд, который с 2 параметрами, вставлял в итую позицию, element_quantity() возвращает количество элементов на момент вызова. Так же нужно сделать для удаления с итой позиции. Раньше добавление работало, но потом я начал делать удаление и крашнул студию, в итоге не сохранилось.
>>1305901Это нормально.При инициализации переменной компилятор выделяет под нее какую-нибудь мусорную ячейку в ОЗУ, где находиться всякая дичь.(Некоторые компиляторы выводят ошибку)
>>1305901Да, для обычных переменных это нормально.Но в stl контейнерах они по дефолту устанавливаются в нулевое значение типа, например.
>>1305901Обычные переменные при использовании без инициализации дадут мусор, то есть какое-то значение в памяти. У меня это какое-то ебанутое число примерно -2^31 или как-то так. Глобальные переменные без инициализации устанавливаются в ноль даже массивы. При инициализации одного элемента массива все остальные не инициализированные установятся в нули
>>1305845Сейчас в основном на питоне ML делаю, лол.Сейчас кресты нужны только в продакшен на десктоп, а я слишком ценный специалист, чтобы заниматься подобным. Хотя если уволят то, скорее всего, опять вернусь на кресты.
Аноны, тут есть такие, которые шарят в параллеизме MPI?Нужно подстроить одну прогу под многопоточность. Там буквально три строчки)
Хочу сделать такую же штуку https://pastebin.com/vNAErtMq , но на крестах. Возможно ли это?Т.е. несколько классов со статическими функциями запихнуты в map так, чтобы потом я эти статические функции мог через этот map дёргать.
Вкатывался в C/С++ на протяжении месяца, пересмотрел пару курсов, прочитал Страуструпа и все вроде ничего, но вдруг я краешком глаза заглянул в сисярп и ахуел, ведь это же тот же самый C++ только на стеройдах, с ахуенной поддержкой, активным комьюнити и вообще все как у людей. Теперь думаю перекатиться туда. Какие подводные? Где я проебался? С++ бояре, отговорите меня!
>>1305956>https://pastebin.com/vNAErtMqСтатические вообще без проблем, если сигнатура у них одна и та же.https://ideone.com/9WPkgPС методами лучше заюзать std::function, который запомнит ссылку на this.Хотя у тебя в мапе не функция, а метакласс. Метаклассов в С++ нет.
>>1305977Это вообще разные вещи. C# - джаваподобный мусорособираемый язык высокого уровня (хотя сам язык поприятнее джавы будет), ориентированный на исполнение на виртуальной машине CLR. То есть абстракциями оперировать легче, чем плюсами, но и (вменяемо) управлять памятью ты не сможешь. И просто сам язык медленнее сей/плюсов (чего, впрочем, хватает для 90% приложений). То есть для уровня "сделать веб/десктоп приложение" самое оно, но если у тебя один из следующих ворклоадов:>БЛЯДЬ РАБОТАЕМ НАПРЯМУЮ С PCI/I2C/ЧТО ТАМ ЕСТЬ ЕЩЁ>ВСЁ МЕДЛЕННО - ТАЩИ БОЛЬШЕ SIMD>У НАС VTUNE ГОВОРИТ ЧТО LLC MISS COUNT ВЫСОКИЙ - А НУ >640 КИЛОБАЙТ ПАМЯТИ (на программу и на данные) ХВАТИТ ВСЕМ>У НАС ВЫЧИСЛЕНИЯ ИДУТ 60 ЧАСОВ - НАДО БЫ БЫСТРЕЕи просто если ты не можешь расходовать лишние ресурсы компьютера или должен уметь выжать его до конца, то да, плюсы в таком случае незаменимы. А так, если хочешь просто понять, каковы низкоуровневые языки, то лучше сделай упор на чистый Си. Всё-таки ящитаю в плюсы нужно вкатываться строго после хорошего понимания Си.
>>1306022Так джава си-подобный, выходит что С# - тоже. C/C++ тоже языки высокого уровня же. Почему не смогу? Просто добавляю ключевое слово unsafe и делаю все тоже самое что и на C++, делать асм вставки тоже можно насколько я понял. Выходит, что у плюсов пруфит только в производительности, ну и драйвера не попишешь?
>>1305817Чёрт, ты серьёзно за 18 часов не нашёл нужный код? По второй же ссылке нашёл нужный тебе с разбором и добавлением в произвольную позицию.>element_quantity()Это настолько очевидное свойство списка, что стоило бы потратить 4 байта и его вынести в отдельную переменную и просто изменять значения при добавлении, мне кажется. Если не подразумевается, что у тебя миллионы копий этой структуры, и в каждом буквально три с половиной элемента.Почему в элементе хранится два указателя? Зачем указатели N и data? Нужна ли тебе ещё помощь? Если тебе в самом деле интересно, а не нужно просто унылую лабу сделать и забыть - то можно списаться, объясню всё-всё про списки и всякое другое, если потребуется.>>1305917>в stl контейнерах они по дефолту устанавливаются в нулевое значениеА это можно как-то отключить, кстати? Практического применения никакого - проще явно вызвать зануление в 1 из 100 случаев, чем каждый раз мучать компьютер бесполезными действиями.
>>1306040С добавлением разобрался.void Add_element(int i, int new_element){int A = element_quantity();element temp = Prev;element temp2 = Prev;while (temp2){temp2 = temp2->Next; if (A - i == 0){element obj = new element;obj->x = new_element; obj->Next = temp2;temp->Next = obj;}i++;temp = temp->Next;}}А вот с удалением проблема, выкинуть указатель то могу на (i-1 элемент), но как не впихну delete, то ошибка доступа памяти в строке temp = temp->Next; void Del_element(int i){int A = element_quantity();element temp = Prev;while (temp){if (A - i == 0){temp->Next = temp->Next->Next; } temp = temp->Next;i++;}}
>>1295983 (OP)Анон, начал учить эти ваши плюсы (и программирование вообще). И я просто в ахуе от нелогичности этого дерьма. Допустим, делаю многомерный массив. 2 массива по 4 элемента. И чтобы вызвать из 2-го массива 4-ый элемент мне нужно писать 1 и 3, потому что плюсы воспринимают первый массив и первый элемент не как 1, а как 0, то есть начинают отсчет с ноля.Как дальше жить с этим?
>>1306071Допустим int может принимать значения от 0...10, если массив начинается с нуля, то нам доступны значения от 0 до 10, если с 1 то с 1 до 10, то есть последний элемент доступен не будет. Все просто и логично, просто ты дурачек.
>>1306078>Допустим int может принимать значения от 0...10Но ведь там не интеджеры, а черектеры. А они могут принимать любое значение, не?Я все равно ничего не понял. Почему тогда сразу нельзя было сделать создание массива с учетом ноля? Допустим ты хочешь сделать два массива с 4-мя элементами. Тогда писать надо 1 и 3. И для вызова последнего элемента второго массива логично было бы юзать все те же 1 и 3.
>>1306068>ошибка доступа памяти в строкеОчевидно, потому что ты удаляешь temp, а потом обращаешься temp->Next или ещё что-то такое.Попробуй это:[code]void Del_element(int i) { int A = element_quantity(); if (A<i) return;// Такого элемента нет element W,B = Prev; //Тут две звёздочки, если оно сломается. if (i==0){ //Отдельный случай, когда нужно поменять Prev W=Prev; Prev=Prev->Next; delete Prev; }else{ //Случай, когда значение Prev менять не надо W=Prev; B=Prev; for (int n=0;n<i;n++){//Перехожу на элемент i B=B->Next; W=B; } //В - элемент подлежащий удалению //W - предыдущий W->Next=B->Next; delete W; } [/code]
>>1306054ты можешь там смотреть видео с курса, это будет бесплатноно смысла в этом немного, важны тестовые упражнения и задания, доступ к проверяющей системевообще важно то что тебя будут по сути заставлять кодить, набивать руку
>>1306094>>1306068Точнее, вот так: https://ideone.com/LN7JaПисал вслепую, перепутал две строчки. Сейчас должно работать, по идее. И чёт глаза вытекают от кода без переносов, думал "code" блокирует стирание звёздочек и пробелов.
>>1305939> на питоне ML делаюне хотелось тебя упрекать, но первым постом ты говорил, что легко найти удаленку на крестах и что работаешь на плюсах удаленноа получается вот оно как
>>1306082>Но ведь там не интеджеры, а черектеры. А они могут принимать любое значение, не?У тебя какой то пиздец с пониманием, попробуй для начала ассемблер, хорошая вещь. А потом чистый С, и только потом уже плюсы.
>>1306114посоветуй по асму что нибудь чтобы побольше прикладных интересных задач простенькихдругой анон
>>1306119Непонел, что именно посоветовать? Для обучения советую FASM (он же flat assembler) посмотреть, только не fasmg, по нему материала еще мало. На офф сайте есть примерчики, тексты, да и много чего по нему гуглица. Еще в папке EXAMPLES при скачивании есть исходники всяких блокнотов, графических демок, простых hello world'ов.
>>1306114> ассемблерв контексте с++ треда нужен только затем, чтобы уметь читать и контролировать выхлоп компилятора
>>1306136>в контексте с++ треда нужен только затем, чтобы уметь читать и контролировать выхлоп компилятора
>>1306099>не хотелось тебя упрекать, но первым постом ты говорил, что легко найти удаленку на крестах и что работаешь на плюсах удаленно>а получается вот оно как Нет, это говорил гномик в твоей голове. Я писал следующее: "С++ гигантский плюс для поиска удаленной работы на западе".То есть не плюс как в собеседованиях пишут плюс, который нихуя не плюс, а реальный такой плюс выполнить простенький проект, познакомиться с заказчиком и сказать ему "а я еще и вышивать умею". А работать на крестах в 2018...Нет, не пойми меня неправильно, я работал несколько лет чисто на С++ и всегда моя работа заканчивается имплементацией на С++ для встраивания в продакшен (если речь о десктопных юзерах, в вебе можно обойтись крестовыми библиотеками), но при первой возможности я не работаю на С++, потому что надоедает постоянно пилить велосипеды, искать на гитхабе древние BSD библиотеки, дрючить cmake и заниматься прочей хуитой.Поэтому молодым я С++ учить особо не советую. Effort'а много, а выхлоп будет - ну чуть больше везения при поиске работы.
>>1306071Потому что массив по сути - это кусок памяти. Твоя переменная, которая обозначена как массив на самом деле есть указатель на адрес первого элемента. В квадратных скобочках ты указываешь не номер элемента, а смещение относительно этого адреса. Соответственно, первый элемент массива находится при нулевом смещении.Во многих других языках без семантики си-подобных указателей ёбнутые создатели (сказалось тяжёлое наследие си) оставили 0 как индекс первого элемента массива, списка и других подобных коллекций. Но есть и правильные языки, где первый элемент нумеруется единичкой.
>>1306300>Но есть и правильные языки, где первый элемент нумеруется единичкой. Это хуевые языки для гуманитариев. Матлаб из таких языков и постоянно это бесит.Например, мне нужно обработать массив кусками по 10 элементов (только не надо говорить про векторизацию в матлабе - это просто пример). На сишке я пишу так (@ как водится звездочка):for(int i = 0; i < ...; ++i) for (int j = 0; j < ...; j++) a[i @ 10 +j] = ...И тут прелесть в том, что 0 @ 10 = 0.А вот когда у тебя нумерация с единицы, возникает проблема. 1 @ 10 = 10. В итоге надо писатьa[1 + (i - 1) @ 10 + j], чтобы превратить i в ноль, высчитать смещение по i, а потом еще не забыть прибавить единицу, чтобы опять вернуть нумерацию с единицы.На пустом месте формула усложнилась. Так что указывать смещение вместо порядкового номера штука правильная и очень математичная в любых языках, не только в низкоуровневых. Не веришь мне, спроси у Саймона: http://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#v:-33--33-
>>1306307Хотя вру, единицу прибавлять не надо - j-то с единицы. Короче, даже в таком простом коде появляются баги на пустом месте
>>1306307Ты в своем примере какую-то хуйню написал.Если индексы элементов начинаются с единички, то все становится ещё проще:for(int i = 1; i <= ...; i += 10) for (int j = 0; j < 10; j++) a[i + j] = ...И никаких проблем.Но, таки да, становится неудобно, если по модулю деление брать.
>>1306030>Так джава си-подобный, выходит что С# - тоже. C/C++ тоже языки высокого уровня жеСинтаксис один, но суть другая. Да и высокий уровень тоже высокому уровню рознь. Если сказать хаскелисту, который каждый день жонглирует профункторными линзами да свободными моноидами, что в шарпах высокий уровень абстракций, он усмехнётся и продолжит пилить индексированные монады.>Почему не смогу? Просто добавляю ключевое слово unsafe и делаю все тоже самое что и на C++,Некоторые... деликатные вещи на AllocHGlobal и прочем не сделаешь.>Выходит, что у плюсов пруфит только в производительности, ну и драйвера не попишешь?Честно? Да.
>>1306030Тем, кто считает Си языком высокого уровня, пора очнуться из сорокалетней комы и обнаружить, что в современном компьютерном языкознании стандарты несколько поменялись.
>>1306030>Так джава си-подобный, выходит что С# - тоже. C/C++ тоже языки высокого уровня же. Почему не смогу? Просто добавляю ключевое слово unsafe и делаю все тоже самое что и на C++, делать асм вставки тоже можно насколько я понял. Выходит, что у плюсов пруфит только в производительности, ну и драйвера не попишешь?Язык тащит за собой компилирующий и выполняющий его рантайм и соответствующие ограничения в плане переносимости (для переноса на неподдерживаемую платформу придется вскрывать исходы рантайма и перепиливать рантайм + раньше мог соснуть с платформами где динамическая генерация кода запрещена или невозможна (гарвардская архитектура), но недавно запилили AOT, который впрочем тоже для неподдерживаемых платформ придется перепиливать. Ну и в целом язык был анальной проприетарщиной от М$ и лишь недавно вылился в опенсорс). Ну а что касается популярности - под самый популярный игродвижок пишут именно на шарпе игоры.
>>1306807>Ну и в целом язык был анальной проприетарщиной от М$ и лишь недавно вылился в опенсорсИ вот это вот - его главная проблема. За долгие годы анальной проприетарности за ним закрепилась ниша мидл-левел этнерпрайза, прибитого гвоздями к шиндошс-онли инфраструктуре. Ни моно, ни ксамарин эту ситуацию не переломили, разве что вот говноюнька хоть как-то открыла для языка новую нишу на рынке труда, до неё он вообще был загибающимся легаси-языком для вышеупомянутого мид-левел энтырпрайза.
>>1306699>Тем, кто считает Си языком высокого уровня, пора очнуться из сорокалетней комы и обнаружить, что в современном компьютерном языкознании стандарты несколько поменялись. Любой язык представляющий переносимую абстракцию над железом суть высокоуровневый. Суть в том что на сишке можно написать переносимый код, при этом прилагая усилия для избегания граблей с типами и прочим, на ассемблере это ни при каких усилиях не получится - исход для x86 ты не заставишь скомпилиться под ARM.
Отдельного треда по Qt нет, так что спрошу здесь. Суть такова, нужно запилить таблицу большого размера где-то 1.5к ячеек, пикрелейтед. В каждой ячейке нужно чтобы отображались данные из бд с возможностью редактирования, какие-нибудь чекбоксы, комбобоксы. Что лучше использовать для реализации такой хуйни? Сейчас думаю использовать QTableWidget, в который засовываю свой кастомный виджет со всей хуйней внутри.
>>1306924Это неопределенное поведение, компилятор может делать что угодно. Если бы ты инициализировал переменную, ему бы пришлось сначала скопировать константу на стек, а потом загрузить её в регистр. Но ему не нужно делать ни того, ни другого, поэтому он этот регистр тупо занулил через XOR EAX EAX или типа того, потому что имеет полное право.
>>1307008Тут надо понимать, что это работает так только в конкретном случае. В этом примере ты, скорее всего, увидишь не ноль:int a;if (x == 0){a = 2;}if (x == 2){a = 6;}float b = sqrt(123);//Заставить компилятор сбросить штуки на стекstd::cout <<a << b;
>>1307010Блин, про x забыл:int x;std::cin >> x;int a;if (x == 0){a = 2;}if (x == 2){a = 6;}float b = sqrt(123);//Заставить компилятор сбросить штуки на стекstd::cout <<a << b;
Аноны, шёл гайду из старой шапки почему его убрали?. Там был блок с 4 книжками, 3 из которых были от Мейерса и рассказывали про современный на тот момент С++. В шапке написано желательно пролистать все 4. Но я вот одну закончил, и начал читать вторую. Тут советы повторяются, а некоторые и вовсе противоречат прошлому изданию.Наверное дело в том что я начал с 2015 года. Так вот какой смысл то их читать собственно? Это последнее и 3 издание, если не ошибаюсь. Во втором и вовсе 38 из 40 советов повторяются. Может кто прояснить, стоит ли их читать или это трата времени просто?
>>1307116Думаю во многих актуальных книжках (Липпман, Джосатисс) советы так или иначе повторяются либо даётся их модификация.
>>1307165Ну так там все книги по факту являются модификацией предыдущей, но при этом если в одной книге пишется что пока-что какой-то технологии нет в книге 2008 года например писалось что нет технологии для отключения функций в классе либо final а в следующей книге уже описывается эта технология. Отредачте шапку тогда, исправьте на читать последнюю. Хотя похуйдумаю, всё равно ее не добавляют уже
>>1306811«(Без)знаковое целое размером не менее X байт», «указатель на символ», «цикл с предусловием», «структура с таким-то выравниванием полей» и тэ дэ — это «абстракции»только если по меркам 70-х. Высокоуровневый язык в первую очередь должен предоставлять удобные средства для работы в терминах предметной области (причём произвольной, если это язык общего назначения), а не железяки. В сишке железяка будет водопадом протекать сквозь попытки хоть что-то абстрагировать, как ты ни ухищряйся.
>>1307216> например писалось что нет технологии для отключения функций в классе либо finalНу, блин, в таком случае надо учитывать ведь и версию языка.А то будешь читать что-нибудь из старого, а там про какой-нибудь Copy Elision и прочее ничего нет.
ПЕРЕКАТhttps://2ch.hk/pr/res/1307268.htmlhttps://2ch.hk/pr/res/1307268.htmlhttps://2ch.hk/pr/res/1307268.htmlhttps://2ch.hk/pr/res/1307268.htmlhttps://2ch.hk/pr/res/1307268.html
>>1306230C++ это все же низкоуровневый язык, и нужно постоянно ебаться с кроссплатформенным ассемблером ака сишка епт. Поэтому ассемблер знать нужно, а то блять создашь мегабайтный VLA, и будешь охуевать когда программа пишет вместо result: x -- segement naebnulsa.
>>1306811При желании код в fasm можно обмазать кучей макросов и условной конпеляцией как это делают в це и получить условно переносимый код.
Аноны, помогите разобраться с перегрузкой функции. Нужно реализовать класс Матриц на С++, я нашел в тырнете программу, но разобраться никак не могу.Есть код (http://hardfire.ru/class_matrix) что бы весь листинг не кидать. В нем есть перегрузка матрицы, вывести обычную матрицу я понял как, а как вывести матрицу из массива чисел - не понял.matrix(double array[], int N, bool horizontal=0)Как использовать эту функцию?Ппробую так,напримерmatrix q({ 2.3,5.2,4.3 }, 3, 1);Пишет E0289 отсутствуют экземпляры конструктора "matrix::matrix", соответствующие списку аргументов
>>1309952Вроде понял, создал в main массив double arr[] = { 1,5,7 };И закинул ево в ту функцию matrix q(arr, 3, 1);
Где еще можно работать language-lawyer-ом?https://stackoverflow.com/questions/53151521/could-we-access-member-of-a-non-existing-class-type-object
>>1295983 (OP)Аноны, нужна помощь.Вот в джаве или шарпе, после того момента , когда комфортно для себя начинаешь писать чисто на ЯП, ты переъодишь на фреймворки - Спринг или что то подобное в шарпе.А что делать в крестах? Есть какая то готовая инфраструктура ? Что то такое, что можно задрочить и идти на собес?
Анон, спрашиваю твоего советаСижу на связке сишечка + кресты + Qtуже и опыт работы вроде за плечами есть, и базовую хуйню из разряда структуры данных + ООП знаюнаформошлепить могу на легком, был даже один проект с ЦОС, с него больше всего угорелКакое-то время реверс интересовал, но почитал что придётся всё время сидеть и в ИДУ пялить, восторга не вызываетматан давно забросил, но когда-то он мне доставлялсобсно вопрос: не ебу в какую сторону двигаться и что дальше учить, так что высрите мне вашу субъективщину, охота посмотреть чем люди живут, мб что-то зацепит
Анон, спрашиваю твоего советаСижу на связке сишечка + кресты + Qtуже и опыт работы вроде за плечами есть, и базовую хуйню из разряда структуры данных + ООП знаюнаформошлепить могу на легком, был даже один проект с ЦОС, с него больше всего угорелКакое-то время реверс интересовал, но почитал что придётся всё время сидеть и в ИДУ пялить, восторга не вызываетматан давно забросил, но когда-то он мне доставлялсобсно вопрос: не ебу в какую сторону двигаться и что дальше учить, так что высрите мне вашу субъективщину, охота посмотреть чем люди живут, мб что-то зацепит
>>1304730>структура типа {char; int; char;} на современном сферическом компиляторе в вакууме с большой вероятностью будет выдавать сайзоф 12. Привет двачерам из 2003 =)24 же. У современных машин слово восемь байт, а не четыре.
>>1312700Если ты просишь помощи, то ты должен показать что ты что-то сделал сам, либо пытался. Тебя на любом сайте пошлют нахуй с просьбами сделать дз за себя, потому-что тебе лень
>>1312803>Привет двачерам из 2003 =)Привет из 1488-го =)> 24 же.https://wandbox.org/permlink/g6Em3moNxZ0VxtZn> У современных машин слово восемь байт, а не четыре. У машин вообще слов нет, Слово было у Бога.
Привет, двачане. Я тут впервые, и так случилось, что за помощью. Ситуация такая. Есть template класс, надо обозначить для него template функцию как friend. Если написать так:template<typename T>class Zalupa {public:friend T func<T> (Zalupa<T>&);};template <typename T>T func (Zalupa<T>& z) {}то не распознает func<T> как template, а если объявление func кинуть перед объявлением класса, то ругается на неизвестный тип параметра функции.Чувствую себя тупым...
Двощ, пилю лабу по самоучителю Шилдта. Проблема с некоторыми прогами по листам, например с этой: https://pastebin.com/aENqPSet 14.4, пример 5. Пикрил. Запускаю в VS2017. Как пофиксить?
>>1313377на всякий случай, вставлю свои три копейки о том, как где-то в англоязычных интернетах читал мнение, что джавист Шилдт зря взялся за C++ (как автор), и учиться по его книге - гавно вариант.
>>1313256Сомневаюсь, что такое объявление friend синтаксически корректно. Сделай такtemplate<typename U>friend U func(Zalupa<U>&);
>>1313377Скорее всего, в первом forfor (i = 0; i < 10; i += 2) lst2.push_back('A' + i);должен быть lst1, а не lst2. А ассерт вылезает потому, что вызов merge требует, чтобы оба листа были отсортированными
Пацанва, вопрос по QTconnect(socket, SIGNAL(connected()), this, SLOT(connectClient()));этот коннект должен при удачном соединение перекинуть на слот и выполнить его. В слоте просто похуй что вывод строки допустим. Если коннект с 1 раза удачный, то все робит , строку выводи как надо. Если раз 100 тыкать на заведомо неконнектюющююся хуйню, а на 101 прикконектится к нормальному порту, он блять выведет 101 раз сообщение. Че за ебала? как фиксить, чет даж хз как гуглить
Кто поможет студенту распиздяю не вылететь из универа. Кто хорошо разбирается в массивах? Помогите сделать лабу. Отпишите свой тг, я напишу сам.
>>1314066> хорошо разбирается в массивахО, как раз ищу вакансию массивщика. Серьезная предметная область...
>>1295983 (OP)на торрентах vs2017 с большим набором доп хрени кроме c++, как правильно выбрать, чтобы можно было работать на python, c++, c#. Геймдев не интересует, есть какое-то описание нормальное для разделов и что стоит ставить , а что нет(всего 40gb) или только искать описание каждого набора?
Анон, поясни пожалуйста. Почему вызывается деструктор вызывается три раза, а не два? В книжке сказано, что из-за операторной функции. Подчеркнул красным.
>>1316134Что за говно ты читаешь?В дефолтном конструкторе выделяют память с использованием new, в то время как везде удаляют используя delete []Присваиваешь такой дефолтно сконструированному объекту что-то и привет UBВ sample::set предыдущую память не освобождают...Пиздец.
>>1316202Ничего не понял. Можно проще. Зачем удалять в sample::set, если есть деструктор который удаляет. Вот здесь по ссылке у чувака все получилось и програ норм робит - как в книге.>>1316203Там тоже нне дали ответа "почему".
Анон, выручай.Где я вылезаю за пределы массива. Уже пол часа сижу и не вижуvoid sloj(int a[], int b[], int &la, int lb){ int i = 0, j = 0, c, d; for (i; i < la; i++) { for (j; j < lb; j++) { if (a > b[j]) { la++; d = i; c = la; for (c; d + 1 < c; c--) { if (c == (0)) break; a[c] = a[c - 1]; } } } }}
>>1316444Менее ублюдски void sloj(int a[], int b[], int &la, int lb){int i = 0, j = 0, c, d;for (i; i < la; i++){for (j; j < lb; j++){if (a > b[j]){la++;d = i;c = la;for (c; d + 1 < c; c--){if (c == (0))break;a[c] = a[c - 1]; } }}}}
Привет. В книге попалось задание "напишите прогу для проверки целых чисел на четность/нечетность, используя оператор вычисления остатка". Ничего лучше кроме этого (неэффективного для отрицательных чисел) не придумал:https://pastebin.com/eZvT83NYНе могу допереть как написать через предложенный оператор, накиньте за щеку идей.
Зачем инициализировать переменные, когда это необязательно? Какие подводные камни? На простейшем примере:int main() {char a;cin >> a;cout << a;}аффтар предлагает char a = ' ';
Установил Visual Studio, пытаюсь запустить и вылезает такая надпись. Что делать? Гугл ничем не помог.
>>1316444>for (i; i < la; i++)поседний цикл i = la -1>la++;la принимает размер массива, т.е., a[la] уже segmentation fault>c = la;>for (c; d + 1 < c; c--)>a[c] = a[c - 1];т.е, в первой же итерации a[la]
>>1318242насколько я помню, стандарт не выдвигает требований по автоматической инициализации.Т.е., при объявлении переменная может быть инициализирована чем угодно.Char по дефолту байт занимает, т.е., при ошибке чтения с потока (флаги (bad|fail){1}(bit)?), у тебя будет символ ß, например.С кайфом, так сказать.
>>1316369//генератор для C++11#include <random>int main(){ std::mt19937 mersenne; std::random_device rand(mersenne); std::uniform_[int или real]_distribution<> dist(левая_граница, правая_граница); auto a = dist(rand); return 0;}
Вопрос нуба ИТТ.В народе постоянно говорят о том, что использовать goto - плохо и нужно искать любые способы его обхода.Если goto так нежелателен, то поясните, как в подобном коде (пример ниже) можно избежать его использования. По задумке в консоли текст выводится каждый раз, когда человек нажимает на конкретную кнопку и прекращает выводиться, когда нажимается любая другая. Ифы, вайлы, форы и прочие элсы ведут к тому, что текст выводится один раз. Ну, или я не заюзал какие-то дополнительные неизвестные мне элементы синтаксиса.Инбифо: юзать классы, ООП, либы, лямбды, полиморфизмы, еще какую-нибудь неизвестную мне хуйню, до которой мне год пинать кресты, пробираясь через самые азы.#include "pch.h"#include <iostream>using namespace std;void main(){ link_1: char char_1; cout << "Hello world!\n"; cout << "Would you like to repeat?\n"; cout << "Press \"Y\" if you would.\n"; cout << "Press any key if you would not.\n"; cin >> char_1; if (char_1 == 'y' || char_1 == 'Y') { goto link_1; } else { cout << "OK, bye then.\n"; system("pause"); }}
>>1320510Уууу, Абу пидр. Не может сделать нормальное отображение спецсимволов.#include "pch.h"#include <iostream>using namespace std;void main(){link_1:char char_1;cout << "Hello world!\n";cout << "Would you like to repeat?\n";cout << "Press \"Y\" if you would.\n";cout << "Press any key if you would not.\n";cin >> char_1;if (char_1 == 'y' || char_1 == 'Y'){goto link_1;}else{cout << "OK, bye then.\n";system("pause");}}
>>1320511Легко#include <iostream>using namespace std;void main(){ char char_1; do { cout << "Hello world!\n"; cout << "Would you like to repeat?\n"; cout << "Press \"Y\" if you would.\n"; cout << "Press any key if you would not.\n"; cin >> char_1; } while (char_1 == 'y' || char_1 == 'Y'); cout << "OK, bye then.\n"; system("pause");}
Вкатываюсь в кресты после шарпа, а до него французского делфи. Не вижу пока никаких трудностей. Так в чем же тогда сложность сего языка, что все так ноют, мол, сложная хуйня?
>>1320795как до строк доберёшься, расскажи, ок?а то в шарпе реализация строк очень даже ничего и никаких сложностей с символами нетсложности, в основном, в утечках и корявой работы с памятью, в шарпе этого тоже нет, там по аналогии джавы спизжен весь язык гарбэдж коллектор
>>1295983 (OP)Как на счет того, чтобы сделать уже наконец перекат?Пикрилейтед - в ОП-пик. Если еще не делали.
>>1320791Сам допетрил. Просто через while. Правда пришлось дублировать все cout-ы в функцию.>>1320891>как до строк доберёшься, расскажи, ок? а то в шарпе реализация строк очень даже ничего и никаких сложностей с символами нетСейчас после пайтона синтаксис с-ей кажется ну совсем громоздким. В пайтоне можно было тупо любую строку помножить на интеджер и повторить н раз тем самым. А здесь целую функцию писать с циклом и так каждый раз. Хз как оно в жабе и шарпе, но что-то подсказывает, что намного проще.Хотя казалось бы, давно уже могли бы накидать синтаксического сахара, чтобы прямо из коробки все работало. Кому не нужно и кто за каждую миллисекунду в отладчике борется - пусть просто не пользуется.
>>1321476>В пайтоне можно было тупо любую строку помножить на интеджер и повторить н раз тем самым.Разумеется, пептон так и задумывался, к тому же, он динамический почти на 100%, там такие операции за хуйню делаются (но вылезают и другие сложности при этом).