Это копия, сохраненная 17 ноября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

Ответы на все вопросы: http://eel.is/c++draft/
http://eel.is/c++draft/, пропущенный через кишечник макак: https://en.cppreference.com/w/cpp
Если знаешь си, то есть упрощённое объяснение: виртуальные методы для класса хранятся в специальной структуре с указателями на функции (vtable), которая одна на класс. То есть функция вызывается не напрямую, а косвенно. Это позволяет делать такую штуку, как полиморфизм.
Нет петуха на оппике. Не канон.
Как в одну строчку всё это сконвертить?
Привет аноны. На связи кун 19 лет. Учу c# из-за unity и для запасного плана, если придется вкатываться во что-то серьезное учу c++. Первое время охреневал от синтаксиса c++ и как он разница с с#, но со временем свыкся ибо похожи, как по мне.
Скоро окончу шарагу и пойду учится на информационную инженерию из-за того что нравятся реализовать идеи или мысли в "реальные" объекты, сущности, почти чувствовать себя богом. Из-за этого начал изучать unity, а потом и c++.
Хотел спросить:
Стоит ли выкатываться из уютного c# в жестокий с++.
Даст ли мне высшее образование то что я не смогу получить, выучить?
И стоит с моими фантазиями выбрать именно этот факультет.
Ещё хотел спросить зачем писать
std::cout если можно объявить namespace std? Это просто как один из примеров.
И хотел спросить где я обосрался и как скоро мои фантазии о программировании превратятся в крах. И какое будущее ждет с++ и может с#
Хотелось бы ещё получить пару советов для начинающего.
Заранее спасибо.
> Стоит ли выкатываться из уютного c# в жестокий с++
Надо делать то, что тебе нравится. И шарп и кресты востребованы на рынке.
> Даст ли мне высшее образование то что я не смогу получить, выучить?
Высшее образование - трата времени. Получать придется, если хочешь сьебать с РФии, но знаний оно никаких не даст. Исключение МГУ- МГТУ и прочие топ вузы.
> Ещё хотел спросить зачем писать
std::cout если можно объявить namespace std? Это просто как один из примеров.
https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice
> И какое будущее ждет с++ и может с#
C++ точно ждет светлое будущее, про шарп не заню, но Майки его точно не бросят.
> Хотелось бы ещё получить пару советов для начинающего.
Учи английский язык, ежедневно программируй, читай книги, смотри конференции, не читай треды неудачников а-ля "МЫ ВАМ ПИРИЗВОНИМ", попробуй попасть в Яндекс на старте карьеры, очень многому научишься.
>C++ точно ждет светлое будущее
Если из него всё легаси говно вычистят и сократят язык до смысла, то может и ждёт. Ну а пока c++ лишь теряет свои ниши.

>Высшее образование - трата времени. Получать придется, если хочешь сьебать с РФии, но знаний оно никаких не даст. Исключение МГУ- МГТУ и прочие топ вузы.
А можно вот тут поподробнее?
Сам недоучился. Уже 7 лет как работаю недопрогроммистом 1С, в котором знаю достаточно много. При этом хоть в каждой вакансии и пишут высшее/неоконченное, но в большинстве контор, думаю, на это не смотрят. Только в гос конторах. Так вот знаю в 1С достаточно много, поэтому считаю что для поиска работы мне хватит опыта вместо корочки.
Суть в том что 1С заебал и хочу перекатиться в С++. Вариантов устроиться стажером без вышки, видимо, еще меньше
Единственное зачем мне пригодилась вышка — отдельный порядок съеба из рашки.
У меня нигде вышку не спрашивали, кроме командировки в Швецию. Т.е. мне пригодилась - большей части людей точно не пригодится.
Если сомневаешься - найди дистанционное обучение в любом гос-вузе (я закончил такую хуйню в СибГУТИ), и просто плати профессиональным делателям заданий и потом купи любой диплом.
думал об этом раньше. Но потом понял что в 1С я и так устроюсь благодаря опыту.
А если пойду в С++ это будет такой даунгрейд по ЗП что не до этого будет
Ты понимаешь что в среде программистов ты дно пишушее на хуево переведенном на русский вижуал бейсике?
У нас в городе 1Сники максимум 60к получают. Ну, кроме начальства.
Хотя вкатывальщик в cpp больше 30к не получит тоже
Именно из-за этого и хочу съебать. Ну и по зп уже потолок близко, хоть и ДС.
Собственно, я это знал еще до того как увидел 1с,так как изучал с++ ещё со школы. Но надо было куда то устраиваться работать, стажёром с++ тогда не нашел вакансию. Может плохо и мало искал. Думал, посижу пол годика поизучаю с++. Но было слишком много нового по работе, стало не до этого. Так прошло 7 лет.
Думаю, если написать в резюме "работал в 1с 7 лет" так же и скажут как ты написал
А почему кресты? Ты вряд ли любишь облизывать каждый байт, чем тебе JS не вкатывает?
Грворю же, изучал с++ еще со школы. Хотя я тогда больше в opengl ударился, с++ толком и не изучал.
Не хочу в веб
На пюсах то? Можешь показать рабочий код.
Вообще меня очень интересует как происходит разработка такая реальная на плюсах. Как объединяется код разных разработчиков и тд.
На плюсах видел только или свой код иди движки quake doom3.
Ну как, мне нельзя :З
А объединять можно по разному. Есть такая штука как CGI(Common Gateway Interface). Её обычно юзают когда пишут прошивки для всяких роутеров или других похожих девайсов в с веб интерфейсом. А в самом интернете считается устаревшей.
Можно вызывать написанную на крестах библиотеку из node.js
Братишка, учили или уже сразу раст, или хаскель.
Возникли вопросы насчет русского языка в консоли.
1) Что конкретно делает setlocale?
2) Понял, что кодировка файла с кодом должна совпадать с кодировкой консоли, поэтому использовал SetConsoleOutputCP() и SetConsoleCP(). Попытался установить значение 65001, сохранив файл в кодировке UTF-8. Вывод работал, а вот ввод — нет. Почему?
3) Следует ли мне, исходя из предыдущего пункта, сохранять код в стандартной кодировке консоли Windows (866), или я все же могу сохранить файл в кодировке UTF-8, а в консоли использовать другую кодировку?
Как-то хуево сформулировал вопросы =/
Братишка, просто вкатывайся в раст. Там тебе не нужно будет думать о таком говне.
Как-то попытался вкатиться. Хотел установить библиотеку random, но ничего не получил, кроме бесконечной загрузки. В итоге забил, хех.
Один раз ставишь
> cargo install cargo-edit
Потом в любом проекте:
> cargo add rand
Напомни, как там в крестах либы ставятся?
Хочешь ебаться с указателями, разберись с Си. Поймешь что ебаться с ними совершенно ненужно. Впрочем, если очень хочется ебаться с указателями, волшебный мир unsafe & undefined behaviour ждет тебя.
Современные кресты пытаются сделать все, чтобы ты с этими самым хуятелями не соприкасался.
Cargo, насколько я помню, предполагает систему проектов. Не люблю такое. Мне больше нравится gcc файл1 файл2 файл3 -o вывод -разные -параметры, чем cargo соберимнепроектплеес.
Тебе никто не запрещает ебаться с
> rustc файл1
Просто это настолько глупо в 2018
> cargo new fuck
> cd fuck
> cargo run
Это работает настолько просто и прозрачно (просто открой Cargo.toml), что совершенно неясно почему можно хотеть делать то же самое руками.
Я хочу поебаться с этим как минимум для того, чтобы понять, как это работает, а не надеяться на то, что cargo сделает все за меня. Понятно, что если ты работаешь над большим проектом, лучше использовать подобное упрощение, которое организовывает проект за тебя. Но нельзя, обучаясь программированию, пропускать такие моменты, в этом нужно обязательно разобраться, по-моему. Передо мной не стоит цели научиться работать с огромными проектами, чтобы потом зарабатывать 300кк в секунду. Я хочу понять все тонкости C/C++, в том числе и указатели, которые, как ты сказал, сейчас практически не используются.
Так я не спорю с тем, что с rust можно ебаться таким же раком. Я это к тому, что твое
> Просто это настолько глупо в 2018
это не совсем верно, если речь идет об обучении. Я много хорошего слышал про Rust, но разобраться хочу с проверенным временем C++.
Мне вот еще интересно, как разрабатывают на с++ под всякое железо, микропроцы и прочее? Я понимаю под винду или линух, там есть свой компилятор, свои библиотеки. А как это там?
Пиздец вендопроблемы.
>>63961
>>64037
https://yadi.sk/i/vDXZ5QBh8VZfSQ
https://yadi.sk/i/vDXZ5QBh8VZfSQ
https://yadi.sk/i/vDXZ5QBh8VZfSQ
Заодно поясните- это хлам, который писали совковые преподы, знающие C++ не лучше чем школьник 9 класса, или знающие люди?
Ничего криминального, вроде. Но и ничего особенного. Обычная методичка усть-пиздюйского института. conio.h, _getch(), как в консоли кириллицей в винде писать и прочие очень важные вещи.
Выглядит как методичка для уроков по информатике в обычной церковно-приходской школе.
Код для вычислений всяких выражений написан по принципу: как написана формула так и в коде наваляем (один и тот же sin/cos вычисляется по много раз, куча лишних операций умножения/деления, которые легко заменяются константами).
>один и тот же sin/cos вычисляется по много раз
Нормальный компилятор соптимизирует.
А читаемость должна быть.
Впрочем, с тем, что методичка для цирково-приходской школы я на 100% согласен.
Хуюф.
Если тебе кажется что в усть-залупинский вуз станут впихивать 22 миллиона, то сочувствую.
> > педагогический университет
Это не значит что там учителей информатики готовят. Не будь дебилом.
Анон, а как правильно завершать работу программы при событии выключения пеки, если у меня QT?
Я ловлю WM_QUERYENDSESSION при помощи nativeEventFilter, отвечаю false и начинаю корректное завершение программы
Затем по логам идёт всё нормально, за исключением того что WM_QUERYENDSESSION мне больше не приходит.
Но приходит WM_ENDSESSION, которому я тоже отвечаю false и пытаюсь завершиться.
Чяднт? Почему у меня не отвечается false? В QT это как-то нужно по другому обрабатывать?
А, нет, не понял
>bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void message, long result)
>On Windows, eventType is set to "windows_generic_MSG" for messages sent to toplevel windows, and "windows_dispatcher_MSG" for system-wide messages such as messages from a registered hot key. In both cases, the message can be casted to a MSG pointer. The result pointer is only used on Windows, and corresponds to the LRESULT pointer.
Пишу
*res = false;
фейл
Пишу
long fl = 0;
res = &fl;
фейл.
Как вернуть LRESULT = false?
Ну и он не усть залупинский. Екатеринбург это всё-таки город- милионник.
Короче проехали. Нахуй этот срач нужен
>кодировка файла с кодом должна совпадать с кодировкой консоли
Нет, сконпелируй с -finput-charset=utf8 -fexec-charset=cp866 или как-то так.
> В яндекс
А если попробовать в Сбербанк или похожие структуры? Им вроде нужны молодые умы. кроме Тинькофф. Просто для меня репутация Яндекса не очень
doubles.assign(ints.begin(),ints.end());
https://gcc.godbolt.org/z/ckOb7s
>call sincos
Костыли нужны, чтобы он сразу в контсэкспре все не посчитал
мимо-другой-анон
Я в душе ниибу, что такое репутация-для-тебя. А вот научиться в яндексе работать над сложными проектами и получить отличную запись в резюме - это клево.

MFC + DirectX
Спасибо большое, полезная штука. -finput отвечает за кодировку файла, а -fexec — за кодировку, используемую в самом exe, так?
Всё так.
Где петух? Под стать треду.

Тут недавно синёр из топовой конторы заходил и всех петухов разогнал.
https://git.movepoint.su/anton/iv
релизить буду переписанное вплоть до другого контейнера для текста, еще пижже
> The text is stored in an augmented binary search tree, one glyph per node.
Небро, глиф — это графическое изображение буков. Одна и та же буква A может изображаться разными глифами, в зависимости от текущего шрифта.
Ты точно глифы хранишь?
Ну я про код я уже не буду писать. Он не менее безграмотно написан, чем ридми.
лан, code point
Сочини санэт. Эйчары любяць санэты.
Хах. вот если я заполню свой хаб одними лишь типами сортировок, то как бы и кому я нужен буду?
Сделай простенькие игры.
Пишу на плюсах высоконагруженные системы, поставил сервак, закодил бекенд для своего вуза. Впендярил неплохую туда еще верстку. Мне предлагают оставаться после магистратуры и учить недостудентов. Стоит ли?
Написал уже 4-5 клиентов двача, все летают как шустренькие, думаю выезжать из деревни и стремиться в большие города. Что скажете?
Мне нужно передавать данные из структуры в мейн, из мейна в функцию просто так надо. На 37ой строчке нереализуемая передача массива в функцию. Я так понимаю, что это можно сделать с помощью указателя, но не въебываю - как.
Иди нахуй со своими указателями. Я в вузе их не понял, с тех пор программирую под джаву. С++ говно, а не язык.
Хуйня происходит, пофиксил и сделол. Там просто рандомный код накидан для примера. Оказалось, довольно просто, лол.

На С++ написаны операционные системы а также виртуальные машины и рантаймы для всех управляемых языков, в том числе и джавы.
На джаве не написано нихуя, кроме 20-мегабайтных сайтов, которые прогружаются минуту.
Говно язык все равно С++
А мог бы как белый человек использовать ссылки.
Эти вечные срачи.
У меня андройд, а не сайты. Изучать спринг хуинг и прочее говно оставляю легаси рабам. Вообще думаю закончить пару проектов писать и начать перебираться на иос.
Ну я думаю, что если ты останешься то в профессиональном плане будешь развиваться лучше чем в ДСе в каком-нибудь интерпрайзе. Только помни одно, как сказал один человек, либо ты преподаёшь, либо кодишь, иного не дано. Так что хлопочи себе место лаборанта и развивайся как прогер+матем.
>Что тут происходит?
Кто-то установил на твой компьютер самый хуёвый шрифт во всём интернете а также библиотеку для функционального пердолинга.
Один из нестандартных инклюдов, скорее всего range.
>C:/Program Files (x86)/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x
86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -
lkernel32
ХЗ знает.
Я понимаю, но хочу уточнить у опытных спецов.
(♦ означает звёздочку, она тут не печатается)
Вот смотрите, есть у нас вектор std::vector<T> v(15);
После такого объявления v.size() вернет 15, а v.capacity() вернет >= 15.
Допустим, мы его чем-то заполнили и замутили пару итераторов auto iter_a = v.begin(); auto iter_b = v.end()-5;
А еще сделали пару указателей T♦ ptr_a = &v[0]; T♦ ptr_b = &v[10];
Теперь допустим, начинается реаллокация. И отсюда несколько вариантов, что бывает.
— Первый. Я пишу v.resize(20); Оба итератора и оба указателя могут инвалидироваться. То есть, возможно там подряд и была память на увеличение вектора, но полагаться на это — UB и вообще нельзя.
— Второй. Я пишу v.resize(10); iter_a и ptr_a остаются гарантированно валидными, а iter_b и ptr_b инвалидизируются.
— Третий. Я пишу v.reserve(20); По сути происходит то же, что и в первом варианте. Возможно, вектор реаллоцируется и элементы всем цыганским табором переезжают на новое место. Депеши по старым адресам идут в никуда.
— Четвертый. Я пишу v.reserve(4); Это меньше исходного размера и ничего не происходит. Указатели с итераторами остаются рабочими, соответственно.
— Джокер. Перед заполнением вектора вызвали v.reserve(20), тогда все вышеизложенные варианты сохраняют валидными оба итератора и оба указателя.
Я правильно всё понимаю?
ВРоде правильно.
он учит тебя думать о ненужных вещах, деталях. в большинстве случаев этот язык является не выбором, а необходимостью. С является таковым еще больше
Не совсем так. Оптимального подхода никто не требует. Можешь хоть пузырьком сортировать и ебашить четырехэтажные иерархии виртуального наследования.
Но как я понял, благодаря этому будет вырисовываться красивая архитектура кода, ведь не зря же столько инструментов есть
Это выебщики пиздят. На стл, бусте и умных поинтерах можно не менее безопасно чем на жабе писать.
И все равно быстрее будет.
Но вот если решил прям супер оптимально написать, тогда можно и сегфолт в ебло словить и дедлок итд.
Если есть голова на плечах и желание двигаться дальше, ты будешь изучать инструментарий c++ и охуевать от его разнообразия, но разобравшись ты уже будешь подходить к разной реализации с лучшей точки, которую предлагает с++
class Pipeline
{
};
class GraphicsPipeline : public Pipeline
{
};
class ComputePipeline : public Pipeline
{
};
class DX_Pipeline : public Pipeline
{
};
class DX_GraphicsPipeline : public DX_Pipeline, public GraphicsPipeline
{
};
class DX_ComputePipeline : public DX_Pipeline, public ComputePipeline
{
};
Да, только получится говно с дублированием. Гугли виртуальное множественное наследование
Так я уже загуглил и уже как только не расставлял кейворд virtual, но везде возникают конфликты, помоги правильно расставить плз
Тебе интерфейс или реализацию надо наследовать? Если интерфейс, то выделяйте его в абстрактные классы, если реализацию, то используй композицию
Нужно наследовать интерфейс, но я не очень понял что ты имеешь ввиду. Что значит "выделяйте его в абстрактные классы"? У меня и так Pipeline, GraphicsPipeline, ComputePipeline - абстрактные, а те что с DX_ - их реализуют.
Зачем наследоваться от диффура?
Смотрел кто-нибудь эти лекции?
Есть профит?
Мне тут рекомендуют книжку Джефф Элджер. C++: Библиотека программиста.
Говорят, это основной учебник по продвинутому освоению языка C++. В шапке треда не нашел.
Что скажете?
Если в отрасли не нужны молодые кадры, то она находится в состоянии рецессии с негативным прогнзом в сторону дальнейшего снижения.
Въебал бы автору в щи с вертухана, а затем сняв скальп сожрал на глазах его матери, которую я буду ебать его нижней челюстью.
![UFi8G1MHi40[1].jpg](/pr/big/thumb/1263368/15372690950020s.jpg)
![6FmnXMtsO48[1].jpg](/pr/big/thumb/1263368/15372700429580s.jpg)
Да вот даже так эти ошибки есть.
У тебя студия без предупреждений поставилась? Ты качал было в installer'e пункт РАЗРАБОТКА КЛАССИЧЕСКИХ ПРИЛОЖЕНИЙ С++?
Я там вообще все выбрал. На всякий случай, благо место на диске есть.
длл https://pastebin.com/raw/bEZ8jhHA
exe https://pastebin.com/raw/XQEF997n
нужно поменять пути на ваши
> Списки полезны если много вставок в середине, дек - если с краев.
Это написано в любой книжке/туторе про них.
Я имею ввиду реальное применение в своих программах. Как, например, элемент какой-то другой структуры данных.
Дай рыбу.
Ну вот я недавно делал кеширующий провайдер данных, был список указателей на структуры их описывающие, при обращении к ним они переносились в начало списка, при нехватке памяти удалялись с конца.
Дек вроде нигде не использовал.
Но для быстродействия на самом очень часто все делаю тупо на векторах, пусть даже в ущерб потребления памяти.
https://cplusplus.github.io/LWG/issue2981
Да и в целом про deduction guides хотелось бы больше инфы на русском, объясняющей тонкости (а не сухое изложение с cppreference) ну или на английском но попроще (какое нибудь how to)
> Шарящие стандарт, поясните, что это значит (не перевод естественно, а с точки зрения использования)?
Ничего.
> Да и в целом про deduction guides хотелось бы больше инфы на русском
Тут рассказывалось про них
https://www.youtube.com/watch?v=rJWSSWYL83U
Где-то во второй половине вроде
Хуле ты не на своей доске /б/итард?
Неподскажите ли оптимальный алгоритм?
И нахрена erase() делает последующий за ним итератор нерабочим?
https://ru.cppreference.com/w/cpp/container/vector/erase
А там про параллельные штуки и про сетевое программирование что-то есть?
Возможно, отсортировать, найти первый и последний нули и тогда уже один раз вызвать удаление?
Возможно, а зачем там ремув?
Этот ремув, он сдвигает часть вектора после удаляемого элемента ближе к началу, тем самым перезаписывая удалаяемый элемент, так ведь?
remove_if сдвигает все элементы, на которых предикат возвращает false в начало и возвращает итератор указывающий на начало последовательности элементов, возврающих true
Добрый день, господа программеры. Я написал небольшую утилиту, используя C++ Builder, и хочу начать её распространять за бабосики. При этом моя IDE, как это полагается, спирачена. Так вот, если я преобрету лицензию, с какими трудностями я столкнусь при попытке распространения моего софта?
Я об этом только начал задумываться и пока не знаю в какую сторону копать. Что лучше изучить в таком случае? Что там с авторскими правами и так далее?
ну вродь у билдера дорогая лицензия. Хотя вроде выпустили какую-то версию билдера, аналог visual studio community edition, которая свободная и пиратить не надо, посмотри, можно ли твой проект перенести на него, авось проще будет.
Да, слышал про неё. Как бы не оказалось, что она как в бесплатном Qt не собирает dll-ки. Ну а вообще, мне не обязательно нужна последняч версия. Я вообще свою на 2010-м написал, не думаю, что дороже 100к рублей выйдет. Такую сумму я более-менее смогу скопить. Просто, читал про лицензию Qt и там же месячная подписка идет. Так вот, если ты, например, за месяц подписки выдвинул в продажу продукт, то придется оформлять лиценщию на всё последующее время продаж. Поэтому и спросил про билдер, мало ли кто имел дело с распространением своего софта, сделанного на нём.
> Не поздно ли я начал вкатываться?
Нет. Сам я вкатился в плюсы после C в 24 или 25.
Через год открыл для себя стандарт.
Через полгода-год начал фиксить там баги, в том числе не-editorial.
ХЗ кто там про 10 лет пишет на то, чтоб выучить C++..
В канец
свои длл ты сколько угодно можешь собирать, другое дело Qt и вроде как OpenSource версия наоборот, обязывает тащить все с их dll и их динамической линковкой.
В общем, я это и имел в виду.
>списки (любые) или дек?
У меня ECS на велосипедном деке. Память под элементы выделяется страницами, которые хранятся в списке. Доступ к элементам по указателю, итерация по страницам. При удалении на место элемента заносится последний в деке. У каждого элемента есть айди, по которому можно найти элемент через таблицу. При перемещении элемента (на место удаленного), меняется указатель в таблице. При доступе по указателю сравниваются айди полученного элемента с айди хранящимся в ссылке, если они отличаются, то элемент ищется через таблицу, а указатель в ссылке обновляется. Получается быстрее и удобнее, чем иерархии классов с наследованием колеса от машины.
Потому что надо катиться из c++ в js, а не наоборот.
>char a = ' 1 '
В данном случае у тебя 1 - символ. ASCII-код которого равен 49. Вот это значение и хранится в char a. Когда ты приводишь эту переменную к int, то ничего не поменяется толком (разве что она после этого станет 4-байтовой и ты сможешь сохранять в ней значения намного больше, чем 127 при char).
Если ты хочешь исправить свой код, то убери кавычки с 1 (ну и можешь выкинуть приведение к int, хотя и с ним будет работать).
Нужно получить путь папки, где лежит некая .so библиотека.
Походу это можно сделать через
int dladdr(void addr, Dl_info info);
А как узнать адрес библиотеки из кода в этой самой библиотеке? Желательно без трюков с глобальными функциями.
А может это можно сделать через буст?
Есть такая штука как shared_library(const shared_library &lib)
Опять же, где взять ссылку на библиотеку?
Обычно хендлер на неё получается из функции, которая её загружает. А вот мне надо в самой библиотеке знать. Подскажите?
Звёздочки полетели, но я думаю вы поймёте
Что за пиздец здесь происходит ?
> Походу это можно сделать через int dladdr(void addr, Dl_info info);
Я делал именно так, но не знаю, подойдёт ли это под твоё
> без трюков с глобальными функциями
void °init()
{
DL_info d;
dladdr((void °)init, &d);
return new object(d.dli_fname);
}
Как часто ты юзаешь функции из algorithm?
Я имею ввиду find и все прочие.
Допустим есть пара или триплет в векторе и надо найти/изменить какое-то значение и тп.
С одной стороны для простоты хватит и цикла (тем более данных не так много), а с другой хороший тон и всё такое.
>QtCreator
Стоит вместе с cmake, как сделать портабл проект? Вот чтобы можно было папку перенести в любое другое место и не править пути вручную в CMakeLists.txt.user
Если я заменяю их на относительные, он при сохранении всё-равно заменяет их на абсолютные.
Нашёл упоминания про CMAKE_USE_RELATIVE_PATHS, но оно больше не работает по каким-то идейным соображениям.
Это дико неудобно, я часто перетаскиваю код между двумя компьютерами и не знаю как это нормально организовать. Хоть пиши скрипт на питоне, который нужно будет запускать после каждого переноса для фикса путей.
А в чём проблема с путями?
Это, вроде как, в шиндовсе надо писать вручную путь к библиотеке, например.

К какой библиотеке, причём тут библиотеки?
Вот у меня есть мой новый проект из одного файла на три строчки. Сейчас он на диске W и он записал абсолютные пути в свои внутренние файлы. Я переношу его на другой компьютер на диск D, а он всё-равно создаёт каталог сборки на местном диске W, хотя там он вообще никакого отношения не имеет к кодингу. В результате код и ексешники на разных дисках.
А всё что мне нужно, чтобы оно собирало проект в той же папке, где находится и CMakeLists.txt
Прописывать в конфиг не W:/code/graph/unknown, а что-то вроде ../unknown или ./unknown
С парой ясен пень find или find_if прокатит. А вот с триплет (это же ты tuple имеешь в виду) даже и не знаю как организовать. Там же нужно std::get<N>(dopustim_triplet) и тогда это всё заворачивается в for от i = 0 до size и что-то с этим делать, выходит, лямбду в теле фора писать или делать функтор или функцию, короче, громоздкое что-то. Никогда их не использовал.
Кто в треде может назвать пример использования массива кортежей на практике?
> А вот с триплет (это же ты tuple имеешь в виду)
Ну можно и через тапл, но я имел ввиду struct triple{ T first; U second; W thrid; } шаблонную йобу в начале опустил>
> Кто в треде может назвать пример использования массива кортежей на практике?
https://www.youtube.com/watch?v=fs6KV9iNi_U интересная штука
CMakeLists.txt.user это настройки QtCreator.
Хочешь портабл проект — оставь только CMakeLists.txt, а CMakeLists.txt.user удали.
Как вообще вкатиться в CMake? Я вот пробовал в точности повторить за https://cmake.org/cmake-tutorial/ но то ли у меня синдром Патау, то-ли еще в чем проблема, но не заработало.
Беда в том, что туториал ничего не показывает минимально рабочего а сразу громоздит кучу непонятной херни, в конце говорит мол, вуаля работает, а оно нихера не работает и ебись потом сам с кучей непонятной шляпы. Что делать? Есть пошаговые гайды какие?
Я искал простенькие проекты на гитхабе уровня лаба1 с несколькими файлами. Собирал и запускал.
Потом исходя из своих нужд искал ещё что-то: как подключить библиотеку, как собрать с нуля что-то и тд
И его каждый раз приходится удалять, а потом в иде кликать галочки. Это не очень сложно, но я себя идиотом чувствую занимаясь таким.

Марк Дж. Рочкинд. Программирование для Unix.
Уильям Ричард Стивенс. Unix: Взаимодействие процессов.
Уильям Ричард Стивенс. Unix: Разработка сетевых приложений.
На какую сам сядешь, на какую мать посадишь? Что вы о них можете сказать и в каком порядке их читать, если к теме только подошел и мало что понимаю?
Мои горе-доклады постят на дваче. Это успех. Про хэш-таблицу посмотри.
> Про хэш-таблицу посмотри.
Кажется смотрел, но частями.
Та тема не особо была интересна поэтому не вдавался в подробности.
А вот про консоль вопрос.
Ты говорил что до твоей штуки была какая-то своя поделка в которой уже никто разобраться не мог.
Вот лично у меня ассоциация "консоль с командами" это выпадающая йоба сверху из Квейка.
То есть если бы я делал подобную вещь, то ориентировался бы на это.
А как та работала?
Были ли ещё какие варианты?
Видео на ютуб заливал не я
>>68025
Консоль в квейке теоретически проще, т.к. в основном в ней геттеры-сеттеры различных параметров, ну и возможность процессить команды через ;.
Как работала та - читала слово из потока, делала гигантский ИФ по поиску этого слова, потом изменяла флажок на рандомное значение а-ля 0xFAFB, читала следующие слово, и искала это слово внутри if (flag = 0xFAFB). Как было сделано автодополнение - я так и не понял, если честно. Слишком тяжело было этот ад читать, да и таски у меня были другие.
Когда нужно было добавить новую команду, я делал именно то, о чем рассказывал в докладе - копипастил похожую.
Что бы ты посоветовал сделать для резюме?
Я имею ввиду какой-то проект который было бы не стыдно лол показать людям, вроде твоей консоли.
Просто когда начал смотреть, думал что нихера не пойму, но потом посмотрев исходники кроме ветвления и автодополнения, в них не стал разбираться без труда сделал своё подобие.
Любой юзабельный и законченый. Настоятельно НЕ рекомендую делать игры, очень сложно, а толку мало. Лично я, когда начинал учить кресты (в 26 лет лол), писал хлам на qt, а-ля клиент для web api.
Вообще - если говорить про около-джунов, то я бы скорее не писал код, а старательно штудировал Майерса и прочие очень умные книги. И задрачивал алгоритмы на leetcode.com. Как показывает практика собеседований (я собесил больше 30 джунов), теория на данном уровне важнее практики.
всякие фермы, кристаллики в ряд..
> Настоятельно НЕ рекомендую делать игры, очень сложно, а толку мало
Почему?
Кажется это самый простой вариант: сделать клон какой-то и добавить от себя что-то.
Скачай MSVC и не еби голову, серьезно
>Мои горе-доклады постят на дваче. Это успех.
А твой работодатель/коллеги знают, куда ты заходишь?
Ты задумывался над тем что будет, если они узнают?
>написал о том, о чем не разбираюсь
>не учитывать этот пост
Мы обязательно учтём, что вы любите писать о том, в чём не разбираетесь.
Смотрел как-то код lock-free очереди. Чуть крышей не поехал.
Это принципиально невозможно писать без ошибок, тесты тоже ничего не протестируют. Единственный выход – формальная верификация, которая пока сильно страдает от комбинаторного взрыва на больших программах.
Приложение многотопоточное и я сильно туплю не могу сообразить как это сделать правильно. До чего смог додуматься своими силами:
- Создаем флаг паузы в основном потоке графического интерфейса;
- Передаем флаг всем потокам в момент инициазации потока как указатель, чтобы его изменение из основного потока отображалось в остальных потоках;
- Ставим проверку этого флага через каждый N функций на проверку не включил ли пользователь паузу;
- Если он его включил, флаг меняется в основном потоке, меняется в побочных потоках, проходит проверку и побочные потоки уходят в вечный цикл до тех пор пока флаг не изменится, в свою очередь основной поток продолжает работать давай пользователю взаимодействовать с графическими эелментами.
Всё правильно? Или это можно как-то сделать изящней? Или это вообще всё хуйня и работать не будет? Пишу прогу в Qt 5.
> Ставим проверку этого флага через каждый N функций
Я не знаю что там в стандартной библиотеке с потоками (только вкатываюсь в си), но через winapi можно явно заморозить нужные тебе потоки, без вечных циклов в фоне и проверок в непонятном месте твоей поточной функции.
Вот это наверное худшее что ты видел, но вот как-то так. Обрати внимание, что поток замораживается в произвольном месте выполнения и продолжается с него же (ещё вопрос, нужно ли это - если там чтение-запись файлов/сети или ещё чего-то, есть смысл перед постановкой паузы дописать всё и закрыть).
По крайне мере вечный цикл - точно костыль. Просто так без необходимости твой поток десять раз в секунду забирает себе нить выполнения для проверки флага? Серьёзно? Сделай так, что дочерний поток замораживает сам себя, а разбудит его главный. Если апи для resume/suspend в стандартной библиотеке нет (почему-то не смог нагуглить за несколько минут), то сделай через WaitForSingleObject. Второй пик. Поток с вечный циклом проверки флага и Sleep(100) жгёт такты, и требует переключения потоков, а поток с WaitForSingleObject абсолютно мёртвый.
Спасибо, пойду гуглить по той инфомции, что ты дал.

#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
int a,b;
cin >> a >> b;
srand ( time(NULL) );
cout << a+rand()%(b+1)<<" "<< a+rand()%(b+1)<<" "<< a+rand()%(b+1)<<" "<< a+rand()%(b+1)<<" "<< a+rand()%(b+1)<<" ";
}
Что не так?
Ты результат то пробовал вывести?
a=29 b=30
29+rand()%31
Ты получаешь значения от 29 до 59.
Ещё при больших b у тебя это совсем неравномерное распределение будет. Про это конечно не говориться. Попробуй просто выведи 5 раз число а, шутки ради. Теоретически, нельзя лишь по результату строго утверждать что это не случайные числа.
Спасибо, анон! Всё заработало.
Как правильно передать двумерный массив в качестве аргумента функции ?
Заранее домо аригато.
проблема всех вас, что вы просто, блядь, ебаные неучи
у вас нет теории, вы тычетесь как щенки
не разбираешься, тогда пользуйся высокоуровневыми абстракциями, в тех же либах дающих thread pool (это только в качестве примера), есть возможность остановить всех воркеров
а вы, блядь, на голых средствах синхронизации каждый раз переизобретаете ебаные костыли
более того, если ты пользуешься голыми средствами синхронизации, ебаша промышленный код, то нужно сильно сомневаться в твоей квалификации
потому что на фирмах, даже если делают СВОЕ, то сначала реализуют собственные более высокоуровневые абстракции для работы с любой параллельностью
а в большинстве случаев достаточно пользоваться готовыми средствами
потому что, блядь, это сложно
это пишется годами серьезными дядями, а рядовой исполнитель который делает код который продается, хуй это осилит на коленке
проблема lock-free либ в том что НЕТ еще открытых/продающихся вещей которые уже вступили в стадию зрелости
да, на крупных фирмах где-то уже смогли поднять свои решения, которые уже у них работают, но это все внутренние вещи
при этом чтобы это сделать им пришлось пойти на немалые капиталовложения, потому что делать такое чертовски сложно
template<typename T, std::size_t M, std::size_t N>
void array(T (&a)[M][N]) { / code / }
А лучше заверни его в структуру и не еби мозги.
Ничего, она же макака, а не петух.
>хуяк мьютекс туда, хуяк condition_variable сюда
Так и живём. Хотя твой пост натолкнул на идею попрофилировать куски кода в паре проектах, где single producer/single consumer очереди. Хотя там contention мьютексов очень низкий, может и не стоит даже заморачиваться.
Ну, у меня задача была - отсортировать наименьшее число в массиве.
Сделал, правда без темплейта и довольно криво (как ящитаю).
Энивей, если кому- нибудь нужно, то вот. Вдруг пригодится, лул. https://pastebin.com/StWaRC81
Лучше переведи двумерный массив в одномерный
Не поможет если массив выделен не в куче.
Я студент и хочу вкатиться хотя бы в фриланс. Сразу скажу что вроде погромировать как-то минимально умею, наверное не хуже веб макак которые решили вайти вайти, див2 олимпиады там решал, опенгл ковырял, шейдеры простенькие писал, стандарт С++(11) по толстым книгам на 1000 страниц два раза перечитывал целиком.
Полазил по англоязычным сайтам с фрилансом в категории С++ и обнаружил что в заказах до 30$ многим нужно вот что:
Содомирующие кубы на опенгл(причем довольно часто, видимо для курсачей)
Sql
Веб(либо клиент и сервер написать, либо скачать картинку и распарсить на ней что-то, вот такого уровня)
Разные программы с интерфейсом
CUDA
Так вот, собственно в чем мои вопросы:
На чем лучше всего делать интерфейс к программе на крестах(желательно чтобы еще и нормально можно было опенгл контекст создать)? На Qt что ли?
Через что удобнее всего работать с сетью(микроопыт и представление как это работает есть)?
Для sql как я видел есть много библиотек, какую лучше освоить?
Что вообще делать? Не понимаю куда двигаться. В вузе(такой себе, в топ3-5 дс2) математику и всякую там дискретку более-менее нормально преподают, но это само собой надо знать, а вот программирования нормального похоже там так и не будет, и я уж молчу про что-то прикладное типа того что я описал.
У тебя UB в коде.
Тупой, блядь, долбоеб. ХВАТИТ ДРОЧИТЬ НА ФРИЛАНС, КОТОРОГО ВСЕ РАВНО В КРЕСТАХ НЕТУ. Иди в офис, и нормально работай.
Просто по ссылке почему не устраивает?
void GiveMeArray(int array, size_t x, size_t y)
{
for (auto i = 0u; i < x; ++i)
for (auto j = 0u; j < y; ++j)
(array + i + j x) = 0;
}
int main(int /argc/, char /argv[]*/)
{
int array[100][100];
GiveMeArray(&array[0][0],100,100);
>по ссылке
Но это же указатель. А ссылку предлагал анон с темплейтами.
Если не упарываться, по ссылке можно и так:
void foo(int (&arr)[10][10]) {...}
...
int a[10][10];
foo(a);
вообще все, начиная от ОС, заканчивая вебстраничкйй
Не, просто в его коде не отображаются звездочки.
void GiveMeArray(int⁂ array, size_t x, size_t y)
{
for (auto i = 0u; i < x; ++i)
for (auto j = 0u; j < y; ++j)
⁂(array + i + j ⁂ x) = 0;
}
...
int array[100][100];
GiveMeArray( &array[0][0], 100, 100 );
не вижу здесь UB
Почему не "return a;"? У тебя же похоже просто указатель на начало массива возвращается. Код не читал, если что.
> i + j ⁂ x
А это на sizeof(int) домножать не нужно? Там же адресом, а не индексом массива веришь.
a[ i ] == i[ a ]
Доброго дня, аноны. Я не программист, но столкнулся с задачей скомпилить сорцы одной софтины с гитхаба. Как компилить файлы по одному я знаю, но как скомпилировать папку с кучей файлов формата .h и .cpp в один экзешник?
> эксперт мамкин.
Ха-ха. Макакич пыжится.
Ты знаешь, когда можно применять арифметику указателей?

Хочешь сказать, что здесь нельзя её применять?
Напомню, что статические "многомерные" массивы представляются в памяти в виде одномерного массива построчно. (§8.3.4 п. 9 стандарта С++11).
Таким образом приведенный в коде массив имеет размер 100×100=10000 элементов. Легко показать, что выражение (i + j × x), используемое в качестве индекса этого массива, никогда не превышает его размера. А следовательно
(array + i + j × x) удовлетворяет всем требованиям для адресной арифметики и является корректным указателем, а его разыменование не вызывает UB.
Принимая во внимание вышеизложенные факты, я утверждаю, что ты хуй и говно.
>Хочешь сказать, что здесь нельзя её применять?
Да.
> Напомню, что статические "многомерные" массивы представляются в памяти в виде одномерного массива построчно.
Ну и? Пусть себе представляются.
struct { int i; int j; };
тоже может представляться в памяти как int[2]. Это не значит что из указателя на i можно получить указатель на j прибавлением единицы.
> А следовательно
(array + i + j × x) удовлетворяет всем требованиям для адресной арифметики и является корректным указателем, а его разыменование не вызывает UB.
Откуда это "следовательно"? Из предыдущего предложения это не следует. Ну или покажи, что следует.
> Принимая во внимание вышеизложенные факты, я утверждаю, что ты хуй и говно.
А что ещё тупая макака может утверждать?
Может тогда поговорим, в чем здесь проблема, вместо того чтоб хуями друг друга обкладывать?
О чём тут говорить? Очевидный выход за границу массива.
Вот аналогичный код.
В constexpr я не могу писать в массив, так что только чтение.
constexpr int sum(const int^ arr, int x, int y)
{
int sum = 0;
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
sum += ^(arr + i + j × x);
return sum;
}
int main()
{
constexpr int arr[2][3] = { +1, -1, +1, -1, +1, -1, };
constexpr int s = sum(&arr[0][0], 2, 3);
return s;
}
$ g++ prog.cc -Wall -Wextra -std=gnu++2a
prog.cc: In function 'int main()':
prog.cc:14:26: in 'constexpr' expansion of 'sum((& arr[0][0]), 2, 3)'
prog.cc:14:43: error: array subscript value '4' is outside the bounds of array type 'const int [3]'
14 | constexpr int s = sum(&arr[0][0], 2, 3);
| ^
(http://wandbox.org/permlink/OX47NBpU0vb1epjW)
Объясни это.
О чём тут говорить? Очевидный выход за границу массива.
Вот аналогичный код.
В constexpr я не могу писать в массив, так что только чтение.
constexpr int sum(const int^ arr, int x, int y)
{
int sum = 0;
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
sum += ^(arr + i + j × x);
return sum;
}
int main()
{
constexpr int arr[2][3] = { +1, -1, +1, -1, +1, -1, };
constexpr int s = sum(&arr[0][0], 2, 3);
return s;
}
$ g++ prog.cc -Wall -Wextra -std=gnu++2a
prog.cc: In function 'int main()':
prog.cc:14:26: in 'constexpr' expansion of 'sum((& arr[0][0]), 2, 3)'
prog.cc:14:43: error: array subscript value '4' is outside the bounds of array type 'const int [3]'
14 | constexpr int s = sum(&arr[0][0], 2, 3);
| ^
(http://wandbox.org/permlink/OX47NBpU0vb1epjW)
Объясни это.
Это какие-то фичи, связанные с constexpr?
Например без него замечательно выполняется.
int sum(const int^ arr, int x, int y)
{
int sum = 0;
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
sum += ^(arr + i + j × x);
return sum;
}
int main()
{
const int arr[2][3] = { +1, -1, +1, -1, +1, -1, };
int s = sum(&arr[0][0], 2, 3);
return s;
}
g++ prog.cc -Wall -Wextra -std=gnu++2a -pedantic
А, или я мудак и компилятор тупо всё вырезал
>Это какие-то фичи, связанные с constexpr?
Да. Выражение с UB (из Core Language) не является константным. Такой вот способ сделать UB видимым.
Пока не попадает в constexpr-контекст, конечно.
Cmake
Тоже компилятор. Ток там регистры и их состояния. Запись в регистр, чтение с регистра и много ещё манипуляций разных. Чтоб чётко понимать суть нужно знать архитектуру микрухи и ассемблер. Он даёт ясность в том, что от тебя нужно микрухе

Ну давай, и где тут твое UB видно?
Пока больше похоже на то, что constexpr не может в многомерные массивы.
>>69662
Ну не совместимы так не совместимы, вообще не критично, мне это не для денег нужно все равно. Суть-то в том, что в том что я увидел, что там требовались какие-то конкретные практически применимые вещи, которые по идее я должен хотя бы на базовом уровне уметь, откуда и вытекает моя вторая часть вопроса:
> На чем лучше всего делать интерфейс к программе на крестах
> Через что удобнее всего работать с сетью
> Для sql как я видел есть много библиотек, какую лучше освоить?
По крайней мере первые два - это то что мне реально пригодилось бы. Не для какого-то даже фриланса, а просто потому что ну реально же как без этого обойтись можно?Вот захочу я какую-нибудь микрософтину написать именно на с++ просто для себя - и придется гуглить какой-нибудь кал, который еще и окажется неэффективным и неудобным говном мамонта.
Поэтому если не сложно - подскажите, на какие библиотеки(или в случае с интерфейсом наверное одной библиотекой не обойтись, ясное дело нужна целая среда с редактором форм) по вашему мнению мне стоит в первую очередь обратить внимание?
Ncurses
Так в коде на скрине нет UB.
> Пока больше похоже на то, что constexpr не может в многомерные массивы.
Больше похоже на то, что у тебя ICQ < 55.
У меня однажды получилось устроиться, но я проебал свой шанс.
https://en.cppreference.com/w/cpp/language/operator_arithmetic
If any of the operands is a pointer, the following rules apply:
...
In any case, if the pointed-to type is different from the array element type, disregarding cv qualifications, at every level if the elements are themselves pointers, the behavior of pointer arithmetic is undefined. In particular, pointer arithmetic with pointer to base, which is pointing at an element of an array of derived objects is undefined.
>абсолютно эквивалентно двухмерному массиву 2 на 3
Я, конечно, чую, что тут троллинг тупостью, но отвечу
Как видишь, не эквивалентно.
Ты не то процитировал. Вот:
If the pointer P points to the ith element of an array, then the expressions P+n, n+P, and P-n are pointers of the same type that point to the i+nth, i+nth, and i-nth element of the same array, respectively. The result of pointer addition may also be a one-past-the-end pointer (that is, pointer P such that the expression P-1 points to the last element of the array). Any other situations (that is, attempts to generate a pointer that isn't pointing at an element of the same array or one past the end) invoke undefined behavior.

Суть токова. Я уже много лет хуячу сложные штуки на плюсах, но кодинга получается очень мало, в основном проектирование, анализ и т д. И стандартная библиотека у нас почти не используется. Максимум - какой-нибудь вектор. Примитивы типа conditional variable, тредов у нас свои, со своим апи.
И вот задумал я сменить работу. Но понимаю, что везде нужен стл. Стл заботать, просто читая книжку/цппреференс - это убогое занятие. Идеальное знание мне не нужно, нужно просто не обосраться с общеизвестными функциями, применениями и паттернами.
Дак вот, как лучше всего стл-то до нужного мне уровня заботать? Может быть, есть ресурс с набором несложных задач на стл, аля leetcode?
пиксамхаурилейтед - это мой валпапер
Бля и чо что майерс? Я его и книжку, в принципе, прочитал. И лекции смотрел. Все круто и интересно, только в голове сильно не оседает. Надо хотя бы на игрушечных задачах со всем поиграться.
Вопрос в том, где игрушечные задачи взять
Здравия анонам, есть код:
catalan.hpp:
#pragma once
/!\filecatalan.hpp
\authorYour name here
\dateDevelopment date
\briefStudent's Catalan number function implementations.
/
// ToDo:implement the catalan_bionomial() and catalan_product_series() functions.
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
cpp_int catalan_bionomial(cpp_int n)
{
if (n < 2)
return 1;
cpp_int ret = 1;
for (int i = 2; i <= n; i++)
{
ret = ((n + i)/i);
}
return ret;
}
ut_catalan.cpp:
/!\fileut_catalan.cpp
\authorGarth Santor
\date2018.09.09
\briefTest catalan number function implementations.
/
// import student's catalan implementation
#include "../include/catalan.hpp"
// import the boost unit test framework
#define BOOST_TEST_MODULE GradePellFunction
#include <boost/test/auto_unit_test.hpp>
#include <boost/mpl/list.hpp>
// import the boost multiprecision integer library
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
// import standard libraries
#include <cstdint>
#include <vector>
using namespace std;
// Catalan tests
// =======================================================================================================
std::vector<cpp_int> catalanNumbers{ 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, 18367353072152, 69533550916004, 263747951750360, 1002242216651368, 3814986502092304,
};
BOOST_AUTO_TEST_CASE(catalan_test_binomial) {
cpp_int idx = 0;
for (auto cn : catalanNumbers)
BOOST_CHECK(cn == catalan_bionomial(idx++));
}
//BOOST_AUTO_TEST_CASE(catalan_test_product_series) {
//cpp_int idx = 0;
//for (auto cn : catalanNumbers)
// BOOST_CHECK(cn == catalan_product_series(idx++));
//
//BOOST_CHECK(catalan_product_series(cpp_int(100)) == cpp_int("896519947090131496687170070074100632420837521538745909320"));
//}
Но когда пытаюсь запустить:
ОшибкаLNK2019ссылка на неразрешенный внешний символ "int __cdecl cpp_main(int,char * const)" (?cpp_main@@YAHHQEAPEAD@Z) в функции mainut_catalanG:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\ut_catalan\libboost_prg_exec_monitor-vc141-mt-gd-x64-1_68.lib(cpp_main.obj)
ОшибкаLNK1120неразрешенных внешних элементов: 1ut_catalanG:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\x64\Debug\ut_catalan.exe
Здравия анонам, есть код:
catalan.hpp:
#pragma once
/!\filecatalan.hpp
\authorYour name here
\dateDevelopment date
\briefStudent's Catalan number function implementations.
/
// ToDo:implement the catalan_bionomial() and catalan_product_series() functions.
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
cpp_int catalan_bionomial(cpp_int n)
{
if (n < 2)
return 1;
cpp_int ret = 1;
for (int i = 2; i <= n; i++)
{
ret = ((n + i)/i);
}
return ret;
}
ut_catalan.cpp:
/!\fileut_catalan.cpp
\authorGarth Santor
\date2018.09.09
\briefTest catalan number function implementations.
/
// import student's catalan implementation
#include "../include/catalan.hpp"
// import the boost unit test framework
#define BOOST_TEST_MODULE GradePellFunction
#include <boost/test/auto_unit_test.hpp>
#include <boost/mpl/list.hpp>
// import the boost multiprecision integer library
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
// import standard libraries
#include <cstdint>
#include <vector>
using namespace std;
// Catalan tests
// =======================================================================================================
std::vector<cpp_int> catalanNumbers{ 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, 18367353072152, 69533550916004, 263747951750360, 1002242216651368, 3814986502092304,
};
BOOST_AUTO_TEST_CASE(catalan_test_binomial) {
cpp_int idx = 0;
for (auto cn : catalanNumbers)
BOOST_CHECK(cn == catalan_bionomial(idx++));
}
//BOOST_AUTO_TEST_CASE(catalan_test_product_series) {
//cpp_int idx = 0;
//for (auto cn : catalanNumbers)
// BOOST_CHECK(cn == catalan_product_series(idx++));
//
//BOOST_CHECK(catalan_product_series(cpp_int(100)) == cpp_int("896519947090131496687170070074100632420837521538745909320"));
//}
Но когда пытаюсь запустить:
ОшибкаLNK2019ссылка на неразрешенный внешний символ "int __cdecl cpp_main(int,char * const)" (?cpp_main@@YAHHQEAPEAD@Z) в функции mainut_catalanG:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\ut_catalan\libboost_prg_exec_monitor-vc141-mt-gd-x64-1_68.lib(cpp_main.obj)
ОшибкаLNK1120неразрешенных внешних элементов: 1ut_catalanG:\Projects\Programming\Фриланс\Task #214310 Numerical Limits\Numerical Series (Start)\x64\Debug\ut_catalan.exe
Ну буст хуёво установлен/собран. Что тут ещё можно сказать?
>Вопрос в том, где игрушечные задачи взять
у страуструпа в "языке программирования с++, специальное издание" неплохие упражнения
это если надо конкретно по языку и стандартной библиотеке знания закрепить практикой
Стефен Прата c++ primer, много материала и задач к нему
Даются три синглтона. Первый — классический, как Банда завещала. Второй — хитрый-маерсовский из одной статической функции возвращающей свою статическую переменную. И третий — какой-то ленивый синглтон.
Так вот, там пошла Java. Я ее не понимаю, даже не знаю, актуальна ли сама проблема для C++ или там чисто жабские заморочки какие-то. Растолкуйте, что за ленивый синглтон, как его делать на крестах и нужно ли вообще?
Статическая переменная это и есть ленивый синглтон.
В C++11 её инициализация потокобезопасна и это достигается либо double-checked locking-ом, либо ещё оптимальнее (https://stackoverflow.com/a/27206650)

вышка удаленна в гути хоть как то котируется? перевелся из шараги средней на 3ий курс, потом институт закрыли и перекатился на 4год из 5 в сибгути , на удаленку решил вместо вечерней
щас думаю нахуй бросать или все таки 1.5 года доучиться, пригодится ли такой дисплом как исключительно формальный для выкатывания нннахуй из рашки? какие подводные, анон подскажи плс
Для выкатывания из рашки нужен любой профильный диплом из аккредитованного вуза, доучивайся.

профиль программирование, надеюсь пока учусь не снимут аккредитацию и с него(с предыдущего сняли) , кек
тебе в жс
По IEEE 754
#ifndef SLOVO
#define SLOVO
...
#endif
А то вижу ее постоянно, а при гугле этой комбинации нихуя не даёт
Чтобы однажды выполнялся код, а так же дабы не было многократного использования include файлов, вроде так.
Бывает так, что перекрёстно используются заголовочные файлы, насколько помню так нельзя.
То есть ты подключаешь два заголовочных файла и в каждом из них уже есть один и тот же такой файл и дабы этого избежать используют это, а так же продумывают иерархию файлов всей программы.
Да это я понял, оно в главе описывалось. Просто что этот код делает. Типо если код уже ранее подключён, то его заменяет SLOVO и всё?
Нет. Перед тем, как включить код, определяется константа SLOVO. И если эта константа уже определена ранее, то код из файла не включается. Этакий аналог if.
Потому что не бывает float равным 0,525 , а ближайшее к нему - 0,524999976158142
Нет, это хорошо известная идиома, которая блокирует повторное включение кода. Например как уже написали так делается защита инклюдов, иначе будет сыпать ошибки e1488:zalupa already defined in zalupa.h(228). Можно её сломать в принципе, если вручную задефайнить, иди раздефайнить протектор.
Возможно лучше было бы использовать #pragma once, но это не стандарт, и свои проблемы имеет.
Как мне перегрузить оператор ВНУТРИ класса ? То есть, я хочу, чтобы функция внутри класса была с перегруженным оператором. Заранее аригато.
Говорят Бьярн за ауто пояснил по хардкору
Берешь и перегружаешь
https://en.wikipedia.org/wiki/Operators_in_C_and_C++
https://en.cppreference.com/w/cpp/language/operators
Всё, кроме user-defined literals перегружается как member function, большую часть можно перегрузить как non-member
Или разверни свой вопрос.
К примеру
Class hooj
{
public:
int num;
hooj pidor;
}
Class bomj
{
hooj numb;
bomj(int n) { numb->num = n; } //как здесь сделать так, чтобы не обосраться ? Ведь мы ссылаемся на несуществующий кусок памяти.
foo(int i)
{
numb->num = i; //как это сделать блядб, ведь мы пытаемся присвоить типу hooj инт ?
}
}
Дак ты позаботься чтобы у bomj был hooj
Например
bomj(int n) {
numb = new hooj();
numb->num = n;
}
Только дальше ты всё равно обосрёшься при управлении памятью. Читай про конструкторы копирования/перемещения, деструкторы и смарт поинтеры. А перегрузка операторов тут ни при чём.

Нужно написать простой калькулятор (обычная лабораторка).
Суть в том, что умножать/делить/степенить(!) и прочее нужно производить не кнопочками, а символами, которые вводит пользователь.
Сами вопросы:
1. Как правильно реализовать "сканировние" и вычисление вводимой строки
2. Как расставить приоритеты сначала умножение, потом сложение и подобное
3. Реализовать скобочки.
Спасибо.
Перемудрил ты что-то. Достаточно одного прохода с двумя ифами на проверку меньше минимума и больше максимума. В теле ифа присваиваешь новый мин/макс и тут же обновляешь рядок с колонкой, а не в следующем обходе.
Так мне нужно чтобы оно взяло только одно значение максимума. Я думал по логике: если число равно максимуму - скип, иначе если больше максимума - новый максимум, если меньше минимума - новый минимум.
Всё, я разобрался. Просто присвоил в цикл проверки еще и значение, чтобы клетка равнялась нулю, и инициилизировал ее нулём до выполнения.
vector<int> name = {5, 2, 4 ,1};
for(int i : name) { cout << i << " ";}
В чём суть это записи?
Почленный цикл, берёт и работает.
Фабричный метод
цикл for(int i : name) {...} раскрывается в цикл
for(vector<int>::iterator it = name.begin(); it != name.end(); ++it)
{
int i = ^it;
...
}
^ -- это звездочка. Кури итераторы, в общем.
Вот поэтому.
https://en.cppreference.com/w/cpp/language/range-for
Но не во всех случаях удобно пользоваться ею, omp не параллелит такой цикл
Шоб потом мамкины хацкеры могли выебать твою программу во все щели, а конкретнее там где ты используешь небезопасные функции типа gets и scanf, а конкретнее методом анального переполнения буфера, чтением и перезаписью в/из памяти там, где ты напишешь printf(...) c форматированием и забудешь указать типы данных, и прочим распылением в кучу.
К сожалению, это требование на work permit вообще везде.
спасибо
Все советы годные, кроме работы в Яндексе. Автор, ты как будто обосрался с подливой в конце, ну как так то
есть большая разница между "на старте карьеры" и "просто попасть". Опытному разработчику там нехуй делать, а вот новичку посмотреть на большие проекты, процессы разработки и прочее - максимально полезно. Да и в резюме строчка почетная.
https://pastebin.com/6GUtDp1E
Бро, прости, но компилятор прав.
Ты пытался написать стек, но сделал это настолько через задницу, что мне не понять твою задумку (то есть твоя реализация очень далека от того как это делается). Ты бы хоть комментарии оставлял, если хочешь чтобы тебе помогали разобраться.
Попробуй нарисовать схему устройства/работы твоего стека.
Да не, тут суть не в стеке, мне хочется понять, как удалить динамический массив и всю память из хипа.
Та же Нвидия
А где у тебя там "динамический массив"?
>мне хочется понять, как удалить динамический массив и всю память из хипа.
Ты его сначала создай. У тебя же нет динамического массива.
>Stack() :arr(0) { top = new Elem; top->num = new int; };
new без [ ] - это не массив, а одиночный элемент.
>void push(int n){
>top->num[arr++] = n;
И попиздели гулять по памяти хуй знает куда
Слушай этого анона >>73061
https://spb.hh.ru/vacancy/27996564
SomeData get_static_data()
{
struct calculator
{
static SomeData calculate()
{
for (int i = 0; i < dohuya; ++i);
return "Calculated result";
}
};
static SomeData result;
return result.empty() ? result = calculator::calculate() : result;
}
Ну, суть вы поняли. Данные могут вычислиться только в рантайме, вычисляются 1 раз, требуются много раз.
Цикл имитирует сложную работу по вычислению.
Функцию напиши.
В том то и дело, что там не массив. Но на ту хуйню я уже забил. Думаю как обычно, внезапно прийдет озарение позже. Подскажите лучше почему не вызывается перегруженная функция.
На первом скрине заголовок класса, на втором реализация. А вызывается какого-то хуя обычная функция cout. Не знаю как скинуть код в трёх файлах
>Подскажите лучше почему не вызывается перегруженная функция.
Потому, что для...
>complex1 c;
>cin>>c;
>cout<<c;
...прототипом будет...
>istream& operator>>(istream& is, complex1 clx);
>ostream& operator<<(ostream& os, complex1 clx);
Ебать я долбаеб, аж стыдно стало, спасибо
Кури ленивый синглтон. Как сделать не скажу, так как сам не применял.
Я хотел найти библиотеку, чтобы программно создавать доки, и надеялся что ее будет просто найти - это же все-таки DOC, охуеть какой популярный формат. Но ничего не нашёл. Рили ничего.
Может кто знает способ, который хотя бы позволит редактировать готовые доки, на уровне найти/изменить строку. Все решения что я смог нагуглить требуют установленного ворда, а такие решения не очень подходят.
Уже связался, не по своей воле. Но не ожидал что все так плохо будет.
По сути мне просто нужно генерить доки по одному шаблону, форматирование там одинаковое, только количество текста разное в паре абзацев. С нуля я так понял мне не получится такие генерить, но хотя бы брать готовый док и текст изменять в нём. Я верю что есть способ.
Если word установлен, то можешь заюзать его COM интерфейс. Но всё равно придётся хорошенько поебаться.
Подобные вещи хорошо делаются на дотнете. Я ради подобных ништяков немного C++\CLI освоил, который дергаю из крестового кода
Код http://cpp.sh/33c4e релейтед
Мимо из си треда.
В случае с вектором очевидно: выделенная память заполняется значениями по умолчанию, то есть нулями.
Второй же тест медленнее третьего не из-за умного указателя ну, не только, а потому что calloc быстрее new. Вероятно, потому что new может вызвать исключение. Так что если вызывать noexcept-версию new честно, не ебу как, то может стать быстрее.
А может и нет.
Кстати, make_unique<uint8_t[]> тоже инициализирует объекты и работает ещё хуже вектора.
>Код http://cpp.sh/33c4e релейтед
Да нихуя не релейтед. Только конченный дебил поведётся на это.
Компилятор просто выкинул calloc/free. Отключи оптимизации и calloc сравняется с unique_ptr.
>Код http://cpp.sh/33c4e релейтед
https://wandbox.org/permlink/AiNRFjjGe1ORAn0g вот.
2 фемтопикосекунды на создание вектора.
Шах и мат, си-дауны.
>Код http://cpp.sh/33c4e релейтед
https://wandbox.org/permlink/gHwU2iOcxoebK5wJ вот.
calloc/free — медленнее, чем вектор.

class SpawnSystem : public ex::System<SpawnSystem> {
https://github.com/alecthomas/entityx/blob/master/examples/example.cc
У страуструпа в его The C++ Programming Language есть готовая реализация.
Подскажите пожалуйста что можно почитать по поводу манипуляций с аутпутом в терминал. Есть код с пикрил 1 - он печатает содержимое двух std::map, результат на пикрил 2.
Я бы хотел узнать как сделать так, чтобы цифры были четко друг под другом, двоеточие под двоеточием и так далее, ну и длина строк со знаками "+" подбиралась под длину строки автоматически.
Ты долбоёб? ты долбоёб. не благодари. Блять бесят такие надменные уебаны. А модуль то как взять? Помогите нафане ёбаный стос.
Да пожалуйста, я не злой, помогу, вот код:
1 ^ ИП0 ИП1 + sin x^2 + 1 ИП0 x^2 ИП1 x^2 x + 2 ИП0 x / 1/x ИП0 - /x/ |x| 2 + / ИП0 + С/П
https://pastebin.com/Zu3Rtq8H
2 раза пересоздавал проект, выскакивает ошибка:
Semantic Issue
40:9: error: no matching function for call to 'CreateProcessW'
processthreadsapi.h:117:23: note: expanded from macro 'CreateProcess'
_mingw_unicode.h:12:32: note: expanded from macro '__MINGW_NAME_AW'
:2:1: note: expanded from here
processthreadsapi.h:116:29: note: candidate function not viable: 9th argument ('const _STARTUPINFOW *') would lose const qualifier
на CreateProcess
что это???
Друг, если ты не можешь догадаться, как взять модуль - я настоятельно рекомендую тебе даже не пытаться учиться программировать.
Бля, нахуй вы православное расслоенное произведение называете pullback, вроде не смузихлёбы же коворкинговые, дядьки-крестовики, а туда же.
1. Подглядываешь какой у тебя следующий символ с помощью cin.peek(), считываешь даблы оператором >>, а символы cin.get().
2. Получаешь число. Далее в цикле пока !cin.eof() складываешь\вычитаешь последующие числа. Возвращаешь результат если ничего не осталось или встретил неизвестный символ. Это функция add_sub(). Пишешь аналогичную функцию div_mul, которая умножает\делит и возвращает результат если встречает неизвестный символ. В функции add_sub заменяешь все получения следующих чисел на вызов div_mul. PROFIT!!1
3. Рекурсия.
Скажи лучше, чем оправдано их существование, почему нельзя было сделать все методы виртуальными по-умолчанию? Неужели все дело в крошечном оверхеде при вызове?
https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/d3xp/menus/MenuHandler_Shell.cpp#L385
нет, но зачем так делать - строжайше не понимаю
Блять ты ебанулся такие вопросы в пятницу вечером зодовать?
if (rand() % 10 ) < 3 ?
'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback', размер шрифта 12
БГУИРовская методичка?
>char hobby;
Как его блять вывести на экран? Сейчас пытался простенький класс написать, и понял что не знаю как это сделать, ибо программа просто не работает если выводить hobby или hobby
Между char и hobby звёздочка, не отобразилось почему-то
Попробуй вот так:
const char *hobby;
hobby = "sosat pisu";
std::cout<<"My hobby is:"<< hobby << std::endl;
Почему ты константный указатель инициилизировал после обьявления, и это не работает, писал в первом посте. Сейчас код прикреплю cpp.sh/9n3oy
Заметь, если оставить только вторую корову а первую и третью закомментить - он печатает как надо, т.е проблема где то в инициализации по умолчанию
Все норм. Это не константный указатель, это указатель на константные данные.
Я скорее всего из-за недостатка опыта не вижу какой-то очевиднешней хуйни. Хобби оно кстати присваивает по всей видимости, ибо если заменить вывод на вывод адреса то оно будет давать разные адреса, как и нужно. Если указатель никуда не указывает, его же нужно нулевым инициализировать, верно?
>Хобби оно кстати присваивает по всей видимости, ибо если заменить вывод на вывод адреса то оно будет давать разные адреса, как и нужно. Если указатель никуда не указывает, его же нужно нулевым инициализировать, верно?
>
Я сам не особо опытный если быть честными, но твоя программа падает на методе ShowCow, и насколько я понимаю это из за того что ты пытаешься принтануть нулл поинтер, что если заменить в конструкторе по умолчанию hobby = NULL; на hobby = new char; ?

Теперь всё работает, но в первом обьекте выдаёт хуйню вместо значений. Почему с NULL не работает? В книге написано либо с ним делать, либо с nullptr.

> обьекте выдаёт хуйню вместо значений. Почему с NULL не работает? В книге написано либо с ним делать, либо с nullptr.
Я книг не читал к моему сожалению, но мне кажется нуллом можно инициализировать если ты не планируешь в дальнейшем где то использовать это значение по умолчанию, или если планируешь но ты чем то нормальным его перед этим перезапишешь.
Пикрил - результат работы программы. у меня убунту - никаких артефактов не вижу в консоли
Видимо опять студия шалит. Ладно, тут важнее было понять как это работает, спасибо за помощь всем отписавшимся. Если когда-то стану нормальным программистом тоже помогать буду
Ну главное мы поняли что тут не в принте дело а в дефолтном конструкторе, я один здесь кстати :)
Ну тогда тебе спасибо. Может позже шарящие аноны подтянутся, исправят его нормально, чтобы на всех платформах работал
>Аноны памагите. Есть указатель на символьный массив
>>char hobby;
>Как его блять вывести на экран? Сейчас пытался простенький класс написать, и понял что не знаю как это сделать, ибо программа просто не работает если выводить hobby или hobby
>>75476
>Заметь, если оставить только вторую корову а первую и третью закомментить - он печатает как надо, т.е проблема где то в инициализации по умолчанию
>Cow first;
>Cow second("Seryochka","Doing things",50.5);
>Cow third;
У тебя небольшой проеб в конструкторе по-умолчанию. Пытаешься вывести данные, обращаясь по нулевому указателю. Так не делают.
Можно сделать конструктор по-умолчанию таким:
>Cow::Cow(const char nm="empty",const char ho="empty",double wt=0.0)
... при этом не забудь закомменить в заголовочном файле объявление Cow::Cow() и в самом .cpp его определение.
>но мне кажется нуллом можно инициализировать если ты не планируешь в дальнейшем где то использовать это значение по умолчанию, или если планируешь но ты чем то нормальным его перед этим перезапишешь.
AND WE HAVE A WINNER!!!
1275497-анон
>>75497
Спасибо, понял насчёт нулевого указателя. Алсо, где можно посмотреть на прототипы функций который обьявлены в библиотеках? Внутри какая-то странная дичь, а самих функций я не нашёл. Просто недавно узнал что с помощью strcpy() можно копировать со сдвигом, а если бы не пример я бы об этом никогда и не узнал.
Ошибся, не прототипы а сами принципы их действия. Хочу посмотреть как strcat реализован, ибо когда пытаюсь сам конкатенацию строк сделать какие-то ошибки вылетают
Насколько я понял ты пишешь в студии, попробуй по функции кликнуть правой кнопкой и там будет - перейти к дефинишну, декларейшну и тд

Ну вот напимер для сиаутов и сиинов. Это и есть определение? Я ожидал увидеть что-то типо ostream & ostream(...) {};
>Просто недавно узнал что с помощью strcpy() можно копировать со сдвигом, а если бы не пример я бы об этом никогда и не узнал.
Ссылку в студию.
>>75506
>Хочу посмотреть как strcat реализован
Обычно такой хуйней никто не занимается. А тупо использую библиотечные функции. Ибо кому интересно заново в 100500 раз изобретать велосипед...
>>75529
>Нихуя, тут кто-то до сих пор в 98й студии графоманит.
Так а хуле нет? Легкая, быстрая IDE. Ничего лишнего. Для новичка - самое то. Правда пришлось под это дело WinXP на виртуалку ставить, но все равно. Потом, когда садишься на MSVS 2017, охуеваешь от одной только возможности ебашить код сразу в 2 файла в одном окне.
Пример уже не найду, сейчас по памяти напишу:
strcpy(result,st.str);
strcpy(result+st.str,st1.str);
https://ru.stackoverflow.com/questions/185114/Перегрузка-оператора-конкатенация
Мне просто все говорят что нужно именно понять как оно работает, а не просто брать и использовать. В ВУЗе даже запрещают использовать библиотеку string, либо сначала продемонстрировать самостоятельную реализацию, а потом уже заменять на нормальный код.
Сишные функции уже скомпилированые лежат в виде объектых файлов.
Вот тебе пример strcpy, лол https://ideone.com/cCUn0j
Бля. А если я захочу понять как работает та же strcat то мне на свой опыт прийдется опираться? Или всем похуй и ими пользуются так же как и каким-то cout, не задумываясь об использовании? Внезапно понял что это принципы ООП
Тебе сначала нужно понять, что из себя представляет строка и научится работать с указателями. Интуитивное понимание всех этих строковых функций появится после. Но если тебе нужин быстрый фикс, то вот https://linux.die.net/man/3/strcat
>всем похуй и ими пользуются так же как и каким-то cout, не задумываясь об использовании
This
Добра
Я смотрю там у него ещё есть комментарии // TODO, { стоят без переноса. Чувак прямо из прошлого стримит.
Я смог попасть в будущее.
Воксельные игрушки есть на compute shader'ах написанные. Его поделка сама по себе любопытная, но на данный момент уже сильно пахнет мамонтами.
Кстати странно, что он git вместо православной cvs использует как вспомню про неё, аж трисёт пздц.
>Тут выше писали что современный С++ делает всё, чтобы люди не ебались с этими указателями
Не ебаться с ними это одно, не знать как они работают это другое. С++ дизайнился как язык с абстракциями, но при этом производительный как С. А производительность эта получается как-раз за счет низкоуровневой ебли с разными вещами, включая указатели.
Я бы на твоем месте задумался, а нужен ли мне С++. Моим первым языком были кресты, и, после того как я попробовал другие языки, я жалею о том, что не сдеал этого раньше. Я не хочу сказать, что С++ плох, просто так оказалось, что задачи которые я решал, луше подходили для других языков и я переплачивал своим временем за ненужную мне производительность.
Ну понятное дело что я не забью на них. Без них я так понимаю никак, те же указатели на кучу делать как-то нужно.
10 литров чаю этому адеквату
Хотелось бы добавить что, чтобы ебаться с низкоуровневыми вещами не просто так, а реально увеличивая производительность программы, нужно обладать специфическими байтоёбскими скилами. И вообще редко у кого получаеться эффективно ебаться с байтами и делать высокоуровневые абстракции, зачастую просто не хватает времени. Именно по этой причине программирование медленно но верно разделяется на сишное байтоёбство и выскокуровневые абстракции, как в своё время от ассемблера отпочковался C.
Мне вот наоборот байты поебывать и ковыряться в профайлере как-то проще, чем выдумывать всякие там абстракции. Я прям кончаю, когда программа начинает работать быстрее. А вот как-то структурировать код я не умею, от того и страдаю.
Такая же хуйня, брат.
Очень редко (но иногда очень важно), чтобы память бралась не из кучи, а из чего-нибудь другого. Например, чтобы сделать всякого рода кеши. Или, например, Fixed-Size аллокаторы, которые работают именно так, как тебе надо, причём со скоростью света. Но это в принципе нужно только для эмбедщины и риалтаймщины. И хрен знает, как именно это сделано в плюсах, такие вещи я руками всегда писал. STL слишком непредсказуем.
Спасибо,анон!
Добавлю к анону >>76603
Работал над двумя разными проектами в разных местах и даже разных странах, ололо, где с самого начала выделялось несколько больших кусков памяти, и далее во всем проекте было ровно 0 аллокаций памяти. Писался собственный аллокатор, и весь STL в проекте был на нём завязан.
>Нихуя, тут кто-то до сих пор в 98й студии графоманит.
Бывают чудаки, которые vim или emacs пользуются.
>Зачем тогда отпочковывался ассемблер если был фортран?
Потому что:
1) Существуют не отображенные в языке сущности, с которыми можно оперировать только в ассемблере. Как пример - части кода операционной системы, отвечающие за запуск защищенного 32 (или длинного защищенного 64) битного режима, переключение задач - всё это задействует не отображенные в память сущности (специальные регистры).
2) Существуют платформы с малым объемом памяти программ и данных - например микроконтроллеры начальных линеек и иногда проще заплатить один раз зарплату/по договор-подряду за еблю байтов, чем увеличивать стоимость всей продукции на цену дорогого МК что на крупных партиях дает нехуёвые такие суммы.
3) SIMD-инструкции, даже сегодня заставить компилятор и увидеть в нетривиальном коде и использовать сложно. Впрочем, задача решается интринсиками и тут ассемблер, на самом деле, пролетает.
Ну и да, уже из предпоследней вижуалстудии ассемблер выкинули.
Что какбе намекает нам о его реальной необходимости во втором десятилетии 21 века.
Когда и как его лучше использовать?
Интересует передача в функцию, возврат из функции.
Замена для const string&, но только не тратятся ресурсы, если ты передаешь туда char*
Какие вот у него перспективы? Я чет смотрю вакансии на хх и там какая-то хуйня. Требования обычные, но что они блять пишут вообще на голых крестах? Калькуляторы на винапи или что блять? Я вот не могу представить.
Есть вообще смысл задротить плюсы, если ты не занимаешься наукоемкими штуками? Не выйдет так, что ты будешь через n лет сосать хуй в какой-нибудь отечественной компании за 50к в ДС?
А ты быстро смекнул что к чему. У многих на это уходят годы.
Игоры
А по делу, бекенд например который работает со стримом видео. Кроссплатформенные либы, под разные архитектуры. Но пока ты достигнешь такого уровня у тебя волосня на яицах поседеет.
>Что вообще делают на плюсах?
Поддержвают легаси десктопный софт (CADы, фотошопы, видеошопы, аудиошопы и плагины к ним), пишут системное ПО (в первую очередь эмбед), высокопроизводительные приложения с низкой латенси (например софт для стриминга видео, для крипты и т. п.).
>Какие вот у него перспективы?
Хуевые, так как конкурировать нужно будет с мужиками двадцатилетним опытом. Эти же мужики давят зарплаты вниз - их очень дохуя.
Учи CUDA, там процент шарящих мужиков с личинками и ипотекой значительно ниже.
>Есть вообще смысл задротить плюсы, если ты не занимаешься наукоемкими штуками?
Математик, знающий кресты, и рождающий более-менее приемлемый код (типа меня), обезьяна настолько редкая, что на фирмах, как правило, один дядька пишет алгоритмы на скриптовом языке, а второй уже переписывает их на C++ (особенно в случае CUDA). Поэтому имеет смысл. У меня коллега (который как раз 35+) сначала писал обвязки для моего говнокода, теперь уже сам вкатился в научную часть и пилит что-то.
>Не выйдет так, что ты будешь через n лет сосать хуй в какой-нибудь отечественной компании за 50к в ДС?
Как раз с крестами зарубежную удаленку найти просто, поэтому вопрос сосать хуи в отечественной компании или нет не стоит, после пары лет опыта надо уже подыскивать западную удаленку.
>Учи CUDA
Что там учить? Там вопрос не скилла, а просто времени. И приложений твоей куды особо нет. Ну кроме как диффуры решать в нии, чем ты и занимаешься похоже.
Там ответ на вопрос, почему нужно учить CUDA.
На самом деле для молодежи сейчас есть ровно два стула, либо учить CUDA, либо не учить кресты вообще. Все остальное дно и прозябание в безуспешных попытках конкуренции с сорокалетними дядьками.
Да ты заебал. Где твоя куда используется вообще? На хх 20 вакансий с кудой на весь ДС, из них 15 с машин лернингом. Че ты за дичь втираешь? Ни у кого блять нету кластеров с нвидиа, кроме каких-нибудь универов, а если какой-то софт на gpu, то там opencl юзают по понятным причинам.
Там выше про сорокалетних мужиков уже антон отписался. А получилось это потому,что за последние лет этак десять с++ стабильно выдавливался из привычных ниш другими языками. Это вызвало жёсткую конкуренцию и навес предложения над спросом. Так что лучше выбрать другой язык для вкатывания, а c++ иметь прозапас (либо пару-тройку лет работать в говНИИ/касперском/яндексе за жрат, а потом уёбывать на галеру/удалёнку или за бугор).
>Где твоя куда используется вообще?
Текущее десятилетие это миграция высокопроизводительного софта на видюхи. CUDA, OpenCL - не так важно, но у нвидии намного лучше тулчейн, а отлаженный CUDA-код переносится на OpenCL чисто механически. Софт, как правило, юзает, и то, и то, потому что на карточках nvidia opencl работает медленно, а особых проблем поддерживать два API нет, если, конечно, у тебя не софт уровня OpenCV.
>На хх 20 вакансий с кудой на весь ДС, из них 15 с машин лернингом.
И что? Со словом джава вакансий в два раза больше, чем со словом с++, однако почему-то ты в крестотреде. Если для тебя критерий - количество вакансий, что ты тут вообще забыл. Это рынок, можно работать на широком рынке взаимозаменяемых обезьянок, а можно быть эксклюзивным спецом, и искать новую работу на месяц дольше, но зато с зарплатой повыше автоматом. Тебе нужна одна вакансия, на которую тебя возьмут. Остальные это просто информационный шум.
А теперь пройдись по этой тысяче вакансий с++ на хх и выкинь оттуда поддержку легаси говна, ебанутых людей ("Проект - десктопный клиент лично-командного мессенджера." - на С++ в 2018 году), вакансии, где с++ упоминается в списке из 20 языков и прочий кал. Останется, может, сотня чего-то годного. Из них 10 будут теми, где знание видюх жирный плюс. И это дохуя.
>а можно быть эксклюзивным спецом, и искать новую работу на месяц дольше
Ну тут такое... Можно и за год не дождаться.
>Текущее десятилетие это миграция высокопроизводительного софта на видюхи
Угу, в формате "Бля, как к этому кораблю приделать крылья и колёса, чтобы он при этом ездил как болид Top Fuel и летал аки МиГ-31".
Нормально перекладывается по-сути только развертка цикла/map по большому количеству несвязанных объектов и то, только на простых алгоритмах в несколько строк. Тупо потому, что на сложных начинается ебань с плясками и архитектурой, заточенной под рендеринг потреблядской игроёбы с кинцом и прочих дрейкфейсов для даунов. Тут тебе и кеш размером как на Pentium 2 в его бюджетнейших модификациях, и выполнение обоих веток кода на ветвлениях (а если у тебя какой-нибудь паттерн-матчинг то вообще отсос фрактала).
По итогу вся CUDA сводится к "переписать сложный алгоритм в лапшу из кучи проходов простых и то, если у тебя много данных".
Как боженька расписал. Но с точки зрения наличия работы вся эта ебанина это очень хорошо.
Да. Плохо и неинтересно. Не заходи сюда.
А если у меня small string optimization срабатывает?

Как корректно записать тип r без auto или decltype? (Если попробовать его привести к другому типу, он обзывается как в комментарии, и такой тип даже не компилируется.
И как вообще этот объект называется, лол? По запросу "указатель на метод класса" в первых 4 пунктах что-то другое.
Вообще, там несколько десятков методов одинакового типа вроде l_3, их все нужно вызвать и ещё перед/после каждого выполнять одни и те же действия. Код для пяти штук раздулся уже на две страницы и для краткости хотелось бы или записать это в цикле (или просто передавать методы в другой метод с обёрткой).
Всё просто и понятно, как это обычно бывает с указателями на функции.
RetT (intg<T>::⁎ r)(int) = &intg<T>::l_3;
https://en.cppreference.com/w/cpp/language/pointer#Pointers_to_member_functions
>И как вообще этот объект называется, лол? По запросу "указатель на метод класса" в первых 4 пунктах что-то другое.
Указатель на метод отличается от указателя на функцию тем, что у метода первым параметром должен идти указатель this. Поэтому он и cannot convert.
А если это static метод?

Благодарю, разобрался. Заработало _zn<T> (intg<T>::* r)(int)=temp.l_3; (&temp.l_3 и &intg<T>::l_3 тоже работают)
Запутался с этим RetT - в текстовом классе (возвращающем нешаблонный тип) всё работало, что сильно меня смущало.
А ещё вопрос. Там внутри intg прописано using zn=_zn<T>. Возможно ли заменить явное указание вспомогательной структуры _zn<T> на что-то менее громоздкое, чем typename intg<T>::zn? Почему просто temp::zn не работает? Синтаксически довольно ясно что это означает, вроде бы.
>>77486
>cannot convert
Это ошибка осталась, когда я написал int i = r, просто чтобы среда разработки показала свои соображения по поводу типа r. Код то нормально компилируется.
В студии кодишь? В gcc работает только &intg<T>::l_3
Здесь нельзя обойтись без typename, т.к. это какая-то залупа, связанная с name lookup
https://en.cppreference.com/w/cpp/language/dependent_name
Можно задефайнить тип метода как-то так:
template<class T>
using IntgFun = typename intg<T>::zn (intg<T>::*)(int);
...
IntgFun<double> r = &intg<double>::l_3;

Нет, qtcreator+mingw64. Вот тут работает любое из a.f/&a.f/&A::f - даже предупреждений нет. Меня тоже удивило, по сравнению с требованием ко всяким typename это очень неожиданно.
Как проектируют системы? Не имею ввиду какие-то мегапрограммы типа игр, браузеров и тд. А, допустим, какие-то их небольшие элементы/части.
Например, система событий. Можно написать на switch/case что-то, можно с наследованием или какую йобу на шаблонах.
Как учиться таким штукам? Читать код, конечно, можно и нужно, но и авторы ведь тоже откуда-то эти мысли брали.
>Как проектируют системы?
В основном в меру своей компетенции, возможностей языка, своей эрудиции, любознательности и путём проб и ошибок. Удачные решения объявляют бест практисами и пишут про них в книгах.
Но до того как они становятся удачными решениями пишется куча прототипов/рабочих задач в том числе и кривых.
А так, "теорию решения изобретательских задач" почитай, там примерно требуемые приёмы работы головой в подобных задачах описываются.
>но и авторы ведь тоже откуда-то эти мысли брали.
Методом тыка скорее всего, ну или методом мысленного тыка, если опыта сильно дохуя. Читай код, а лучше всего используй его, нахуя сейчас, например, писать систему событий.
Говно уровня гербалайфа.
Добрый вечер дороги антуаны. Нужна ваша помощь.
https://pastebin.com/uE5sNGXj
Код для полиза. Не могу разобраться в строчках:
16)Stack() : head(0) {}
67)return head == 0 ? true : false;
Искал в интернете, 67 строчка связана с тернарным оператором. Я правильно понял, что если head == 0, то вернется true, если нет, то false?
Про 16-ю строчку вообще ничего не понял, нарыл только что-то связанное с конструкторами класса, но на сколько я понимаю, это не тот случай. По этому прошу помочь разобраться.
> Я правильно понял, что если head == 0, то вернется true, если нет, то false?
Йеп
> нарыл только что-то связанное с конструкторами класса, но на сколько я понимаю, это не тот случай. По этому прошу помочь разобраться.
Конструктор который ничего не принимает и инициализирует head в ноль
https://en.cppreference.com/w/cpp/language/initializer_list
Если это действительно, что-то связанное с классами, то есть ли другое объяснение этому двоеточию. Классы мы только начали проходить, а это долг полугодовой давности, т.е тогда мы знать не знали про классы. И возможно препода не устроит такой ответ.
Спасибо за помощь!

Подобное юзал в юнити как синглтон для написания гейменеджеров, после переката на анрил возникла такая проблема.

Спасибки, разобрался уже, до этого чёт не мог нагуглить. facepalm
В си работает, в с++ только если указывать несколько последовательно объявленных в структуре полей, из-за чего весь смысл указания имён полей теряется.
>>77558
Для краткости, это же пример. Да там и вся программа просто поделка на один день, просто попробовать сделать одну штуку.
в c++ именованные аргументы в функциях/конструкторах заменяются правильным использованием системы типов
Я слышал, что какие-то проблемы с грамматикой были раньше (хотя как будто их и не было никогда, грамматика плюсов дохрена перегружена и так). В двадцатых плюсах вроде исправили:
https://en.cppreference.com/w/cpp/language/aggregate_initialization
https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application#Linking_your_application_against_the_shared_library
[code]#include <QtGui>
#if defined TEST
#define TEST_COMMON_DLLSPEC Q_DECL_EXPORT
#else
#define TEST_COMMON_DLLSPEC Q_DECL_IMPORT
#endif
class TEST_COMMON_DLLSPEC Widget : public QWidget {
......[/code]
Что это за залупа такая? Реально эти макароны писать надо? Что-то я не припомню, как я раньше хоть раз такое видел.
Ну кстати эти мужики с 20+ опытом потеряли мотивацию и кое как пашут за 100-120 и не особо толку много приносят.
Возня с dllimport/dllexport для экспорта символов на венде есть всегда и везде.
Но на самом деле пока все нравится. PS ебал визуал студио с его стандартами
Нет.
Визуал студио автоматически код оптимизирует. Лучше гугли как настроить компилятор грамотно.
Наоборот. То ты на стеке выделяешь простым сложением или вычитанием, а тут в куче. Прочитай кернигана и ричи
Используй встроенный в VS отладчик.
Я читал, но не нашел об этом инфы.
Плюсы - это голый язык, файлы да терминал. Чтобы использовать хоть что-то ещё, надо либо использовать вызовы ОС, либо самостоятельно, либо через фреймворк.
Qt - оконный интерфейс, сеть, интернет-соединения и очень много всего другого. В идеале, если ты не используешь платформенных особенностей и пишешь портабельный C++-код, твою программу можно собрать под любую платформу, которую поддерживает Qt.
Допустим в планах десктоп под шиндоус + много работы с винапи и системой в целом. Стоит накатывать QT? Или есть какие-то другие библиотеки/что-то еще? И как это все гуглить? Пытался найти библиотеку для работы с винапи - соснул хуй, якобы везде всё пишут сами. Спасибо за ответ.
Заканчиваю главу про копирование, присвоение, удаление.
В предыдущих главах были описаны вот такие классы, которые получают текст из файла и возвращают результат поиска. При этом оба класса ссылаются на динамически созданные данные. Плюсом этого вижу то, что класс QueryResult будщет выдавать результат даже после удаления и или изменения класса TextQuery.
class QueryResult {
friend std::ostream& print(std::ostream&, const QueryResult&);
public:
typedef std::vector<std::string>::size_type line_no;
typedef std::set<line_no>::const_iterator line_it;
QueryResult(std::string s,
std::shared_ptr<std::set<line_no>> p,
std::shared_ptr<std::vector<std::string>> f):
sought(s), lines(p), file(f) { }
std::set<line_no>::size_type size() const { return lines->size(); }
line_it begin() const { return lines->cbegin(); }
line_it end() const { return lines->cend(); }
std::shared_ptr<std::vector<std::string>> get_file() { return file; }
private:
std::string sought; // word this query represents
std::shared_ptr<std::set<line_no>> lines; // lines it's on
std::shared_ptr<std::vector<std::string>> file; //input file
};
class TextQuery {
public:
#ifdef TYPE_ALIAS_DECLS
using line_no = std::vector<std::string>::size_type;
#else
typedef std::vector<std::string>::size_type line_no;
#endif
TextQuery(std::ifstream&);
QueryResult query(const std::string&) const;
void display_map(); // debugging aid: print the map
private:
std::shared_ptr<std::vector<std::string>> file; // input file
// maps each word to the set of the lines in which that word appears
std::map<std::string,
std::shared_ptr<std::set<line_no>>> wm;
// canonicalizes text: removes punctuation and makes everything lower case
static std::string cleanup_str(const std::string&);
};
Так вот в конце главы про копирование вопрос:
Должны ли классы TextQuery и QueryResult определять собственные версии функций-членов управления копированием?
Я так вижу что при текущей реализации класса достаточно синтезируемых. При копировании обоих классов у нас увеличиваются счетчики ссылок shared_ptr что исключает удаление данных. Если же один из скопированных экземпляров будет удален, счетчик уменьшится и все довольны.
Заканчиваю главу про копирование, присвоение, удаление.
В предыдущих главах были описаны вот такие классы, которые получают текст из файла и возвращают результат поиска. При этом оба класса ссылаются на динамически созданные данные. Плюсом этого вижу то, что класс QueryResult будщет выдавать результат даже после удаления и или изменения класса TextQuery.
class QueryResult {
friend std::ostream& print(std::ostream&, const QueryResult&);
public:
typedef std::vector<std::string>::size_type line_no;
typedef std::set<line_no>::const_iterator line_it;
QueryResult(std::string s,
std::shared_ptr<std::set<line_no>> p,
std::shared_ptr<std::vector<std::string>> f):
sought(s), lines(p), file(f) { }
std::set<line_no>::size_type size() const { return lines->size(); }
line_it begin() const { return lines->cbegin(); }
line_it end() const { return lines->cend(); }
std::shared_ptr<std::vector<std::string>> get_file() { return file; }
private:
std::string sought; // word this query represents
std::shared_ptr<std::set<line_no>> lines; // lines it's on
std::shared_ptr<std::vector<std::string>> file; //input file
};
class TextQuery {
public:
#ifdef TYPE_ALIAS_DECLS
using line_no = std::vector<std::string>::size_type;
#else
typedef std::vector<std::string>::size_type line_no;
#endif
TextQuery(std::ifstream&);
QueryResult query(const std::string&) const;
void display_map(); // debugging aid: print the map
private:
std::shared_ptr<std::vector<std::string>> file; // input file
// maps each word to the set of the lines in which that word appears
std::map<std::string,
std::shared_ptr<std::set<line_no>>> wm;
// canonicalizes text: removes punctuation and makes everything lower case
static std::string cleanup_str(const std::string&);
};
Так вот в конце главы про копирование вопрос:
Должны ли классы TextQuery и QueryResult определять собственные версии функций-членов управления копированием?
Я так вижу что при текущей реализации класса достаточно синтезируемых. При копировании обоих классов у нас увеличиваются счетчики ссылок shared_ptr что исключает удаление данных. Если же один из скопированных экземпляров будет удален, счетчик уменьшится и все довольны.
Почитай, что такое куча и стек.
Заранее благодарю.
Все говорят что говно + нихуя не упрощает работу. Ахуеть блять, почему за 20 лет никто нормальных библиотек не наклепал? Не верю, что все десктоп-мани на чистом winapi делают. Придется качать QT.
Автор мудак просто конченный.
48 это код символа '0', а 55 это код 'A'-10.
И это если на время забыть тот неудобный факт, что преобразование в 16-ную систему делается одной строчкой sprintf(hexnum, "%X", num);
Математико-тред там >>>>>>>>>>>
И вообще оптимизация функций это очень глубокая нора. Функция-то хоть унимодальная?
Надо посмотреть её код, на основе кода можно сделать этот вывод.
welcome to "Теория оптимизации"
http://bigor.bmstu.ru/?cnt/?doc=MO/MO.cou
Читай гл.4 и ебись как хочешь
Можешь объяснить этот момент подробнее? С нулём я понял, а 'A' - 10 что значит?
Таблицу ASCII я уже нашел, и значения в ней тоже совпадают с теми что ты сказал.
Кидай вижуал студень. Лучше скачай Qt Creator - нормальная такая ide, можно с g++ и линуксом юзать, на винде тоже норм и главное НЕ ТОРМОЗИТ ААА СУКА КАК ЖЕ Я РАД ЧТО ПЕРЕШЕЛ НА НЕГО С ЕБАНОГО ВИЖУАЛ СТУДИО
Obnovite v shapke faily s knigami. Nekotorie na mege uzhe ne rabotaut. Sorry za translit.
Либген тебе в помощь.
Стандартная функция abs(сюда вставить значение).
Не слушай даунов с атлоном ХР вместо компуктера, и работай на нормальных тулзах. Лучше студии ничего не изобрели.
Заранее аригато.
Да твоя ебаная студия прям как твоя тян - сколько бы у тебя ни было ресурсов, ей все мало.
Давай начнём с простого. Какая работа тебе нравится: повар в МакДональдс или курьер?
в голос
g++ это govno++?
Тебе из какой сферы хоть?
Я миддл разработчик, который сейчас находится без работы, и ищет новые предметные области, ибо пятый год подряд трачу жизнь на десктоп парашу (стек Qt/Qml). Меня просто уже заебало.
А, ну так вот в общем ищу в какие смежные области вкатиться. Потихоньку ковыряю вулкан, но не знаю, есть ли резон in the long run.
>Потихоньку ковыряю вулкан
Ну это ты зря. Реальный профит с него могут получить только те, кто прохавал работу с gpu с самого низа (вплоть до драйверов). Лучше ковыряй какой-нибудь UE и посмотри на opengl + glsl, чтобы понять общие принципы работы с графикой.
>>79512
Основной спрос на графику составляет гейдев. Если ты опытный разраб с нормальной ставкой, то вкатываться в него ты скорее всего не станешь. Бесконечный поток студентов сильно режет зарплаты и создаёт на редкость скотские условия труда (дешманский "офис", забитый под завязку, испыталка от полугода, ~70% зп в серую, праздники рабочие, отпуск 2 недели, в "соцпакет" входит только оплачиваемый больничный, отношение к новичкам как к бесправному говну).
> Бесконечный поток студентов сильно режет зарплаты и создаёт на редкость скотские условия труда (дешманский "офис", забитый под завязку, испыталка от полугода, ~70% зп в серую, праздники рабочие, отпуск 2 недели, в "соцпакет" входит только оплачиваемый больничный, отношение к новичкам как к бесправному говну).
Примерно такого ответа ожидал. Я просто работал 4 года в тепличных условиях и конкуренции особо не застал, поэтому мне было интересно услышать опыт тех, кто что-то знает об этих всех скотских условиях и дерьме.
>Если ты опытный разраб с нормальной ставкойx
Да не то что бы, я не особо далеко ушел, на $15 в час ковырял десктопную парашу, все проекты одинаковы и чувствую эмоциональное выгорание. Хочется свежего глотка воздуха да и предметную область с большим потолочком, чем десктоп.
опиши примеры проектов? Сколько человек, что вообще получается на выходе?
Сам уже 7 лет работаю в 1С и меня уже доебала эта область. Я конечно не считаю это нормальным программированием, так еще и работа вся заключается в том что запрос - выборка таблицы ,обработка таблицы, ну и что-то в форме поковырять. И бесконечная ебота с проблемами пользователей, то остатки у них то еще что. Хотя именно этим я почти не занимаюсь.
Думаю перекатиться в с++, который когда то еще со школы изучал. Читаю пока Липпмана. Хочется работать над чем то реальным и на реальном ЯП. Правда как пережить даунгрейд по ЗП не представляю
cin.clear();
cin.sync();
после этого места, чтобы попытаться ввести число заново?
Потому что букву ты не потребил и не пропустил. Надо делать ignore()
https://en.cppreference.com/w/cpp/io/basic_istream/ignore
Короче, в зависимости от того, какой у тебя формат ввода, ты по-разному можешь пропускать. Можно по одному, можно пропустить до следующего пробела и т.д.
Поставь еще планку на 4гб памяти, нищеблядь
Сап, С++ боги.
Препод задал написать бинарное дерево с дубликатами, ну то в котором могут хранится одинаковые ключи, и вот я думаю.
Насколько я помню, есть два варианта добавления уже имеющегося ключа в дерево, либо в тупую вставить его имеющемуся потомку елемента с соответствующим ключём как правого или левого потомка в зависимости от ключа нового элемента блять, надеюсь вы поймете, либо вставить новый елемент как потомок елемента дерева с соответствующим ключем и разорвать старые связи с потомками, а потомкам присвоить новый элемент как родителя. Поправьте пожалуйста если в чем-то не прав.
Так вот, реализовать само дерево могу, вставку двумя описанными выше вариантами тоже, но не могу определиться как будет правильно - left <= root < right или left < root <= right, не так много инфы по этому поводу смог найти. А так же, я хз как оптимизировать вставку, вот допустим, у нас есть дерево:
5(root)
4(left) 6(right)
Вставляем значение 5, присваивая новые связи по правилу left < root <= right:
5(root)
5(right)
4(left) 6(right)
Как теперь вставить 4?
Вот тут я и запутался, ибо если вставить новый ключ с значением 4 как левый потомок рута, как я понимаю, быстрый поиск по дереву наебнется, ибо если нужно будет найти все значения по ключу 4, то поиск пойдет по левой ветке, игнорируя правую, т.к 4 < 5. Решить это можно так:
5(root)
5(left & right)
4(left) 6(right)
Теперь при вставке нового ключа 4 он присвоится после уже имеющегося ключа 4:
5(root)
5(left & right)
4(left) 6(right)
4(left & right)
Теперь и быстрый поиск должен работать корректно.
Но, чисто логически, может ли родитель в бинарном дереве иметь как правого и левого потомка один и тот же элемент, поидее это наебнет рекурсию, если нужно будет посчитать сумму значений элементов, например, элемент являющийся одновременно и левым и правым потомком будет учитываться два раза при рекурсивном подходе, что не есть хорошо, но я думаю это можно пофиксить если посидеть и подумать, у меня уже есть пара идей допустим сравнивать адреса потомков елемента, если их адреса равны, то соотественно можно пропустить один проход по любой из веток, не важно.
Ну и как третий вариант, можно сделать чтобы поиск шел по обоим веткам, вне зависимости от того меньше значение или больше, но толку тогда от такого дерева?
Я понимаю что лезу в дебри и можно просто на похуях запилить кастрированное говнодерево, препод и так схавает, но эта тема что-то затронула в моей душе что я не могу дальше писать код пока не разберусь как лучше сделать.
Подскажите как лучше, или помогите нагуглить.
inb4: ЧЗНХ???????????? ПИЗДУЙ ОТСЕДА, ДОВН. - Я ньюфаг, читал пару книжек, но опыта работы с деревьями мало и я хз как это гуглить, гугл упорно молчит по поводу деревьев с дублирующимися значениями, либо я не так гуглю, не спорю. Если пригорело от того что я возможно не учел то что тебе кажется очевидным и ты считаешь лучшим вариантом меня оскорбить - скрой пост чтобы глаза не мазолило и иди себе дальше, пожалуйста, я очень ранимый, не доводи до греха...
Сап, С++ боги.
Препод задал написать бинарное дерево с дубликатами, ну то в котором могут хранится одинаковые ключи, и вот я думаю.
Насколько я помню, есть два варианта добавления уже имеющегося ключа в дерево, либо в тупую вставить его имеющемуся потомку елемента с соответствующим ключём как правого или левого потомка в зависимости от ключа нового элемента блять, надеюсь вы поймете, либо вставить новый елемент как потомок елемента дерева с соответствующим ключем и разорвать старые связи с потомками, а потомкам присвоить новый элемент как родителя. Поправьте пожалуйста если в чем-то не прав.
Так вот, реализовать само дерево могу, вставку двумя описанными выше вариантами тоже, но не могу определиться как будет правильно - left <= root < right или left < root <= right, не так много инфы по этому поводу смог найти. А так же, я хз как оптимизировать вставку, вот допустим, у нас есть дерево:
5(root)
4(left) 6(right)
Вставляем значение 5, присваивая новые связи по правилу left < root <= right:
5(root)
5(right)
4(left) 6(right)
Как теперь вставить 4?
Вот тут я и запутался, ибо если вставить новый ключ с значением 4 как левый потомок рута, как я понимаю, быстрый поиск по дереву наебнется, ибо если нужно будет найти все значения по ключу 4, то поиск пойдет по левой ветке, игнорируя правую, т.к 4 < 5. Решить это можно так:
5(root)
5(left & right)
4(left) 6(right)
Теперь при вставке нового ключа 4 он присвоится после уже имеющегося ключа 4:
5(root)
5(left & right)
4(left) 6(right)
4(left & right)
Теперь и быстрый поиск должен работать корректно.
Но, чисто логически, может ли родитель в бинарном дереве иметь как правого и левого потомка один и тот же элемент, поидее это наебнет рекурсию, если нужно будет посчитать сумму значений элементов, например, элемент являющийся одновременно и левым и правым потомком будет учитываться два раза при рекурсивном подходе, что не есть хорошо, но я думаю это можно пофиксить если посидеть и подумать, у меня уже есть пара идей допустим сравнивать адреса потомков елемента, если их адреса равны, то соотественно можно пропустить один проход по любой из веток, не важно.
Ну и как третий вариант, можно сделать чтобы поиск шел по обоим веткам, вне зависимости от того меньше значение или больше, но толку тогда от такого дерева?
Я понимаю что лезу в дебри и можно просто на похуях запилить кастрированное говнодерево, препод и так схавает, но эта тема что-то затронула в моей душе что я не могу дальше писать код пока не разберусь как лучше сделать.
Подскажите как лучше, или помогите нагуглить.
inb4: ЧЗНХ???????????? ПИЗДУЙ ОТСЕДА, ДОВН. - Я ньюфаг, читал пару книжек, но опыта работы с деревьями мало и я хз как это гуглить, гугл упорно молчит по поводу деревьев с дублирующимися значениями, либо я не так гуглю, не спорю. Если пригорело от того что я возможно не учел то что тебе кажется очевидным и ты считаешь лучшим вариантом меня оскорбить - скрой пост чтобы глаза не мазолило и иди себе дальше, пожалуйста, я очень ранимый, не доводи до греха...
#include <cuda.h>
__global__ void hello() {
printf("Hello cuda\n");
}
int main() {
hello<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
Компилируется, запускается, но при этом не печатает ничего. Что не так?

>5(root)
>5(right)
>4(left) 6(right)
Даже (4)5(6), 5((4)5(6)) нагляднее, мне кажется. Нарисовал бы на бумажке, сразу же сам бы понял.
>присваивая новые связи по правилу left < root <= right
>ибо если нужно будет найти все значения по ключу 4, то поиск пойдет по левой ветке, игнорируя правую
>игнорируя правую
Там и должно быть, у тебя требование, что в левой ветке все ключи строго меньше 5. Неправильная вставка, у тебя дерево 5((4)5(6)) не подходит под правило, 4 каким-то образом оказалось правее 5.
У тебя так или иначе образуется сегмент с двумя одинаковыми ключами один из которых правый для другого. Нужно или перемещать левую 4-ветвь к верхнему, или при добавлении спускаться вниз (пока значение не станет отличным от 5) и помещать новый 5-ключ на место старого 6-ключа. Тогда будет выполнено требование к дереву. Просто подумай чуть-чуть об алгоритме слияния двух деревьев, и всё станет ясно.
В общем никакого отличия от дерева со стогим неравенством ключей нет, я не понял где ты запутался. Просто при поиске если ключ совпадает, то не прекращаешь поиск, а спускаешься по правой ветке.
Ты каким-то образом вставляя в (4)5(6) новое 5 получил дерево 5((4)5(6)). Если бы ты вставлял 10 по тому же алгоритму, ты бы получил ((4)5(6))10 или 5((4)10(6)). То есть ты по каким-то причинам сам этого не замечая делаешь исключения для вставки элемента, если его ключ совпадает с уже имеющимся, хотя в твоём условии явно прописано left < root <= right, что говорит и критериях вставки любого элемента.
Спасибо, я проебался только в том что подумал что надо обоих потомков присвоить новому элементу, по сути.
>Даже (4)5(6), 5((4)5(6)) нагляднее, мне кажется. Нарисовал бы на бумажке, сразу же сам бы понял.
Вакаба сожрала табуляции, к сожалению, я такого не ожидал.

>Опыт разработки на С++ многопоточных сетевых приложений для Linux;
Где можно поучиться разрабатывать приложения для работы с сетью? Дома такое вряд ли можно протянуть на приемлемый уровень

Спасибо, действительно. Надо будет глянуть

Хм, спасибо, буду знать!
Это особенности плюсов, в шарпе например не так, там можно тупо в теле класса инициализировать статическую переменную. А вот в плюсах статические переменные должны инициализироваться в той же области видимости где находится класс, обычно сразу после тела класса по-моему даже обязательно, но это не точно. В методах класса ты можешь менять значение, но инициализация для дальнейшего использования происходит именно так.
Посмотри на инициализацию внимательно, это специальная конструкция для инициализации статических переменных в классах, даже если они private, такая конструкция не значит что через неё всё в области видимости получают доступ к такой переменной, её нельзя написать в том же main(), это существует сугубо для инициализации.
Вот пример, почитай комментарии:
https://pastebin.com/z0tfaT2a
>Когда следует делать Class::func(int x) : x(x), а когда по стариночке инициаилизировать?
Это и есть по-стариночке.
Нихуя тут тонкости конечно, спасибо за ответ адекватный.
Такую инициализацию можно использовать только в конструкторах класса. Она ещё список инициализации членов называется.
Если коротко, то она вызывает конкретные конструкторы для объектов, вместо операторов присваивания и прочего.
В первом случае также данные инициализируются еще до создания объекта, бывают случаи, когда это нужно
Типа с разными параметрами. Кроме как самому писать.
Ты имеешь ввиду как printf()?
return_type funcname(...){ body }
Почитай тут например - https://rsdn.org/forum/cpp/418970.1
Функции с переменными параметрами называется вроде.
Только вот в плюсах немного муторно выцеплять из памяти переданные в такую функцию значения.
Память под объект ещё не выделена, а данные (его поля) уже инициализируются? Это как?
Для записи : a(_a), b(_b) не определён порядок инициализации. Если важно, что b инициализируется после a, то придётся писать a=_a, b=_b в теле конструктора.
Просто различных. Я могу получить одну, например std::hash<std::string>(), но мне нужно несколько разных. Для одного и того же типа. Просто чтобы разные значения возвращали.
Например, если там полиномиальный хэш, то с разными множителями.

Бля,я понял что за хуйню наделал, уже не нужно
Обычно в контейнере делают так:
class <typename T> Container {
typedef T value_type;
typedef value_type* iterator;
}
И там, где тебе нужен тип итератора, ты пишешь (например):
Container<int>::iterator it;
Не ленись, посмотри исходники std.
Анон, я знаю, что меня скорее всего пошлют нахуй тут, но
1) если изучать с++ в 39 часов в неделю, за сколько можно стать джуном?
2) проганье, это внезапно то, на что у меня более менее стоит.
3) есть ли курсы годные(шапку читал) именно с задачками на то, чтобы вкатится на джуна.
Т.е. - смотрю видео- читаю книжечку- делаю домашку- вкатываюсь в с++.
От ваших ответов зависит, поставлю ли я анус или нет.
25 лет.
Потому что кадровики не в курсе, чем кресты от питона отличаются. Для них это одинаковые погромисты, тем более минимальной квалификации. А вообще кресты посасывают по средней зарплате и дают реальный выигрыш только для синёров.
Ты можешь вкатиться в какой-нибудь НИИ на джуна вообще без знания крестов. Там всегда дефицит кадров.
А что за контейнеры?
>>82423
Меня интересует вкат в профессию, ибо алчный мудак и хочу денег и заниматься полезным. Вкат в С++ я думаю, возможен и дойти до ебучего IT-архитектора при должных усилиях жопы возможен за 7 лет.
Меня интересует нормальное проганье, но зайя на HH я вижу-нужен C++ 1 год проганья. Вопрос- это у меня в трудовой книжке записано
должно быть записано или я могу сказать ,что у меня год?
У меня так-то 6 лет,которых я пинал хуи в вузе С++.
Если нужен для этих тупорылых HR просто запись в книжке- я тебя внимательно слушаю, где такой НИИ, где я буду джуном C++ зная чуть более,чем нихуя.
Алсо, что вы думаете про курс специалист от МГТУ имени баумана?
>Алсо, что вы думаете про курс специалист от МГТУ имени баумана?
Думаю что устаревшая дрисня. Вот неплохой курс бесплатно и без смс, как говорится. https://www.youtube.com/watch?v=Hh_zeW2P8uo&list=PLrCZzMib1e9raTDJ5IyuSHe9AmOUHAAsr
Так, тогда ещё вопросы:
1) Актуальны ли книги в шапке- или нужно читать максимально близкие к 2018 книги по с++. Шлее норм?
2) Есть ЗАДАЧКИ ЧТОБЫ ВОТ СДЕЛАТЬ И ВЫЛОЖИТЬ НА ГИТХАБ ИХ ТЕБЯ ПРИНЯЛИ В КРУПНУЮ КОМПАНИЮ НА 300 КККК В НАНОСЕК.
ну или хотя бы бичом за 25к
25-кун близок к ставке ануса.
>ибо алчный мудак и хочу денег
тогда тебе в Web
>дойти до ебучего IT-архитектора при должных усилиях жопы возможен за 7 лет
это вообще не про конкретный язык программирования
>но зайя на HH я вижу-нужен C++ 1 год проганья
Иди и собеседуйся. Скажи что в своей шараге курсачи писал на c++. Если будут посылать не стестняйся спросить как тебе получить необходимый опыт.
И вообще сцуко ты 25 летний жлоб, а вопросы, как будто ты только что из своего манямира вылез. Ты ведь ещё нигде не работал, да?
1) Смотришь, когда вышли стандарты языка и смотришь дату выпуска книги. Если книга вышла позже - то смело читай.
2) Твой помойный гитхаб никто смотреть не будет. Понять, что это твой код, невозможно да и зачем в говне ковыряться. Обычно конторы дают тестовое или просят написать какой-нибудь код на месте.
Понимаешь, есть такое понятие,как отложенная гратификация.
Вообщем был эксперимент, когда детям дали выбор- тебе дают конфету сейчас или две конфеты потом. Потом детям, которые выбрали 2 конфеты потом давали снова выбор- либо 2 конфеты сейчас либо 4 конфеты потом. И так несколько итераций.
Я думаю, не надо объяснять, что в жизни стали успешны те, кто выбрал отложенную гратификацию- т.е. несколько конфет, но потом.
Веб- это конфета сейчас.
С++ это несколько конфет потом.
Ибо полноценный вкат в С++ это около 700к при вжобывании потом.
веб не настолько прибыльный,как С++ Senior а меня интересует глубокое погружение. Т.е. если мы говорим про архитектуру то web- это около 300к после 5 лет, а с++ это 450к-700к при вжобывании.
К тому же С++еров мало, а веберов дохуя.
т.е. веб не настолько годный для мозга и все таки он скучный. На крестах же можно вкатится в очень хорошие зарплаты и самое главное это мне интересно более менее.
В шараге я писал на С++ первый курс, потом я пинал хуи и я теперь всё забыл.
работал и работаю.
>в жизни стали успешны те, кто выбрал отложенную гратификацию
кто не сидел на жопе ровно
>С++ это несколько конфет потом.
Нахуй нужен язык, который тянет за собой легаси говно с начала 90-х, у которого уже сейчас стандарт более 1500 страниц? Его заменят на более лаконичную версию и тебе, пирожок, придётся переучиваться (опять).
>web- это около 300к после 5 лет, а с++ это 450к-700к при вжобывании.
Пример для тупых: ты работал 5 лет за 100к, а вася за 150к в вёбе. Потом тебе подняли зарплату до 200к. И вот вроде бы ты васю выебал, ан нет. Тебе ещё придётся поработать 5 лет, чтобы ваш суммарный доход за 10 лет стал одинаковым. И более того, васян мог поиметь процент с той суммы которую ты недополучил (купил хату раньше тебя или под процент их в банк положил). Поэтому тебе, будущий синёр-архитектор с++, придётся ещё пару-тройку лет васю догонять. (итого до получения реального профита потребуется въйобывать 13 лет).
>К тому же С++еров мало, а веберов дохуя.
Ну да, чем больше рынок, тем больше требуется рабочей силы для его насыщения.
>С++ это около 700к при вжобывании потом
>В шараге я пинал хуи и я теперь всё забыл
дайте мне 700к, а вжобывать я потом буду
Те большие зарплаты, которые ты видел, они не про идеальное знание с++, а про отличное знание предметной области и умение писать всякую сложную и высокопроизводительную алгоритмическую ебанину с применением матана, статистики и прочего саенса.
>>82466
Кстати, хорошоий пример для тестового. Загугли, что такое сложный процент и напиши программу, которая вычисляет время, за которое суммарный доход c++ и web кодеров становится одинаковым. Входные данные - процент (можешь взять ставку рефинансирования с cbr.ru), массив с тройками: salary_web, salary_c, time_stamp (в моём примере {{150,100,0}, {150,200,5}}).
> А вот в плюсах статические переменные должны инициализироваться в той же области видимости где находится класс
Неправильно. Объявление статической переменной должно быть повторено вне класса для того, чтобы она хранилась только в одном месте, а не в каждом коде, включившим заголовок. В какой-то версии плюсов есть static inline - каждая единица компиляции имеет копию статической переменной.
>В какой-то версии плюсов есть static inline - каждая единица компиляции имеет копию статической переменной.
При этом повторять объявление вне класса не нужно.
>>82499
Ну может нам в универе недообъяснили про inline, но то что ты написал исходит из простой логики и я не вижу противоречия написанному мною.
static переменные, хоть паблик, хоть прайват - нельзя инициализировать в методах класса и любых других функциях в области видимости, хз что тут "неправильного".
А, это да. Просто вопрос бы скорее про то, почему это делается вне класса. Инлайн-переменные можно инициализировать прямо в классе.
"Нет" это в ответ на это:
>это существует сугубо для инициализации.
Нет, не для инициализации.
Или, ещё точнее: нет, не сугубо.
Бля, в этом треде такого вопроса нет, но я помню что был один в один такой-же раньше. Ты репостнул или это боты шалят?
В этом треде такой вопрос есть , репостнул.И я уже сделал с вектором, но решил спросить.
На рекурсии сортировочки делаются и всякие алгоритмы на графах/деревьях. Можешь на таких задачках попрактиковаться или поизучать готовый код.
Я не шибко разбираюсь, но если у тебя РПГ с сохранением прогресса, то можешь хранить инвентарь в отдельном файле сохранений - а вообще для этого бд используют.
Либо какой-нибудь json заюзать.
А для сессионной текстовой РПГ можно и вектор использовать, мне кажется.
Понял, спасибо.
>https://www.mccme.ru/free-books/shen/shen-logic-part3-2.pdf#chapter.11
Спасибо, вроде то что искал. Я правда со статьи на хабре порешал какие-то элементарные задачи. Думаю лишним не будет
Блять, ошибка оказалась в том, что я на еденицу ошибся с центром диагонали и оно брало статичный элемент. Пиздец я тупой, извините что беспокою
double number;
vector<double> numbers;
while (cin>>number)
numbers.push_back(number);
for(int i=0; i<2; ++i)
cout << numbers << '\n';
}
При вводе 127 и 127.0001 выводит 127 и 127, почему и как это исправить?
Ну давай разберем по частям. маня, тобою написанное )) Складывается впечатление что ты реально контуженный , обиженный жизнью имбицил )) Могу тебе и в глаза сказать, готов приехать послушать?) Вся та хуйня тобою написанное это простое пиздабольство , рембо ты комнатный)) от того что ты много написал, жизнь твоя лучше не станет)) пиздеть не мешки ворочить, много вас таких по весне оттаяло )) Про таких как ты говорят: Мама не хотела, папа не старался) Вникай в моё послание тебе< постарайся проанализировать и сделать выводы для себя)
Поставил бы интуитивно понятный printf("%f\n",numbers[i]) и сразу бы было всё понятно, зачем тебе этот новомодный мусор? Там и всякие настройки есть, вроде +07.3f, которые через cout оче неудобно выставлять. Пропиши что-то вроде cout.precision(8) перед выводом твоих чисел.
>зачем тебе этот новомодный мусор
Да я ж откуда могу знать? У Страуструпа про printf почти и не говорится поначалу.
А вот липман говорит, что члены инициализируютя в порядке их описания в теле класса
Я вообще не всекаю, как у тебя срабатывает cout для объекта класса vector, оно даже скомпилироваться не должно.
Сделай numbers[i] и должно будет работать
struct S
{
int a;
float b;
S(int _a, float _b) : b(_b), a(_a) {}
};
Что инициализируется раньше: a или b и почему?
По лимпану, б раньше.
Он даже приводил пример, когда один член инициализируется значением другого. Порядок именно по порядку объявления в классе, а не в инициализации конструктора. Я проверял
да, сначала будет выполнено a(_a), потом b(_b).
а теперь напишем вот так:
struct S
{
int a;
float b;
S(int _a, float _b)
{
b = _b;
a = _a;
}
};
в данном случае сначала b получит значение _b, а потом a получит _a. вот про такую "смену порядка инициализации" я писал выше.
я тут хуйню написал. забыл, что члены до тела конструктора инициализирутся. никакой порядок не поменяется.
то есть нет, поменяются. пойду спать короч.
Есть свой класс аля вектор строк StrVec со своим аллокатором alloc и членами: elements - указатель, возвращенный alloc.allocate(), first_free - указатель после последнего созданного элемента.
Есть процедура очистки, которая вызывается в деструкторе:
For(auto p = first_free; p! =elements)
alloc.destroy(--p);
Как переписать этот цикл на for_each и лямбда-выражение?
Запись не определяет порядок инициализации. Там из контекста понятно, о чём я написал, довен.
Определение вне класса опять таки не значит что все в области видимости видят эту функцию, ты бы хоть для интереса попробовал.
![Screenshot2018-10-23-21-14-31-227org.geometerplus.fbreader.[...].png](/pr/big/thumb/1263368/15403043169720s.jpg)
Роберт Седжвик
Во введении автор обещает рассмотреть во втором томе кучу всего, а на деле там только графы.
Как так?
Пикрилейтед, особенно обидно за геометрические алгоритмы, может кто посоветовать замену?
Это из С потому что.
А вот в оригинале книга называется просто Algorithms.
Не устраивает только то, что автор обещает одно, а на деле другое (либо я не увидел), причем издание третье, а текст со структурой тот же
cpp.sh/34d4n
Мне нужно узнать колво символов в string и положить это число в переменную int.
В гугл уже ходил, ничего не нашел.
Пишу в codeblock компилирую gnu gcc.
14.88 символов.
Агри с тобой, русский феллоу
Твоя IDE ебанулась, va_list в коде нет. Что с этой вонючей студией делать - думай сам.
Да там вообще библиотек разных подключило неявно дохуища. Создал новый проект, выдаёт ту же хуйню. Аноны, кому не лень, можете проверить у себя код?
Прошлые проекты у меня работают, создал новый - тоже. Тут где-то в коде ошибка видимо, но я не пойму где, и почему оно подключает какие-то левые библиотеки и говорит что они не определены?
На самом деле я надеялся на то, что ошибку в твоём коде покажет. Анализаторы кода чудеса творить не могут, и в общем случае ошибка в коде вызывает ошибки во всём оставшемся, так что сначала надо инклудить проверенный код.
Но если ошибки в коде, оказывается, не было, то варианта два:
- 5%: ты случайно определил какой-то макро или идентификатор, которые используется в одном из 100500 заголовочных файлов
- 95%: это блядская студия виновата, говнокод на говнокоде
НАХУЙ кресты. Если вы - не совсем законченный нерд, то НАХУЙ. В постсовке - тем более нахуй. Работаю с геймдеве и у меня уже очко просто полыхает. Сука, каждый день - АНАЛитическая геометрия, вставки под АСМ, ебля с памятью, вечно что-то крашится, что-то наёбывается, триллион эсепшнов, вечная проблема с архитектурой потому что забыл мельчайшую хуйню - всё, пизданулось нахуй, а ЗП - хуйня при том, что я - СИНЬОР
Блядь, за что мне это. Мало того, что мне пришлось перед тем, как стать джуном ебануть 3 игоры, задрочить OpenGL и запилить их на гит, так еще и не брали нигде, но это похуй а на всё это я въебал полтора года жизни. Какого, мать его, хуя, у меня френд - ПАЙТОНИСТ пинает хуй в дейта сайнс и получает больше ?
Просто пидорская хуйня, у меня проф. выгорание, на этом всё. Сука, знал бы всё это, пошел бы в веб- дев.
У меня всё, очко порвано.
как пережить эту стадию проф. выгорания ?
Просто не надо в гейдев идти. Я со смежной отрасли ходил на собесы в ваши конторы. Нигде большего дна я не видел. Зп мне 130к предлагали, но опять же в серую с "испытательным сроком" пол года, "трудовой договор" - сплошные обязанности и никаких прав плюс штрафы. Офис задроченный, погонщики вкрай охуевшие (особенно hr выбесили).
Кстати геометрия хуйня у вас там, ну по сравнению со всякими приблудами для машиностроения, робототехники и проч. Зато пердолилово с железом и памятью да - на уровне.
То что нахуй в Раисе кресты не нужны это верно. Раз уж выбрал кресты - то сразу готовь трактор.
>как пережить эту стадию проф. выгорания ?
Возьми перерыв в полгода и за это время выучи новый язык/стек. Затем вкатывайся в новую сферу. Бывших крестовиков охотно берут на Go/Golang, например.
Ну в этом проэкте такая проблема впервые возникла, раньше делал как попало и работало всё
Если ты добавишь имена файлов в код, который ты запостил, я скажу точнее, в чём проблема.
Перекатывайся потихоньку на другой ЯП, можешь сразу делать что-то посложнее хелловерлда т.к опыт в программировании есть.
После ебли с байтами все остальное будет казаться тебе легкой хуйней и в некотором смысле так и есть.
Ну, у меня сейчас выбор - голанг и ведроидоприложухи или же пайтон и биг дейта. Вот не знаю, что выбрать. Математическая база у меня хорошая, вроде как.
Что подскажете, анонче ? Вчера, после очередной утечки памяти, с которой я ебался целый день, бомбанул прост (причем в родительском классе все было выкручено, что даже ПТРами не отделался).
Иди на ведро - там за графениум хорошо платят. И да, ещё раз напомню - хуйня у вас там в геймдеве, а не математика. Векторные произведения и матрицы твои с кватернионами это максимум на 2 курс провинциального вузика тянет.
Я думаю, что у него просто был плохой день.
Найди уже онлайн-компайлер с возможностью добавить несколько файлов и дай ссылку.
С учётом того, что надо начать хоть с чего-нибудь - да, стоит.
Имеется класс Path, который определяет путь к каталогу, и мы хотим добавить к этому пути поддиректорию
Path p("a/b/c");
p = p / "d";
В итоге получаем путь "a/b/c/d"
У меня истерика. Зачем, двач? Почему не append("d") или add("d")? Зачем эти выебоны? Это что, сложность ради сложности?...
Все фичи плюсов, на самом деле, делаются ради этого. Концепты, рефлексия, метаклассы, констэеспр, фолдинг выражения? Кому они нужны? Зато мы можем всем показать, как можно у нас классно сделать.
Потому что написать /d легче чем писать append("d"). Экономит время.
Понимаешь, плюсы само по себе - это сложный язык с кучей неписанных правил.
http://libtins.github.io/ - вот, смотри, они тоже слэш перегружают.
Лично мне лишние скобки не нужны, я бы лучше оператор перегрузил. Если я в коде увижу path / file я сразу пойму, что это значит, это понятно интуитивно.
>>84329
чо вы там можете блядь где перегрузка амперсанда сука
Сап /cpp.
Я решил написать после вузовского перерыва свою первую задачку.
1. Начнем с того, что Я САМОСТОЯТЕЛЬНО НАСТРОИЛ ЭТОТ ЕБУЧИЙ QT, ЧТО УЖЕ ВИН!!!
2. Я написал программу, это оказалось немного легче.
Но есть проблема:
1. Как вставлять код, чтобы выглядело годно.У джаваскриптеров есть сайти для этого. Есть ли сайты у нас.
2. Программа.Дано: Есть биткоин-бот. который хуярит процент от суммы за месяц. Есть зарплата анана, и есть процент, под который бот хуярит в месяц. Есть количество месяцев.
Т.е. анан хочет денег и дает в первый месяц 200к. Бот делает под 4% Зарплата анана на 40к. Расчитать прибыль бота за год, при условии, что анан будет вносить туда каждый раз 40к.
1. Я написал код.
2. Он скомпилировался без ошибок.
Но, после того, как я ввожу input_bot_percent мне программа одновременно выдает введите current_amount и month_iteration и после этого закрывается.
Вопрос 1. ХУЛИ ЭТО ГОВНО НЕ ДАЕТ ВВЕСТИ МНЕ начальное количество денег.ЧЯДНТ?
Вопрос 2. Как сделать так, чтобы оно не закрывалось при окончании.
Не кидайтесь тапками,плиз. Это моя первая программа.
код
++++
#include<iostream>
using namespace std;
int main()
{
long double money_input, percent, current_amount;
int month_iteration = 0 ;
cout<<"Input your salary!";
cin>>money_input;
cout<<"input_bot_percent";
cin>>percent;
cout<<"input start_current_amount";
cin>>current_amount;
cout<<"month_iteration";
cin>>month_iteration;
while (month_iteration>0)
{
cout<<"month left";
cout<<month_iteration;
cout<<"current_amount is";
current_amount= current_amount+(current_amount*percent);
month_iteration--;
}
Сап /cpp.
Я решил написать после вузовского перерыва свою первую задачку.
1. Начнем с того, что Я САМОСТОЯТЕЛЬНО НАСТРОИЛ ЭТОТ ЕБУЧИЙ QT, ЧТО УЖЕ ВИН!!!
2. Я написал программу, это оказалось немного легче.
Но есть проблема:
1. Как вставлять код, чтобы выглядело годно.У джаваскриптеров есть сайти для этого. Есть ли сайты у нас.
2. Программа.Дано: Есть биткоин-бот. который хуярит процент от суммы за месяц. Есть зарплата анана, и есть процент, под который бот хуярит в месяц. Есть количество месяцев.
Т.е. анан хочет денег и дает в первый месяц 200к. Бот делает под 4% Зарплата анана на 40к. Расчитать прибыль бота за год, при условии, что анан будет вносить туда каждый раз 40к.
1. Я написал код.
2. Он скомпилировался без ошибок.
Но, после того, как я ввожу input_bot_percent мне программа одновременно выдает введите current_amount и month_iteration и после этого закрывается.
Вопрос 1. ХУЛИ ЭТО ГОВНО НЕ ДАЕТ ВВЕСТИ МНЕ начальное количество денег.ЧЯДНТ?
Вопрос 2. Как сделать так, чтобы оно не закрывалось при окончании.
Не кидайтесь тапками,плиз. Это моя первая программа.
код
++++
#include<iostream>
using namespace std;
int main()
{
long double money_input, percent, current_amount;
int month_iteration = 0 ;
cout<<"Input your salary!";
cin>>money_input;
cout<<"input_bot_percent";
cin>>percent;
cout<<"input start_current_amount";
cin>>current_amount;
cout<<"month_iteration";
cin>>month_iteration;
while (month_iteration>0)
{
cout<<"month left";
cout<<month_iteration;
cout<<"current_amount is";
current_amount= current_amount+(current_amount*percent);
month_iteration--;
}

Прости меня двач. Я все исправил.
Ну господа, можете меня поздравить.
Если бы я не был таким ленивым мудаком, был бы сениором.
Скажем, хранится два объекта структуры, нужно один из них удалить => файл должен стать вдвое меньше по размеру.
Интерфейс fstream, вроде, этого делать не позволяет.
За переполнение стека знаю
Лул, не асашай. Это Минск.
У меня есть знакомый который в Киеве так зарабатывает, тимлид в компании какой-то.
Как сделать так, чтобы программа считывала переносы на новую строку?
Для удобства поставь себе графический клиент для git. Я юзаю черепашку TortoiseGit. После установки у тебя в меню по нажатию правой кнопки мыши появится gitclone и create repository here. Дальше всё очевидно.
c = cin.get();
const std::string& getName() const {
return name ;
}
В данном случае польза const не так очевидна. Почитай мейерса, там есть пример, в котором он показывает, почему const следует использовать где только можно. Это позволяет избежать неявных шибок во многих случаях
>В данном случае польза const не так очевидна.
Вполне очевидна. Убери первый const и перестанет компилироваться.
Ты можешь ссылаться на переменную по двум причинам:
- тебе нужно, чтобы вне функции в неё что-то писали
- избежать копирования
Ставя или не ставя const ты говоришь именно это.

Блять стоп, извинияюсь. У меня просто обратный порядок и прямой очень похожи. Pizdets ya tupoi
dialog-based MFC, сам язык я, в принципе, знаю, а вот структура приложения какая-то непонятная
Блять, метод возвращает "const string&", даже если поле не константное будет просто возвращена константная ссылка - https://pastebin.com/Zr8jCZsZ
Что за тип такой, ссылка на константу?
Его проебали или потерли, уже с неделю как, кстати.
Спрашивай, может я помогу, но я сам в шарпе ньюфак.
Да я в общем искал шапку треда для вката.
Уазатели именуются так (именование формируется при разборе с конца):
1. const (int p) - указатель на константу (нельзя p = 1;)
2. (int p) const - константный указатель (нельзя p = nullptr;)
3. const (int p) const - константный указатель на константу (нельзя 1 и 2)
Ссылки именуются аналогично. Разница лишь в том, что ссылка и так константная, поэтому писать 2 и 3 бессмысленно, хотя компилятор такой записи не воспрепятствует.
1. const (int r) & - ссылка на константу (нельзя r = 1).
2. (int r) & const - константная ссылка (то же что и (int r) &)
3. const (int r) & const - константная ссылка на константу (тоже что и п. 1)
Ну а ты обосрался с именованием и теперь копротивляешься.
Бля, протупил что-то. Думал там только по основному языку. Спасибо
Можно еще вопрос? Лучше прочитать раздел с бест практисами сначала или то что ты скинул? Не знаю как лучше сделать.
В задании написано что должно превратить слово в подобие madamiamadam а потом выполнять проверку. Я два цикл написал нашёл на стаковерфлоу, которые выполняют проверку на знаки пробела и пунктуации. По идее должно сначала превратить слово в набор букв, а потом сравнивать
Так-то tolower не перезаписывает аргумент значением, а возвращает его. И потому в for_each не годится, хуяч std::transform()
Для этого есть какая-то не слишком громоздкая библиотека или будет проще потратить час-два и вручную через gdi+ сделать изображение и эмулировать кнопки/ползунки? Никаких особых возможностей или удачности архитектуры не требуется, просто сделать как-нибудь и забыть.
Android NDK


В программе чуть-чуть разобрался, но всё же обьясните что не так в предыдущей версии. Ведь по идее cin.get должен по очереди изымать из потока по одному символу пока не дойдет до $. Или ошибка в том что cin.get(void) возвращает интовое значение?
И еще вопрос: как работает этот код? Я ввожу строку и он так же по очереди изымает по символу пока не триггернется? cin.peek() использовал потому-что в задании сказали чтобы триггер-символ не учитывался.
Ошибка не в самой переменной, а в том что оно пытается считать не с входного потока а с переменной? Точнее считывает с переменной, а не с потока
Што?
Переменная k имеет тип char
Оператор >> видит справа char поэтому читает строку (до пробела) и пытается записать в k. При этом портит память, так как места там только на один элемент.
А цикл считает оставшиеся символы (тот самый пробел) и выводит 1.
Мне вообще интересно, что хотел сказать автор, когда писал эти строки.
char -> char*
Всё, спасибо. Строку эту я потом убрал. Просто не вышло с первого раза и начал пробовать всё подряд.



Ошибки отклеялись
Хуй знает, когда начинал кодить она первая попалась. Там все методы с С++11 работают, только #include <initializer_list> не хочет делать, но он в этой версии вроде не включён. А тут баг какой-то. Скачал себе студию 17 года от вуза бесплатно раздавали, если что буду переключаться.
https://msdn.microsoft.com/en-gb/library/hh567368.aspx
>Variadic templates
>Visual Studio 2012
>No
Нормальный C++11 только в 15 версии завезли, нормальный C++14 только в 17
> Visual Studio
Зачем вообще студией пользоваться?
То поддержка стандарта годами добавляется.
То автодополнение отлавливается.
Такое чувство что поддержка C# там сделана гораздо лучше кто бы мог подумать
Они раз пять обновляли компилятор. В последней версии (15.8) вроде полная совместимость уже.
https://en.cppreference.com/w/cpp/compiler_support
Что значит работает? Какие операции ты собрался над ним выполнять?
Ну а в целом вот, https://stackoverflow.com/questions/381621/using-arrays-or-stdvectors-in-c-whats-the-performance-gap
Ответ на твой вопрос:
>Using a pointer to a malloc-ed/new-ed array will be at best as fast as the std::vector version, and a lot less safe
У меня mingw-64 + cmake. Готовые билды с glew.sourceforge.net не работают (так как заточены под msvc или ещё что-то такое).
Собрал через mingw сам, получил файлы libglew32.a и glew32.dll - программа теперь компилируется, но glewInit() возвращает GLEW_ERROR_NO_GL_VERSION, и функции старше gl 1.1 не работают, соответственно. Никакое сочетание флага GLEW_STATIC, glew32.lib/glew32s.lib и двух разных *.dll не взлетает.
Единственное что заработало, это если явно добавить исходник glew.c к коду проекта, но мне не очень бы хотелось оставлять программу в таком виде.
Бесят невероятно эти компиляторопроблемы. Хотел просто на спор написать демку с шейдером, кода на 20 минут, а я несколько часов тыкаюсь в унылые форумы в попытках найти решение. Причём, далеко не только у меня такие проблемы. А ведь это всего лишь невероятно простая и однообразная библиотека из одного файла. Бред какой-то, зачем вообще нужны все эти книжки из шапки, лол, если вообще всё что угодно в самом программировании проще вышеупомянутых проблем.
Что, что мне прочитать, что мне сделать, чтобы разобраться наконец в .o/.lib/.a файлах, статических и не статических линковках, cmake/make и других непосредственно с языком не связанных вещах?
https://pastebin.com/dVsNkNu2

>single linked list
Понятия не имею что это, но считывание работает. Только что лишний ноль закрался, но если закомментировать create(0), то нуля не возникает. Может быть он и нужен зачем-то, без понятия.
В общем, смотри содержание своего файла. Ты считываешь через getline по строкам, соответственно у тебя должно быть одно число в строке. Если в файле они через пробелы или ещё как, то нужно заменить getline и корректно это обрабатывать, вызывая atoi на каждое число, а не строку.
Они у меня также как в фото выше, вводил через Enter числа от 11 до 25
Но не выводит никаких чисел кроме 1. Может это из-за того что я убунту вчера поставил?
Разбей задачу на этапы, проведи исследование же.
1. Просто открой и закрой файл, посмотри нет ли ошибок, видит ли оно вообще твои файлы. Если не работает, попробуй через fopen или собственные убунтовые функции, если они есть.
2. Попробуй посимвольно без всяких atoi вывести файл. Потом построчно твои line, правильно ли работает getline (в люниксах вроде бы иначе переносы строк выполнены, если файл сделан на винде).
3. Попробуй вызови atoi для жестко заданных строк. Если не работает, считывай посимвольно и сам преобразуй символы в числа, например.
Дел на 3-10 минут, и ты достоверно выяснишь на каком этапе и в какой функции проблема, где бы она не возникала. А то чёрт его знает, зачем пальцем в небо тыкать.
Это копия, сохраненная 17 ноября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.