Это копия, сохраненная 22 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый >>1456115 (OP)
Мне надо открывать картинку и по нажатию на кнопку зумить ее, как в фотошопе. На QGraphicsScene добавляю QGraphicsPixmapItem с картинкой. Что дальше то делать? Менять размер QGraphicsPixmapItem и QGrapicsView?
В общем случае - список указателей на элементы контейнера. Ну или итераторов (пар итераторов), но плиз не вводи людей в заблуждение.
Ну вот посмотрит человек на твой код со списком итераторов и сразу же подумает, что его писал какой-то псих
В том то и проблема, что я не понимаю, как от этой проблемы уйти, чтобы не делать копирований в подсписки. Может быть делать сортировку по признаку, и работать с этим?
Бамп вопросу.
Отталкивайся от условий задачи. В создании списка указателей ничего плохого нет. Этот вариант пойдёт для любого контейнера. Конкретно для вектора можно по-своему отсортировать и хранить список пар индексов от-до. Короче ебаш список указателей и не еби мозг, даже миллион указателей на x64 это меньше 8мб
Сделай вью над контейнером, в котором будет только то что тебе надо
https://en.cppreference.com/w/cpp/ranges/filter_view
ranges-v3 можно отдельно поставить если с++20 у тебя не завезли.
>>71370
А setScale не то что тебе нужно?
Я даже нажать нихуя кроме F5 не успел. Просто на хелоу ворлд посомтреть хотел, а меня и тут посылают нахуй.
Судя по всему, ты c++-ный код пытаешься компилировать как сишный. Пересохрани файл с расширением .cpp и передобавь в проект.
Спасибо
Как проще всего создать битмап, заполнить его и вывести в окошке? Цель -- рендеринг всякой залупы вроде вращающихся кубиков без opengl и direct3D. Платформа -- винда.
Смотри в сторону GDI. Но сразу тебе скажу, что это медленнее опенгл/директа раз в 10-20.
Спасибо! Вот я ожидал нечто такое, стандартное, шаблонное
На хабре чувак написал довольно плотный курс по 3d рендеру - https://habr.com/ru/post/248153/ может интересно будет. Он там правда в TGA файлы рендерит потому что поставил задачу не использовать вообще никаких сторонних библиотек (кроме стандартных естественно).
Direct2D
ЕМНИП если ты хочешь чистым винапи рисовать, тебе нужна функция StretchDIBits. Но тебе придётся познать основы Windows Message Loop.
читай книги майерса, Саттера и всякую модерновую хуйню. Вот Николай Джоссутис выпустил книгу про С++17.
Мимо-350к-кун
На чем пишешь?
>>72472
Я с уровнем около твоего легко ворвался на стажировку. На всех собесах спрашивали алгоритмы, поэтому подучи их и реши на литкоде хотя бы 30 задач уровня медиум. Хотя у меня в твое время даже аккаунтов там не было и я как-то сам без подготовки вывозил. По крестам спрашивали либо всякие тонкости уровня cppquiz (загугли, решай, вот это я практиковал для вката), либо вполне адекватные вопросы типа как хранить в объектах класса лямбду и искать в мапе ключи по значению, но как к последним подготовиться я не знаю.
А вообще считаю, что подготовка к собеседованиям это зло и жульничество, надо приходить и вывозить чисто на реальном опыте и скилле.
Алсо, могут ли в 2020 спрашивать за 20 стандарт? Стоит ли на него силы тратить, знаю там много клёвых фич завезли, но неизвестно когда их будут поддерживать компиляторы.
Я про теорию алгоритмов
Судя по вашим ответам я уже могу искать себе вакансию трейни но они все требуют хотя-бы студента 3 курса сука . Спасибо в любом случае
к чему ты применишь оператор, если у тебя еще что-то не создалось, а?
A copy assignment operator of class T is a non-template non-static member function
Вряд ли, еще 17 далеко не везде используют, могут спросить только чтобы понять, насколько ты заинтересован языком и в курсе его новшеств
Забыл исключения еще. Про срр20 вообще забей, его еще прилично не будет в проде везде, кроме яндекса
Почему же?
И вот для пеки, на время разработки, родилась идея хорошего и удобного вывода в виде веб-странички. Я в веб-технологиях и апи не шарю, и хочу узнать, как сделать лучше?
Мне не очень нравится идея сделать веб-сервер внутри моей проги, и запускать/компилировать его флагами, хотя вариант рабочий. Веб-страничка может быть даже скомпилена, и можно даже прикрутить AJAX и JSON обмен с браузером (такое я делал в LwIP, вышло хорошо и годно).
Какие еще есть варианты? Может быть, выводить статусы проги в консоль или какой-то системный поток, и его подхватывать внешним, отдельным скриптом с сервером в ОС? Или сделать в моей программке tcp-сокет со своим простеньким протоколом, к которой уже будет подключаться http сервак (выйдет так же, как если http сервер встроить в программку).
Не знаю, как нагуглить эту проблему, поэтому пишу сюда.
Еще есть вариант отдавать json'ы и рисовать все уже на клиенте жабаскриптом. Плюс в том, что облегчает работу серверу, и допускает написание других фронтэндов. А если логика формирования данных простая, то можно сделать это и на С++, и даже без асинхронности, чисто в отдельном треде.
Я бы выбрал подход с отдельным сервером на питоне.
Как реализовать обмен между сервером и твоей прогой - вопрос, решение которого зависит непосредственно от данных. Например, если тебе нужно гонять гигабайты, то консоль не подходит, а memory mapped files - вполне заебись.
корутины (при том, что они крутые, но как их готовить пока не ясно), концепты (средний двачер не ебашит шаблонное метапрограммирование), контракты не завезли.
Самое страшное - это будет С++26 с метаклассами и рефлексией, там просто ад
Бустовские корутины я года три назад использовал, проблем не вызвало.
>Самое страшное - это будет С++26 с метаклассами и рефлексией, там просто ад
Из C++ наконец-то сделают Clay?
Что насчет чистоты кода, интересности проектов на C++, ощущение величия и значимости того, что ты делаешь?
Есть преимущества у C++ перед джавой по этим параметрам?
Стоит ли, допустим, уходить с долларовой немодной и говняной вебсферы и легаси кода на джаве на язык C++ ради того, чтобы было бодро, модно, круто, интересно? Или в C++ точно так же пенсионеры месят говно с препроцессором и гордятся переходом на C++11 в 2019 году?
REST Api - применимое слово к этому говно? Хочу делать всё как все
Не стоит.
Читаю эту годноту, всё по делу и с примерами, я правда еще ожидал увидеть какие-то общие имлементации стандартных контейнеров или хотя-бы рассказ о внутреннем устройстве, а там в основном фичи с ними.
прога срет в обычный текстовый лог, если надо сложнее - то организуется ротация логов и прочая поебота связаная с организацией процесса логирования (смотри хотя бы как организовано логирование в том же энжинх)
далее эти текстовые логи открываются тексовыми редакторами, которые умеют подхватывать обновляющийся файл (тот же вим)
и все
второй вариант - прога тупо срет в stdout/stderror, а ты в консольке уже все там все смотришь и обрабатываешь это все утилитами 50ти летней давности
Текстовый лог? Я не разбираюсь в ос, но, надеюсь, диск особо не используется? А если файловой системы в принципе нет?
Ну ты можешь в рантайме узнать что есть в enum, какие у класса есть методы, узнать в функции кто её вызывает и т.п.
никто не мешает тебе срать в файл, даже если на целевой системе нет фс
>диск особо не используется?
у тебя настолько сильная нагрузка? тогда делают более продвинутые системы логирования - отключают своп буферов, к примеру, и делают его ручками, либо вообще пишут сначала в мапу, а потом уже эту мапу скидывают куском, плюс подключают асинхронку.. вариантов оптимизации масса..
хех
все просто
идешь в технарь, учишся там пару лет, переводишся в технический вузик на кодера, три года бака, 2 года магистратура
Реально.
Я думаю, это зависит от того, что принимает твой блюпуп сигнал.
Если ты сам это регулируешь, то отыщи идентификатор комповного блютус-устройства, научись им посылать сообщения и передавай движения мыши через него.
Но я с этим не сталкивался, это только предположение.
Так-то вряд ли это по логике от тех же сокетов отличается.
Мне 24, какой технарь, лол. На РАБоту гонят уже во всю. Прям что вообще никуда не возьмут? Язык то я знаю. ДС если что.
получаешь диплом инженера со специализацией программирование, идешь работать по специальности
Не слушай студентиков даунов, иди в любую галеру. Если спросят про диплом, говори, что не брал даже, про шарагу можешь сказать, что бросил. Если им нужен диплом - беги нахуй из этой галеры, оттуда ещё совок не ушёл.
Долбоеб, причём тут совок и диплом? Точнее я знаю почему, но в любом случае диплом стоит показывать. А уж 9 оконченных классов это вообще смех, недочеловек необразованный. Не удивлюсь если он и на митинги ходит
Если он годный специалист и есть рвение, я бы его вместо многих своих коллег взял
совок-на-заводе-кун
Гуф, залогинься
(ЗВ)i=5 и
(ЗВ)(++i)=5
Делают абсолютно одно и тоже, как так?
Если да, то что лучше выбрать в качестве пет прожетка на плюсах? В шараге делал небольшой компилятор на пару тысяч строк для выдуманного императивного языка, мне понравилось, но этого мало. Также смотрю в сторону чего то связанного с играми или графикой, можно сделать демку на opengl или игрушку. Еще можно сделать эмулятор какой-нибудь старой консоли типа NES (вот конкретно с этим не работал еще, поэтому не знаю, потяну ли).
>На пет прожекты смотрят на собесах?
nop
бывает что на тех собес прискакивает челик кабанчиком, а даже и твое резюме не видел..
поэтому, кстати, рекомендуют на собес приходить с распечаткой своего резюме
конечно он годный специалист
образование 9 классов, никогда не работал до 24 лет и 2 года читал книжечки по с++
>Как работает back_inserter?
Возьми и посмотри. Алсо, https://en.cppreference.com/w/cpp/iterator/back_insert_iterator
>миллион ссылок
Сылки в конце статей - дань моде не пришей к пизде рукав. Забей на них, ничего важного не пропустишь.
>в каком порядке читать
В логической последовательности все упорядочено в менюшке слева, ориентируйся на здеся.
У тебя стереотипное мышление.
>Короче возьму qt. Там норм документация
Тебе для чего надо то? Для десктопа интерфейс проще делать на WPF каком-нибудь. Да, сишарп, но если не лезть в залупу, разницу с плюсами не почувствуешь.
А хуй наны не видел у шпаны?
Создать хедер, в нём заинклудить нужные библиотеки, а сам хедер инклудить в этих 3 файлах. Но это хуёвая идея, читать код потом невозможно. Оставь как есть, всё равно инклуды пишутся только один раз.
Нормальная идея. Можно еще precompiled headers настроить.
Работы нет.
токсичным коммьюнити
На qml гораздо проще интерфейс делать ващет, ксамл заебанный местами у биндингов например.
На джаве ты можешь писать на джаве. А так, вроде бы всегда по вакансии кресты писал, но 20-50% времени тратилось и на другие языки. Хотя возможно мне так угораздило.
скомпилируйте пожалуйста этот проект - http://itnotesblog.ru/note.php?id=272 (я пишу не на плюсах, так бы справился сам)
ну или подскажите если есть готовый аналог где можно пощупать эффекты от OpenCV с ползунками
Ой зря ты эту тему поднял...
Копай в сторону cgi. Страницы лучше хранить в виде отдельных файлов, которые нужно будет читать и отправлять клиенту (в cgi их содержимое нужно будет писать в stdout). Ещё понадобится веб-сервер, который будет на каждый запрос дёргать исполняемый файл твоего приложения.
Но так никто уже лет 15 не делает. Бек лучше писать на специально предназначенных для этого языках.
Возможно, для C++ особо упоротые даже создали свои веб-фреймворки. Может, там и годнота есть. Но вряд ли это приведёт к чему-то хорошему.
Ну вот есть бд, в ней хранятся ссылки на страницы сайта + часть страницы генерируется динамически. Мне нужно просто отсылать ну или генерировать файлы клиенту? В кьюте есть вебфреймворк, нашел еще Wt но честно говоря не хочется с ним разбираться, каким-то он уж очень мудрёным выглядит
статический контент ты будешь и так раздавать через веб-сервер, или цепочку веб-серверов когда большая нагрузка, в общем тема эта к крестам не относится
а динамический контент, который надо генерировать, можно отдавать и нативным кодом на крестах, для этого раньше либо пилили свои html шаблонизаторы либо использовали готовые либы для этого, отдаваться они будут cgi либо fastcgi расширениями веб-серверов
но щас типа веб 2.0 и подход есть другой: типа наружу с твоего бэка торчит rest api, а уже фронтендеры делают с ним магию на js; и никто тебе не мешает сделать этот rest api на крестах, к примеру, используя специально заточенную для этого библиотеку cpprestsdk
То есть по факту мне просто нужно сделать бд и апи, а остальное делают фронты? В целом звучит логично, но разве не быстрее будет генерировать страницу на сервере и отсылать готовую, чем генерить ее каким-нибудь жсом? Или перфоманс сейчас не в моде?
UPD: Узнал про web assembly который может заменить жс, так что всё заебись. Буду пилить рест апи. Анонам спасибо за ответы
1. У тебя будет http сервер, который занимается обработкой POST, GET, формированием страниц, обработкой скриптов.
2. У тебя в qt будет ещё один сервак, на каком-нибудь :8099 порте, который будет отправлять json твоему сайту, все в идеологии rest.api. Причем какой-то даже спецлибы иметь не надо, фреймворки js с джейсонами на ты яваскрипт обджект нотейшн же, а qt прекрасно умеет эти json создавать, лучше даже, чем boost (в нем почему-то любой тип будет строкой, я не понимаю почему так нахуй)
>разве не быстрее будет генерировать страницу на сервере и отсылать готовую
Тут старый добрый выбор между latency и throughput. В вебе предпочитают throughput.
Считается, что бизнес логика дольше отдачи обычной страницы, поэтому и выделяют фронт-энд (то, что показывается пользователю) и бек-энд (то, что производит действия с базами данных, что-то усердно считает и тд). Да, есть оверхед на каждый запрос, но теоретически, если один какой-то конкретный бек-энд перегружен, можно просто поднять ещё пару инстансов и уменьшится среднее время каждого запроса.
То есть вот на примере имиджборды. В базе данных хранятся некоторые статичные страницы, которые редко изменяются и лежат в кэше. Пользователь заходит на сайт - мы ему отсылаем index.html со списком борд. Этим у нас занимается один сервер. Второй сервер при нажатии на какую-то из досок формирует json на основе базы данных список тредов скажем, а дальше это отсылается и парситься фронтом/передаётся первому серверу и он формирует html. Правильная схема?
Не может, пока у него нет доступа к DOM. Когда реализуют, заменит.
Мож дрова старые, или настройки не те, или частота какая-нибудь не та.
А бесплатные варианты для студентов есть? Нам aws, azure и гугл клауд дали бесплатно, на чём-то из них можно без костылей деплойнуть крестокод чтобы он выполнялся без лишних морок?
Копай в сторону VPS. Там можно хостить что угодно, софт ставишь сам. Есть даже такие, где можно даже свой образ ОС накатить.
Бесплатно и бессрочно, конечно, такое встречается редко. Но есть пробные на несколько месяцев, там наиграться успеешь. Да и 200-300 р в месяц - это не так уж и много.
Можно туповатый вопрос? Мне выходит дали бесплатную машину, которую хостит майкрософт, а я туда могу хоть вычисления протеинов поставить, и оно будет работать пока деньги не закончатся? Я думал что необходимо написать код, а сервис будет хостить конкретно его.
Я не знаю, что у тебя за бенефиты, как у студентика, по-этому тяжело сказать. Но если можешь бесплатно создавать ВПСки - то делай так.
В моем примере - у меня ежемесячно есть халявные 50 бачей в ажуре (у меня MSDN подписка на вижуал студию, на работе купленная, в них это входит), я там хостю впску для майнкрафта и телегопрокси, в месяц сжирается бачей 40, вот и всё.
Да мне много не надо, для обучения и хостинга небольших серверов, дают мне 100 баксов при старте и всё, спасибо за ответ.
чо, глобал больше нелзья делать в плюсах?
бамп
vector<string> str;
copy(instr, end,back_inserter(str));
Как сделать, чтобы слова читались после ввода символа новой строки? А то они начинают читаться только после ctrl z
Пишу:
setCentralWidget(paintArea);
paintArea->setGeometry(0,0,300,300);
paintArea->setStyleSheet("background-color: black");
paintArea->show();
Делаю сборку, нихуя не выводится. Пустое окно. А должен появится черный квадрат в центре окна.
Дотнет быдло, ты? Хуярь глобальный контекст, кресты это не тоталитарная ОПП-параша, так что не ссы, тут так можно делать.
бамп сажей
Что значит "компонент"? Имеется в виду, что я должен написать ImageEditor::ImageEditor()
: paintArea(new PaintArea)
так?
ImageEditor наследует у QMainWindow, если что.
В итоге так и сделал, просто скомпилил и залил на виртуалку, оттуда запустил и готово. Всем спасибо за помощь
Ничего не понимаю.
А они трапиковов принласы потому, что те реально классные прогеры? Или есть другая уважамая причина?
я хз, но комменты на трубе отключили, хех
раньше они комменты отключали у видео где телки выступали с тупыми докладами и их начинали обсирать, DDD
В тех случаях, когда у тебя был ручной вызов конструктора
Если у тебя правильное строение класса, то никогда.
В общем случае, если у тебя выделение/освобождение памяти отделено от конструирования/удаления объектов.
Вектор уже упоминули, как пример.
Бамп вопросу.
Ньюфаг вкатился с парой вопросов:
1. Каковы перспективы языка? Есть ли шанс, что его доля на рынке резко упадёт через пару лет?
2. Велика ли разница между C и C++? Стоит сначала выучить C для лаб в вузе, а только потом вкатываться в плюсы?
1. Даже если сегодня внезапно появится йоба-язык который займет все ниши плюсов, то еще лет 30 нужно будет поддерживать уже написанный софт, но зарплаты по сравнению с аналогичным стеком на других языках ниже, так что сравнивай по своему городу.
2. Часто вижу что рекомендуют сначала учить С, а потом переходить к плюсам, но одни говорят одно, другие другое. Если время есть то в принципе можно, но тут пусть более опытные ответят
>Каковы перспективы языка?
В разработке новых стандартов активно участвуют крупные разработчики => значит у них есть планы на будущее крестов.
>доля на рынке
Ты на бирже собрался играт или што?
>Велика ли разница между C и C++?
Огромна
>Стоит сначала выучить C
Без знания Си в любом случае не обойтись.
1. В фейсбук\гугл\амазон\нетфликс\микрософт крестовики всегда будут нужны. То, что крестам пиздец уже пару десятков лет точно все квохчат, однако они живее всех живых. Язык активно развивается. Через пару лет ничего в этом плане не изменится
2. Если ты студентик и думаешь во что вкатываться - вкатывайся в вебговно.
>фейсбук\гугл\амазон\нетфликс\микрософт крестовики всегда будут нужны
хуйня
веб обезьян туда надо на несколько порядков больше
даже и в майкрософт тот же, внезапно
в майкрософт еще много на шарпе кодят, студентосов что туда приходят вджобывать пересаживают с крестов на шарп и вперед, пахай
твой тезис никак не противоречит моему
Гугли smart iterators. Это хрень типа back_inserter, которая не просто передвигается по контейнеру, а может делать что угодно, например считывать ввод или докладывать о тебе товарищу майору по сети.
Опять я, аноны которые работали с азурой подскажите: скомпилил для теста програмку простого сервер, запускаю через консоль на сайте эхо-бот для телеги, всё работает как надо, но через 15 минут просто перестаёт отвечать на запросы. Залил вторую програмку которая дебажит таймер каждые 5 секунд, судя по всему не умирает, так что проблема где-то в соединении. Может азура блочить сеть для виртуалки? Нашел такое только для WebApp
Починил запуская программу не через онлайн консоль, а через Run Shell Script
Раскури, что такое ui там и нахуя там агрегация.
Как поймешь - больше таких вопросов возникать не будет, сможешь даже наследовать.
Зачем спрашивать то, что в справочниках или на стековерфлоу найти можно?
Где вопросы по дизайну, архитектуре, по бусту, по алгоритмам, сплошные какие-то Кьютопроблемы.
Что может быть проще формошлёпства на КуТэ, и с этим справиться не могут.
У буста есть хелп, остальное дженерик программирование а не кресты.
хех, на реддите тоже порезали комменты под видео
видно из за трапика вначале видео
:D
>>> Его никак не получится выучить за 21 день, ну вот совсем никак.
Ложь-пиздежь и провокация. C++ легко учится за 21 день по той самой книге.
Да ну, не может быть. Я столько в провинции получаю.
Что?
https://www.youtube.com/watch?v=u_ij0YNkFUs
140
Почему он Страуструпа назвал "Струстрап"?
Ну конкретно по кутям достаточно сложно нагуглить как реализовать определённый элемент интерфейса, тот же TreeView только в первых контролсах, которые депрекейтнут в следующих обновах, вот и спрашивают как костылить самому. А с остальным в принципе согласен, но без таких вопросов тред то особо и не нужен, будут два сеньора сидеть друг с другом общаться
Линкуй статически
есть консоль разработчика отдельно, где ты можешь поделать все, что считаешь нужным.
В 2019 апдейт 3 который скоро выйдет - консоль будет внутри студии
здорово. Жаль правда, что это юзлесс.
Хороший вариант для вката?
>>77088
имхо, если ты задаешь такие вопрос, то скорей всего тебе лучше надо прочитать K&R сначала с выполнением всех упражнений
второе, если ты готов отбашлять немного бабла, то лучше всего 4 курса по с++ от яндекса на курсери, они охуенные, лучшие курсы на русском по крестам на данный момент
курс на степик - это такой вариант для совсем нищих, хотя и тоже относительно неплохой
Пиздец. Были бы у Бьерна волосы, он бы полысел еще раз после такого.
Ебать там тонко в коментах, моча даже не заметила.
Если жилье оплачивают и всячески помогают в релокации, то езжай. Снимать жилье 30-40к, транспорт 5-10к, еда дороже. Вот и считай. Если хотя бы 50-60к надбавки будет, то езжай, если нет, то думаю не стоит.
Что это за транспорт в ДС за 10к? 2500 стоит безлимит на месяц на общественный транспорт
Такси из бара, которое ты будешь вызывать каждый день, потому что жизнь в ДС такая тоскливая, что выход один - алкоголизм
Код сюда брось и объясни по-русски, что собираешься сделать
это самая базовая книга
имхо, начинать нужно с нее
ебашишь все упраждения обязательно
а потом уже начинаешь грызть кресты
лучший способ сейчас - это 4 курса яндекса на курсере
после всего этого можно считать что ты хотя бы понял что-то в крестах, самое базовое
говорю с высоты своих прожитых лет
Я хочу добиться уровня знаний, достаточного для помощи в разработке опенсорса, написание своих небольших программок и драйверов, и работы в игровых движках.
Рокет сайнс?
Аригато!
Простенький п2п мессенжер денег на сервера нет, расписание для пар вуза с фичами которых нет у аналогичных приложений (может видел я тут раньше советов спрашивал), шахматы со всеми правилами, и по мелочи еще пару, в основном всё простенькое, ради обучения какой-то технологии. Если посоветуете что-то годное и я смогу за год его написать то буду премного благодарен
Ну хз, мне не зашла, слишком много воды, функции только под конец книги изучают, лол. Грубо говоря переменные, массивы, указатели, функции растянуты на 1к страниц, тоже самое можно навернуть за полчаса на ютубе.
> Если посоветуете что-то годное и я смогу за год его написать то буду премного благодарен
Поиск ошибок оформления госта в работах (курсовые, дипломные). Ну всякие отступы, интервалы и тд.
k&r 300 страниц книга, причем без приложений - 150 страниц
это апофеоз лаконичности и краткости вообще то
Компилятор выдает гигантскую ошибку из за этой строки. h multiset, v vector
В чем проблема? Если использовать inserter то все работает.
А где у мультисета по твоему бек?
Как опытный говорю: учить C вначале не надо. Учи сразу C++
Для этого ведь надо знать все эти работы, а я диплом и не писал еще. Ну попробую, если там не тысячи правил то может напишу
Работы знать не нужно.
Обычно преподы дают некую методичку\файл по оформлению работ. Там всё прописано со ссылками.
> пользоваться стл, вместо написания своих собственных реализаций, более подходящих под конкретный случай
Просто умри
while(cin >> w)
++word[w];
while(cin >> w){
auto ret = word.insert({w,1});
if(!ret.second)
++ret.first->second;
Прав.
Насколько я разумею, у современного стл есть только один большой изъян - это аллокация памяти. Поэтому писать свои велосипеды вне этого контекста - суета и томление духа.
Вон EA, например, давно уже хер положили на свою EA STL.
Ты вектор то корректный напишешь, с перемещением и гарантией корректности для исключений, писатель?
> писать собственные реализации из говна и палок, ничего не зная о собственной операционной системе, вместо того, чтобы пользоваться готовым инструментом от знающий людей.
Бля, я понял что у меня недостаточно знаний чтобы написать то что я задумал. Можете посоветовать что-то почитать/посмотреть об архитектуре сетевых приложений? Танненбаума по сетям читал, но там немного не та инфа что мне нужна.
Rfc почитай
Потому что Qt5Core, Qt5Gui, QtWidgets, например, внутри себя содержат код всех классов, описанных в этих модулях, и поверь, их там дохуя.
Эта проблема описывается двумя аспектами
1. Шинда ебанутая, в которой всё по принципу "23 копии одного и того же, но зато всё свое ношу с собой". В прыщах Qt с системой поставляется, и кроме исполняемого там ничего вообще не нужно.
2. Кьют - монстр, что пиздец. Всё на все случаи жизни. По этой причине модули дохуя весят, и соответсвенно их бинари.
Пользуйся советом другого анона - линкуй статикой, тогда возьмешь только то, что реально используется.
Это не оборачивание.
Это директива экспорта.
Пишешь его только в декларации, в hpp файле. В cpp писать не нужно.
Только в тех файлах, что инклудишь.
Не забывай - там где помечены функции как extern "C", нельзя ничего плюсового использовать. Ибо потом в чисто сишный проект не подрубишь, Си о плюсах не знает.
А я этого анона поддвачну. STL создана быть простой и надёжной, а не производительной. А заточка под конкретный случай -- это как раз то, для чего и нужны плюсы. Часто бывает, что нужно хранить в контейнере тривиальные типы, часто ещё известен характер доступа и так далее. В любом случае, информации куда больше, и можно писать контейнеры с минимальным функционалом, которые могут оказаться во много раз быстрее стандартных решений. У меня так валяются тривиальный вектор и хэшмап на реаллоках.
>линкуй статикой, тогда возьмешь только то, что реально используется.
А разве линкер не будет библиотеки целиком цеплять?
Это значит, что все _используемые_ символы будут в одном бинарнике, т.е. не будет необходимости поставлять с приложением библиотеки
не верьте этому сученку
он наебашил кривой хешмап с коллизиями, никак его не тестировал, тупо замерил скорость вставки в тривиальных случаях, и такой: "ЭЭЭ я пиздатый, а разрабы stl - дауны, DDD"
стался с ним пару месяцев назад, но ему ничего не доказать, непробиваемый
Так пусть пруфанет тестами на 100 000 элементов тогда посмотрим кто прав а кто нет.
А, понял, это без дллок, да? Получается, что я всю жизнь линкую статически, т.к. с дллками никогда не имел дела. Я многое потерял?
Скорее всего ты через ide запускал, которая настраивает окружение и пути к библиотекам.
Или не использовал библиотеки вообще
Зависит от библиотек, но обычно это что-то вроде "window hints", "window mode", "window flags".
Захват и перемещение - это нужно обрабатывать события мыши.
Они реализованы аппаратно.
В памяти или регистрах хранятся байты, а в них - биты. На уровне машинного кода можно работать с группами байтов строго определённых размеров, например 1, 2, 4 или 8 байт. Ещё над ними определены арифметические и другие операции, которые тоже реализованы аппаратно.
А высокоуровневые языки просто обращаются ко всему этому и вводят свои обозначения, вроде int или char.
Потому-что почти везде стек размером в 1мб, редко где больше. Если ты хеллоуворд пишешь то может этого и хватит, иначе пиши нормальный код.
С таким же успехом можно спросить почему кэш процессора всего пару килобайт а не 16гб.
Похоже, ты не понимаешь, как работает стек.
Стек на каждый процесс свой. Если каждому процессу давать по гигу, представь, что будет.
Добавлю что даже если у тебя овердохуя памяти, то найти 1гб или сколько там последовательно лежащей памяти не всегда является возможным, а если и возможно то это будет нести такие накладные расходы что ты охуеешь.
Потому что иначе он бы не был стеком и не обрабатывал данные быстрее, чем куча.
return hash<string>()(s.isbn());
s.isbn() возвращает string.
В частности не понятно, что за пустые скобки после hash<string>
Спасибо
Programming Windows, Charles Petzold
Windows via C/C++, Jeffrey Richter
Windows System Programming, Johnson Hart
>эти данные обрабатывает чем в куче.
Уверен? И те и те просто указывают на разные зоны памяти, а как эти зоны отображены на физическую одной ос известно.
Какие же плюсаны говноеды, прости божечки.
Как можно этим говном заниматься в 2019, когда есть java/scala/rust/go и FFI?
мимо-оп-1x-тредов
Одно слово - перформанс. Оно отсекает java, scala, kotlin, python, js и кучу других языков. Да, иногда важна не скорость написания кода, а скорость выполнения.
Go - недостаточно зрелый и сейчас по возможностям это явный шаг назад. Инструментов мало, библиотек мало, нужных конструкций в языке мало.
Rust и D - вообще шило на было.
Будут ещё альтернативы? Убийцы крестов до сих пор нет и пока не предвидится.
Что такое перформанс?
Забыл добавить, что в основном пишу на питоне и жабе. Это на случай, если тебе моё мнение кажется предвзятым.
Ну, это не всегда верно из-за моды на self-hosting. Жаба - да, на крестах.
Одно слово - предварительная оптимизация.
Так вышло, что в одной компании, где я работал, писали две версии одного продукта на джаве и на плюсах. Я бывший плюсан, но перешел на джаву. 4 человека за полтора года написали тот же функционал, что 8 крестух за 4 года. Когда начали бенчмаркать, джава версия на тяжелых сценариях отставала на 15%. После небольших оптимизаций, отставание стало 5%.
Все это манясказки про перфоманс. Вот памяти джава жрет дохуя - это да. Но в любой ситуации можно либо заоптимайзить горячие участки кода прямо в джаве (в том числе и по памяти), либо вынести в плюсы/c/rust через FFI.
Вот что на языках с gc сложно писать - так это latency critical сервисы. Но опять же - rust, либо ffi.
Писать продукт целиком на плюсах в 2019 году - это или легаси или аутизм.
> 4 человека за полтора года написали тот же функционал, что 8 крестух за 4 года
Я конечно понимаю, что с пастой говорю, но написать продукт с нуля != переписать на другой язык
>>78678
Вы ебанулись, какая паста?
>написать продукт с нуля != переписать на другой язык
Команды между собой не общались в виду религиозных предпочтений крестанов. Оттуда ничего не заимствовали. Алсо плюсаны сами занимались переписыванием с нуля старой версии того же продукта. Так что аргумент мимо кассы.
И вообще ты пропустил суть моего сообщения - джаву совсем не сложно заоптимайзить до плюсовой скорости, по памяти сложнее, но как минимум можно избавиться от неприличного жранья.
Потому что latency critical, маня. GC никто не отменял.
Вы тут все такие нубы, что ли? Что за тупые вопросы.
Только ты забыл суть джавы, джава это как виртуальная машина которая исполняет спецефический код. Виртуалка никогда не будет быстрее готового ехе файла.
Лолшто. Во-первых схуяли не будет, во-вторых в некоторых кейсах может даже обгонять. Слышал про profile-guided optimization?
Просто не надо на крестах писать такой софт, который можно написать и на других языках. Кресты нужны там, где без никак -- low latency или системщина. А бэкенд для интернет-магазина можно и на питоне сделать.
дурачок несет чушь. Джава у него быстрая, как кресты. А питон быстрый, как ассемблер, ага
Так я и спрашиваю, какую библиотеку выбрать под это дело, даже не знаю с чего начать, в винапи не хочу углубляться.
Смотря что тебе нужно.
Если просто рисовать 2D-графику, хватит SFML или SDL. Здесь и белый квадрат, и рамки можно скрыть.
Если нужен сложный гуй со всеми возможными кнопками, событиями и виджетами, то бери Qt, там тоже можно настроить всё, что хочешь. Можно всё то же, что можно в двух предыдущих.
> Писать продукт целиком на плюсах в 2019 году - это или легаси или аутизм
Лол. Найс у тебя выводы по результатам собственного опыта работы в ООО Галера #1, небось вы там на СИ с классами писали, а не на современном С++. Стандарты хоть откройте, почитайте, легаси блять.
Секта свидетелей нового стандарта? Модули заюзал уже, говноед? Еще небось собираешь cmake'ом свое говно в Galera LTD
Я собираю свои божественные проекты sbt и cargo, а ты маня в 2к19 до сих пор парсишь хедеры
Имплаинг у этого говна не С++ под капотом. Тебе напомнить как твоя джава работает?
И шо? Я не ухожу в отрицание как местные фанатики
Какая разница, что там под капотом? Пиши тогда на ассемблере, зачем тебе C++. Это если ты аутист и не понимаешь, что уровни абстракции – благо.
Имплаинг у С++ ассемблер под капотом, лол. Тут то ты и спалилась, джаваблядь. Иди фундаментальные вещи учи, потом с дядями спорить будешь.
Каргоребенок, просвети же нас, что там у C++ под капотом. Божья помощь? Или швитой перфонманс? Или все же закодированный ассемблер?
Ты же в курсе, что джаву тоже можно компилить ahead of time? А C++ можно компилить just in time? И компиляторы C++ так же, как и javac, создают «богомерзкий»(в твоем представлении) IR в процессе своей работы?
А еще твой охуенный бинарничек helloworld, скомпиленный из святого C++ кода, нельзя запустить без массивной поддержки со стороны операционной системы, которая, о боже, не написана на этом языке богов под названием C++.
А потом это все запускается на процессоре, который внезапно не на плюсах написан, а на verilog и vhdl. Как они посмели создавать настолько производительные вычислительные устройства без участия C++!
>verilog
>vhdl
>a Hardware Description Language; a textual format for describing electronic circuits and systems. Applied to electronic design, Verilog is intended to be used for verification through simulation, for timing analysis, for test analysis (testability analysis and fault grading) and for logic synthesis.
Это же языки для описания чипов ты че
Сразу видно что ты низкоквалифицированный маняфантазер, свалил в кучу никак не связанные между собой вещи. Я вижу ты умеешь выхватывать рандомные фразы и модные слова из вики, думаю тебе не составит труда самому взять и загуглить ответы на вопросы.
>А еще твой охуенный бинарничек helloworld, скомпиленный из святого C++ кода, нельзя запустить без массивной поддержки со стороны операционной системы, которая, о боже, не написана на этом языке богов под названием C++.
Всем офисом смеялись. Да, никто ничего на плюсах не пишет, и у нас тоже ОС написана не на плюсах.
Лол, а что там по-твоему, нюфаня? С каких пор процессоры стали выполнять C++ код?
gcc -S main.cpp
А это что, по-твоему? Это язык ассемблера, в который gcc компилирует твой исходный код перед тем, как передать его ассемблеру as для получения машинного (объектного) кода.
да ты же ZHIRNIY!!
А с каких пор чипы у нас не являются алгоритмами? Чип - это обычный конечный автомат.
>>78947
Специально для дауна-тебя я написал «закодированный ассемблер»
>>78838
> Да, никто ничего на плюсах не пишет, и у нас тоже ОС написана не на плюсах
Во-первых пишут и много (к сожалению), во-вторых ОС и на джаве можно писать, но нормальные люди делают это на C, в-третьих мой тезис в том, что C++ мир не ограничивается, C++ - плохой язык по многим критериям и в большинстве случаев на нем что-либо писать не стоит. Причем, ситуаций, где на плюсах все же стоит писать, много меньше, чем считают большинство крестух.
Причем здесь ассемблерный листинг сгенерированный компилятором и работа под капотом? Какую работу под капотом выполняет ассемблер? Процессор выполняет не ассемблерный, не объектный, а машинный код.
>А еще твой охуенный бинарничек helloworld, скомпиленный из святого C++ кода, нельзя запустить без массивной поддержки со стороны операционной системы, которая, о боже, не написана на этом языке богов под названием C++.
можно, сладенький
сходи, послушай
https://cppconf-piter.ru/2019/spb/talks/6qg8fm0kyjee4cqoiv1rda/
ну или в гугл c++ bare metal
А, то есть на С нормально, а на С++ нет? Типичный хейтер экей джавадебил. Все главные оси винда, линукс и макос написаны на С, только потому, что крестов как таковых просто не было, был С с классами. Естественно ядро никто переписывать не будет, но все новые компоненты ОС обычно пишутся на С++.
>>79028
Тсссс, не пали.Пусть думает, что все кофеваркина джаве работают, а С++ так не может! У него рантайм тяжелый, который конечно же нельзя выбросить! Только на винде все запускается, только на винде!
>человека за полтора года написали тот же функционал, что 8 крестух за 4 года.
Объясните мне, для наемного работника какая нахуй в пизду разница?
Какой бы эффективный инструмент ты не юзал, у твоего работодателя все равно всегда цель одна - выжать тебя до капли.
> Все главные оси винда, линукс и макос написаны на С, только потому, что крестов как таковых просто не было, был С с классами
В ядре ООП (или что ты там от плюсов хотел) нахуй не нужен, он перегружен и разворачивается в дерьмище. C с struct хватает. А всякие окошечки, гуи, какие-нибудь компоненты ОС где память, производительность не нужны можно писать на чем хочешь.
Хватит уже из пальца высасывать и подменять понятия. Сборщик и язык ассемблера это не одно и тоже. Современные компиляторы могут исключать этот пункт вообще, листинг генерируется исключительно для удобства.
> Современные компиляторы могут исключать этот пункт вообще
Где об этом прочитать? Могут это значит что они так делают или как? Насколько современные?
> Step Two: Compilation & Assembly
> The next stage of compilation in C++ is very similar to what happens in C. The compiler takes each output from the preprocessor and creates an object file from it in two steps.
>
> First, it converts the pure C++ code (without any # directives) into assembly code. Assembly code is binary code that we can read.
>
> Step 3: Assembly
> Next, the assembler converts the assembly code into bit code, line by line. The output of this stage is a binary file in format COFF, ELF, a.out and similar. You can always stop compiling at this point, which is a useful feature since you can compile each code separately.
Научился.
Сейчас стадии примерно такие:
1. препроцессор препроцессит
2. лексер=>парсер=>абстрактное синтаксическое дерево. На этом этапе реализуется синтаксический сахар.
3. Из AST генерируется IR-код (данные которыми общаются между собой фронтэнд и бэкенд компилятора). Это тоже по сути дерево. Если программист попросит, можно выдать текстовое представление IR-кода
4. К IR применяются оптимизации - разного рода преобразования ветвей дерева. После оптимизаций можно получить опять текстовое представление
5. Из IR напрямую генерится объектный код ЛИБО если программист попросит - его текстовое представление. Тратить время на создание текстовой портянки, когда компиляция занимает часы - дорогое удовольствие.
Линковка, скорее всего, тоже производится на уровне IR, я в этом не разбирался.
Пример самого современно компилятора си-семьи - clang/llvm. С gcc все сложнее, потому что он древний и в нем куча легаси консольных команд.
честно говоря, не вижу в этом никакой проблемы. И да, я последний год парсю хедеры
>я в этом не разбирался
Да мы уже поняли, IR у него без ассемблера исполняется, охуеть.
Всем остальным пидорам, которые этому дауну отвечают желаю выкатиться из айти, если этот семен сам себе не написывает канеш.
>честно говоря, не вижу в этом никакой проблемы. И да, я последний год ем говно
>>79041
>Естественно ядро никто переписывать не будет, но все новые компоненты ОС обычно пишутся на С++
Тут ты прав. Этот мой аргумент - инвалид:
>во-вторых ОС и на джаве можно писать, но нормальные люди делают это на C
Собственно, остальные аргументы никто не отменял:
>мой тезис в том, что C++ мир не ограничивается, C++ - плохой язык по многим критериям и в большинстве случаев на нем что-либо писать не стоит. Причем, ситуаций, где на плюсах все же стоит писать, много меньше, чем считают большинство крестух
Алсо не понял, вы всерьез сретесь на счет того, что процессор исполняет не ассемблер, а машинные коды? Пиздец просто
Ебанатский спор про машинные коды двачую, а про сихуйцы че против имеешь, какой язык дает норм скорость, возможность ебать память и достаточно абстракций?
Ржавую залупу с пересиливанием борроу чекера не предлагать, такая же хуйня, как и котлин.
После многих лет разработки на плюсах у меня на расте с борроу чекером проблем совсем не возникает. Уж плюсовику жаловаться на борроу чекеры как-то совсем не комильфо.
>какой язык дает норм скорость, возможность ебать память и достаточно абстракций
Только rust, но он только на ноги становится. Другое дело, что ультимативная скорость и потребление памяти нужны очень не всегда, особенно с учетом потенциального превозмогания C++.
Отсюда тезис:
>Писать продукт целиком на плюсах в 2019 году - это или легаси или аутизм
>Да мы уже поняли, IR у него без ассемблера исполняется, охуеть.
шланг ебашит прямо в машкоды, но может и асм код сгенерить который уже ассемблером целевой машины в объектник буде перегнан
гсс ебашит асм который в as скармливает, но может уже сейчас и тоже напрямую в машкоды ебашить научился, я не в курсе этого
в общем и так и так можно
генерит само собой
а потом генерит из ir объектники с машкодами
ну или может сгенерить асм код чтобы потом он ассемблером целевой платформы скомпилился в объектник
но второе нихуя не удобно тк замедляет компиляцию
это если вкратце говорить
Ты реально такой тупой? IR у него исполняется. Жопой воротишь и искажаешь понятия из-за своей некомпетентности.
Пользуюсь этим хэшмапом сам. Тестил на куче входных данных, прирост производительности раза в 4 в среднем. Размеры данных до 10 миллионов вхождений, коллизий процентов 30, но в моей задаче лучше быстрая хэш-функция, чем меньше коллизий. Мапу юзая в основном для вставки и поиска.
о, да детка
стандартный хешмап сначала 15 лет в бусте обкатывали, потом 5 лет в стандарт принимали
при этом трудились десятки людей, как с cs бэкграундом, так и практикующие se разрабы
а тут васян взял и написал на коленке хешмап и на вставку пиздатый и на поиск пиздатый и вообще охуенный
иди ты подальше
самое хуевое что может случится - это унаследовать код от таких ублюдков, которые пишут свои необоснованные велосипеды, функционал которых дублирует возможности стандартной библиотеки
>Не смог настроить стандартный unordered_map
>Наговнокодил свой вариант
>Мам, у меня быстрее, слышишь?
Вангую, что ты просто хешфункцию сменил. Нахуя надо было писать свою хештаблицу для этого? И что там принципиально вообще можно ускорить? Для тебя, наверное, будет открытием, но все оптимизированные хешмапы в серьезных языках работают с +/- одинаковой скоростью, потому что упираются в железо
Тестил, очевидно, на одинаковых хэшфункциях, от них ускорение не зависело
Стандартный -- он обобщённый, на все случаи жизни, понимаешь? Если бы в стандартной библиотеке был хэшмап для тривиальных типов, я бы пользовался им. А так, у меня два жирных куска памяти, с правильной хэш-функцией кэши моего процессора счастливы. При доступе без промаха у меня происходит одно разыменовывание, в стндартном контейнере два. И так далее, он тупо устроен принципиально по-другому, работает только на моей задаче, и только поэтому быстрее.
Так что конкретно ты хранишь и что поменял в реализации таблицы? Структуру бакета? Аллокатор?
Я же написал. У меня бакетов как таковых нет, есть большой кусок памяти основной и специальная структура данных для хранения коллизий, тоже одним куском. Хуярю реаллок, не вызываю пустых конструкторов и деструкторов (только копирование, но это для тривиального типа memcpy). Коллизии, получается, рядышком лежат.
Можно написать мапу с открытой адресацией, она будет быстрее в среднем (в STL закрытая адресация), но этот даунич врятли знает такие тонкости
Ты ебанёшься отлаживать свой велосипед с этой твоей умной открытой адресацией. Теоретик хуев, у тебя тупая и простая оптимизация перед глазами, а ты лезешь в дебри.
>оптимизированные хешмапы в серьезных языках работают с +/- одинаковой скоростью, потому что упираются в железо
нихуя!
у него в 4 раза быстрей все работает )_)
мы уже срались с ним в прошлых тредах, он даже свой код кидал, там такой пиздец, я ебу
Ты какой-то припёзднутый. Я сюда пока ничего не кидал. Можешь почитать мою структурку данных для хранения коллизий, она правда непричёсанная.
https://pastebin.com/Tkvb2ktb
о, дак ты оказывается не первый
в прошлых тредах тут тоже был персонаж который свой хешмап написал, а потом до усрачки утверждал, что у него лучше чем в стандарте ))
бля, теперь понимаю за что крестовиков недолюбливают - велосипедостроение у них в крови
Я не утверждаю, что мой лучше, алло! Мой хэшмап вообще не поддерживает нетривиальные типы, ты это понимаешь? Ты точно читаешь то, что я пишу, или лишь показать, какой ты умный?
Велосипедостроение -- это вообще лучшее, что может произойти с кодером, если это происходит в процессе обучения. Если на работе, то это тяжёлая работа и большая ответственность. Поди объясни начальнику, какого хуя ты не взял готовый контейнер, а проебал неделю рабочего времени на написание своего. Результат может быть положительным, а можно и хуйца соснуть. Мне коллега решительно не верил, когда я взялся писать хэшмап. Хотел мне по губам провести шершавым, накачал всяких google_dense_map-ов и уселся тестить. Ничё, на моей конкретной задаче мой конкретный мап спокойно давал всем пососать. Не потому, что он там лучше всех остальных, а потому, что он заточен под конкретный таск. Это позволяет вводить охуенные предположения при его проектировании, и всё.
эй, по ссылке вообще не хешмап, о чем вообще речь? ты шутишь чтоли?
ты организовал доступ по целочисленному индексу в разреженном массиве
>ты организовал доступ по целочисленному индексу в разреженном массиве
хотя нет, там даже еще тупее сделано
>какого хуя ты не взял готовый контейнер, а проебал неделю рабочего времени на написание своего
и, правда, какого хуя..
Ты читаешь то, что я пишу, или нет? Это хуета для хранения коллизий.
ты понимаешь что следующий кодер, который сядет на сопровождение твоего велосипеда, который доедет до продакшена, буде тебя проклинать?
Да, мапу стесняюсь, там код похуже. Но я в принципе могу скинуть на потестить, не жалко.
Мне подают меш, объёмами, по очереди. Один объём -- это вершины (трёхмерные вектора), грани и рёбра (индексами). Мапами срезаю дубликаты плюс собираю границу меша, чтоб потом рисовать.
Если кодеру не захочется трогать мой мап, он его заменит на стандартный. Интерфейсы абсолютно совпадают, как и эффект.
лучше пиши про юзкейс, в котором unordered_map не подошел по скорости
деанонить и срать на тебя rl никто не буде, это в интернете мы храбрые ))
напоминаю, что комитет оче долго сопротивлялся включению мапы на хешах в стандарт, потому что вообще считали что скорости мапы на деревьях достаточно для подавляющего большинства применений этой структуры..
>коллизии рядом лежат
уйди нахуй а
коллизия это когда хеш получился такой же для двух разных элементов, знаешь слово такое пиндосское есть collision
Под мои юзкейсы std::unordered_map подходит отлично (сильно лучше std::map), но внутри него происходило то, без чего можно было обойтись -- лишние уровни косвенности, короче. Ну я их и вырезал, всё.
Да я сделал самое криминальное из всего, что только мог -- упрекнул их в некомпетентности и лени. Видал, как крышу сорвало?
Ты хотел сказать «жирно набросил на вентилятор про STL, основываясь на очень специфичном кейсе в обработке физики или рендеринге»?
Я вообще не упрекал STL, она по моему мнению шикарно сделана. Я просто внёс тезис по поводу оптимизации на специфичном кейсе, а меня попытались обоссать. Получилось или нет, пусть решают зрители.
>без чего можно было обойтись -- лишние уровни косвенности
это какие такие уровни?
по тому коду что ты запостил, видно всего лишь что ты выделеление памяти делаешь через маллок (и это в крестах в 19 году), держишь все одним куском памяти и делаешь реаллок - техника аж пятидесятилетней давности..
в то время как в стандартных контейнерах работа с памятью вынесена в аллокаторы и интенсивно используется placement new
в новых стандартах работу с контейнерами можно сделать еще быстрее за счет того что они поддерживают перемещающие операции, теперь нет необходимости в трюках с указателями
правда заключается в том, что в стандартной библиотеке контейнеры неинтрузитивные
альтернативный подход - сделать интрузитивный контейнер (какие любили делать на голой сишке), типа boost::intrusive и типа можно выгрызть чутка в производительности еще (за счет удобства и универсальности)
Всё так, ты прав. Я просто выигрываю за счёт того, что у моих объектов не надо вызывать T(). Если мне не изменяет память, то классическая реализация std::unordered_map -- это вектор односвязных списков. Получается, для доступа к элементу (если сразу попали, без коллизий) надо сделать два разыменовывания. А можно нахер вырезать лишнее разыменовывание, плюс выиграть по локальности в памяти. Хотя, я могу чего-то не знать, и эти черти как-то борются с подобными проблемами.
А то я не искал! Конкретно того, что мне было нужно, я не нашёл. А опыт велосипедирования у меня положительный, поэтому взял и сделал. Я счастлив, начальник счастлив, юзер счастлив, двачеры недовольны.
>Я просто выигрываю за счёт того, что у моих объектов не надо вызывать T()
тыж писал что у тебя хешмап типо оптимизировал под примитивыные типы? при чем здесь конструкторы?
Он не просто оптимизирован под примитивные типы, он не работает с нетривиальными в принципе.
>Если мне не изменяет память, то классическая реализация std::unordered_map -- это вектор односвязных списков. ну, там нету std::vector и std::list внутри, не надо понимать буквально
>Получается, для доступа к элементу (если сразу попали, без коллизий) надо сделать два разыменовывания.
не очень понимаю, как в своей внутренней структуре ты от этого смог избавится
>Если мне не изменяет память, то классическая реализация std::unordered_map -- это вектор односвязных списков.
ну, там нету std::vector и std::list внутри, не надо понимать буквально
>Получается, для доступа к элементу (если сразу попали, без коллизий) надо сделать два разыменовывания.
не очень понимаю, как в своей внутренней структуре ты от этого смог избавится
ну дак и при чем здесь конструкторы? стандартные контейнеры тоже никаких конструторов не вызывают для примитивных типов
страуструпу он поэтому не нравился, он бурчал что типа прикладные кодеры его не поймут..
Грубо говоря, односвязные списки у меня и остались, но оно всё хранится чуть хитрее.
У меня есть основной кусок памяти для нод -- это пара ключ-значение и индекс следующего элемента с совпадающим хэшом. и ещё флажок (в жопу). Совпадающие элементы хранятся вон в том bookshelf-е, что я кидал. Ну и всё, доступ идёт по хэшу в одно разыменовывание сразу, куда надо. Потом шагает по коллизиям, они ещё могут и в одном кэшлайне оказаться (это как работу с контейнером организуешь).
в смысле не подстравивается? unordered_map вообще то шаблон, хех, не стоит об этом забывать
Бля, код есть, бери тестируй.
Не, я на небольшую контору работаю.
не, это не я, лол. Я, конечно, люблю велосипеды, но переизобретать STL - это оверкилл. Тем более, большая часть тормозов в моем проекте - это i\o.
Алсо, уже 350к, а не 320к.
ну давай объясни хуйланчик
или нет, давай ты высрешь свое обычное
ну оооок и пойдешь драить сортир потому что это потолок твоих умственных способностей
Ты не понял, что значит "коллизии рядом лежат"? В самом деле, я изъяснился хуёво, но вроде понятно, о чём я. Если ты даун, то давай объясню. Представь, что в твоих данных по хэшу никаких коллизий нет. Тогда оно всё может в одном массиве лежать, прям как в векторе, и всё заебись. А теперь представь, что ты ещё немного навалил туда. Вот это самое "немного", у которого хэши пересекаются (collide, правда?) с уже существующими, я сгружаю в отдельную структуру данных и коротко обзываю "коллизиями".
Я чет не пойму, лето вроде кончилось, а вот такие школьные дебилы все равно лезут.
Окей, переписал функционал, который существует в STL.
Алсо, даже в виндовых кернел драйверах есть убогие сишные мапы, т.е. даже в таком аду не надо изобретать свои велосипеды. Максимум - обернуть в крестокод.
>>80058
Ежегодное ревью, хорошо работаю типа. Вот и бампнули.
Это еще только зарплату считаю, так то мне еще акции капают, с которых еще тридцаточка в месяц стабильно выходит :3
Такой хуеты, что я написал, в STL нет.
пидарас выкатывайся из айти
>немножко навалил и появились коллизии
>сую в отдельную структуру
это структура называется бакет, а ты жирнишь и изобретаешь велосипед
Я ваще охуеваю с вас, любители не подумать головой и спиздануть хуйню. Я ещё раз спрошу, ты точно понимаешь, о чём речь? Ты в проблеме разобрался прежде, чем пиздеть?
С утра собираю, не переживай за меня.
Странный вопрос, но я могу сказать, что я последнее некоторое время не просто С++ программист. Занимаюсь кучей всякой херни, начиная от автотестов\CI, заканчивая профилированием всякой параши, сменой билд системы, и прочие странные задачи. Но, на крестах иногда пописываю, просто щас очень много инфраструктурных задач.
Симейк + конан или вцпкг, думаем пока. С вцпкг запилили полноценный кроссплатформенный пруф оф концепт рабочий.
Щас все на MSBuild, при всей моей извращенной к нему любви, там где начинается кроссплатформа - там MSBuild заканчивается. А кроссплатформа началась.
Вы там только инфраструктурное говно пилите или есть что повеселее? Deep learning проекты есть?
Вы bazel-то рассматривали вообще? Переходить с msbuild и пилить концепты(!) на vcpkg, когда bazel подружили с vc++ еще год назад - это немного странно
Ты сидел и отслеживал, пока час пройдет и она кончится, чтобы меня потом обоссать? Неужели тебя так задело?
Ни один двачер так и не потестил мапу, хотя вскукареков было немеряно. Я могу конечно тупые тесты для вас написать, мне не лень.
насколько я понял твой юз кейс ты вообще пехаешь в свой "хэшмап" тупо ради удаления дубликатов а потом делаешь обход всех элементов? это оче странное использование хешмапа
мы дохуя всего пилим, сейчас там просто надо инфраструктуру сборки менять, а до этого я контрибутил крестами. Моя команда вполне продуктовая.
Диплернинг есть конечно, просто не у меня в бизнесюните. В самом московском офисе его дохера.
>>80101
Нет, базель не рассматривал даже. У нас небольшие проекты, симейка, кмк, будет достаточно. Если упремся где-то в симейк - ну, посмотрю и на базель конеш. У меня полная свобода действий в этом плане. Что хочу, то и ворочу.
тестить на каком конкретно юзкейсе?
там даже вопрос выбора std::map и std::unordered_map всегда стоит, зачастую классический map на деревьях оказывается выгодней хешмапа
>Диплернинг есть конечно, просто не у меня в бизнесюните. В самом московском офисе его дохера.
Пили инсайды. Что с зарплатами?
нафиг тебе менеджер зависимостей
дзен заключается что в случае крестов нужно строить ci/cd без него
Одно дело попиздеть, другое бенчить твой говнокод. Потерпи, пока дяди с работы приедут
нахуя? вот серьезно, не троллю
Не только. Если дубликат есть, нужен его индекс. Ещё, если грань встретилась дважды, её надо выкинуть. Вполне себе оправданное использование. Буду рад, если придумаешь чего получше.
> Потерпи, пока дяди с работы приедут
бля дак 7м вечера же уже
или дяди 2 часа до дому добираются до третьего кольца?
Да хоть надристать туда несколько миллионов интов подряд, уже будет в три раза быстрее. Могу сам собрать, покатаете.
не знаю, но вангую 300+ за сениора, 200+ за мидла.
У нас там просто зарплатная вилка зависит от грейда и должности.
Сениор Диплернинг - это очень ЖЪРно. На хх кстати открыта диплернинг вакансия, можешь заапплаиться.
>>80119
У меня есть 3рдпати зависимости. Я могу их как даун хранить у себя в репо, и собирать. А могу подсасывать депенденси менеджером.
Плюс, у нас есть каша из нескольких проектов, которые кросс-зависимы друг от друга, и собираются только все вместе. Вот от такой блевотины и хотим уйти, разбив их на библиотеки
шо то хуйня шо то
для кроссплатформы нада юзать gnu autotols
а если на одну платформу то тупа make, msbuild или еще чето, то что родное для платформы в общем
Неприятно тут только тебе.
Как батя в системах сборок, рекомендую тебе сразу переходить на базел, а не страдать херней. Выйдет быстрее и приятнее. Всякие санитайзеры, распределенные билд серверы и кешеры промежуточных результатов идут в подарок из коробки
>>80119
Нерепродьюсибл билд закукарекал. Маня, каждый девелопер должен иметь возможность в одну команду собрать с нуля что угодно на своей тачиле, а ci/cd сводится к запуску таргетов билд системы и прокидыванию переменных/креденшелов.
>Сениор Диплернинг - это очень ЖЪРно. На хх кстати открыта диплернинг вакансия, можешь заапплаиться.
Выпущу проект в продакшен, буду аплаиться. А то сейчас и показать нечего.
Я тебе больше скажу, в моей задаче 50% коллизий с хэш-функцией return a + b; работает сильно быстрее, чем 20% с хитрой побитовой еблей.
>У меня есть 3рдпати зависимости. Я могу их как даун хранить у себя в репо, и собирать. А могу подсасывать депенденси менеджером.
кста, на следующей конфе по с++ что в питере буде, там один из мастер классов как раз по настройке ci для крестовых проектов
может пригодится, мастер классы имхо пополезней тупых выступлений где тупо пялишься на говорящего
Даже такое говно тупа быстрее происходит.
CI я настраивать умею, тот же вцпкг мы в CI без проблем прокинули. Вопрос именно в пакетах и депендах.
одно время вставал в 2 часа дня, а ложился в 5 утра
чуть не сдох
больше такого не позволяю себе
по заявленным докладам
гораздо ближе к земле, более прикладные вопросы
>Вопрос именно в пакетах и депендах.
дык я толкую, что смысл менеджера зависимостей это в том чтобы не обосраться с версией библиотеки
это более нужно для динамикодрисни (js к примеру)
в крестах же у тебя компилятор сам проверит что интерфейс библиотеки поменялся и выругается
на сборке тупо вытягивается что надо из всех реп и собирается и дальше пыхтит там, тесты-хуетесты
не факт, что интерфейс поменяется. Да и хочется без сюрпризов :)
>cmake
>conan
>msbuild
>autotools
>кроссплатформенность
Мде, ребята, я в ахуе с вас.
>>80131
>У меня есть 3рдпати зависимости. Я могу их как даун хранить у себя в репо, и собирать. А могу подсасывать депенденси менеджером.
Ващет ты как раз должен их хранить у себя в исходниках в монорепе и собирать каждый раз (на самом деле нет - базел кеширует результаты на удаленном серваке). Тогда у тебя получается reproducible build и 0 геморроя, что и под какую платформу ты бы не собирал. Кстати, компилятор ты внезапно тоже должен выкачивать, потому что это тоже зависимость. И линковаться должен не на glibc, а на musl в случае linux.
>>80152
>в крестах же у тебя компилятор сам проверит что интерфейс библиотеки поменялся и выругается
Ага, и залинкует твой бинарь на системную либу. Потом соснешь хуйца после деплоя.
Также у таких манек типичная проблема: "ой, а почему у Ерохина все компилится на компе, а у меня нет??"
Не забудь еще, что билды бывают мультиязыковые и тогда ты со своим франкенштейном, который не трекает зависимости, будет сосать просто нонстоп еще до деплоя.
Ещё один нихуя не понявший? У меня там пара кусков памяти, которые мне любезно предоставляет std::realloc, нахуй твои аллокаторы оказываются не нужны.
у нас сейчас да, даже КОМПИЛЯТОР в монорепе и самопальный говносборщик. Ебал такое счастье. Каким-нибудь йоба GPU-драйверам это, вероятно, нужно. Нам с нашими в разы более простыми проектами - нет.
кастомный аллокатор тоже нахуй не надо, не даст он прироста значительного
дзен заключается в том что различные существующие промышленные реализации хеш мапов отличаются друг от друга парой процентов производительности, типа у кого то одно быстрей у кого-то другое быстрей
понятно, для неких обобщенных случаев
НО ведь если случай частный, то уже нужно использовать просто более специализированную структуру данных, чем хешмам, не так ли?
таких структур полно, cs не стоит на месте..
бля, чувак, уже только то что ты пользуешь православные маллоки в крестовом коде в 2к19 уже настораживает..
ты же знаешь да, что realloc не гарантирует реаллокацию на том же месте без копирования?
Естественно, не гарантирует! А ты же знаешь, какова примерно вероятность этого и каков суммарный эффект?
Да делать мне нехуй. Я даже твои потуги целиком не осилил. Кстати, а вот на твои тесты было бы интересно взглянуть. Вангую тестил ты криво. Методологию какую использовал?
Я взял и задеплоил блять, получил ускорение и успокоился. Я же не контейнер на все случаи жизни написал. Так, тестил на вставку подряд, на вставку рандомную, на вставку смешанную с удалениями, короче как раз то, что мне нужно было. Хэш-функции одинаковые, данные одинаковые, интерфейс одинаковый.
>Под 10 выню можно дикие оптимизации делать, например
Например? Не в целях тралленга, правда интересно.
1100x850, 0:05
Мне надо как то переопределить mousePressEvent для QGraphicsPixmapItem, который является членом класса QMainWindow.
Да, это я сложил пару файлов плюс main накинул с тестом на упорядоченную вставку.
Допустим, у меня есть QMainWidget, в котором есть сцена. Мне надо по маусивенту на сцене делать какое-то действие. Как мне вытащить этот ивент? В каком месте QMainWidget его прописывать вообще?
>CppCon
>одни белые цис-мужчины
Объяснитесь, плюсисты. Почему у вас нет инклюзивности?
Не знаю есть какие-то инклюды но я ими не пользуюсь
я дак испытал чувство неловкости когда смотрел видео
в зале наверное тоже задали себе многие вопрос wtf?
а там вроде больше тыщи человек сидело
ффф пздц ты
Потому что есть rvalue пуш
//hpp
pragma once
#include <QGraphicsPixmapItem>
class MyItem: public QGraphicsPixmapItem
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent event) override;
};
//cxx
#include "header.cpp"
MyItem::mousePressEvent(QGraphicsSceneMouseEvent event)
{
//Hamder
}
Ты серьёзно сидишь это читаешь? Я теперь чувствую себя виноватым в трате твоего времени :( не do...while потому, что мне так проще было сообразить, что куда совать, потому что цикл непростой.
Типа последний иф заворачивается под while, да? действительно симпатичнее, спасибо.
Не быстрее. Реально в два раза медленнее. Но если поставить кастомный аллокатор, который я наговнокодил, то скорость unordered_map становится такой же, как и у trivial_hash_map
https://pastebin.com/DC7cP8sj
То есть что, очередной велосипедостроитель наебнулся с неумением пользоваться кастомными аллокаторами?
Не знаю, где ты там чего подшаманил, но у меня так. Ну и конечно меня заинтересовал segfault на размере в пару раз больше. Я вообще тестил unordered_map с кастомным аллокатором (тоже велосипедный, тоже можешь обоссать), но эта хуета оказалась тупо в полтора раза на моей задаче быстрее.
Время будет вечером, я сам тесты устрою, мне на самом деле тоже не верится, что мой говномап сильно быстрее стандартного с норм аллокатором.
сегфолт тоже ловил, судя по всему от того, что malloc не может выделить блок памяти и возвращает nullptr
Debian 10
Ещё, думаю, важно:
gcc version 8.3.0 (Debian 8.3.0-6)
флажки -O3 -march=native -DNDEBUG
проц i5-8250u
Я глупенький, что такое релиз?
А, очень важную вещь забыл. Я выставил load_factor = 1, как у самого unordered_map (строка 183), на этот конкретный синтетический тест влияет сильно.
А на случайных erase-ах, как и ожидалось, на стековом аллокаторе результат оказывается хуже, чем у стандартного контейнера. Вот и написать нормальный аллокатор под это оказывается сложнее, чем написать тупой мап.
std::unique_ptr<int> p1(new int(33));
p1.release();
std::cout << (ЗВ)p1;
Оборачиваешь все в трай, в кетче ловишь, ты учебник не читал?
Алсо голые нью это бед практис, надо
auto p1 = std::make_unique<int>(33);
Ты пытаешься вызвать оператор вывода в поток от nullptr. Какого результата ты ожидаешь?
Там должно быть std::logic_error const&, или чё-нибудь ещё. Чё ты, как этот?
Такое дело: есть строка ~100. Все символы от 33 до 133. Нужно из строки убрать все 4-ки и 7-ки. Пробую так:
#include<iostream>
using namespace std;
int main()
{
char c[100];
for(int i=0; i<100; i++) c=char(32);
cin>>c;
for(int i=0; i<100; i++){if(c==char(32)) break;
else if(c!=int('4') and c!=int('7'))cout<<c;
}
}
Не получается пройти даже первый тест. В чём причина?
Вы же тут все близкие к математике и железу ребята. Почему тангенс на андроиде иногда выдает совершенно неверные результаты. Тестил на 4 устройствах. На одних и тех же числах результат одинаков. Пример пикрил. Думал найти закономерность, но пока руки не дошли
Погрешность метода расчета. Ты вообще знаешь, как работает калькулятор для тангенсов, синусов, корней квадратных и прочего?
В цикле везде c[ i ]. Тут какая-то ловушка для нубов стоит...
Гугли ряды Маклорена.
В целом я разобрался с этой хуйней, даже тестовый сервак поднял. Сгенерил клиент для qt5, почитал что оно сгенерило и даже я, с познаниями на недоджуна понял абсолютно всё, ибо код элементраный, просто муторный. Я не понимаю как все эти макаки верстающие круды не сходят с ума после месяца работы, это ж пиздец как уныло. Ладно, теперь вопрос: подскажите что годного можно написать на плюсах буст и кути в наличии связанного с сетями? Очень нравится вся эта тема, но всё что приходит в голову делается за вечер в соло.
То есть пользователи шарят свою музыку в общий доступ, и чтобы кто-то мог подключиться к пиру и сразу же начать прослушивание? В целом выглядит интересно, но я хуй знает как это тестить, ноут + телефон разве что. За идею в любом случае спасибо.
> То есть пользователи шарят свою музыку в общий доступ, и чтобы кто-то мог подключиться к пиру и сразу же начать прослушивание?
Да
> В целом выглядит интересно, но я хуй знает как это тестить, ноут + телефон разве что. За идею в любом случае спасибо.
Друзья есть?
Вообще у меня эта идея давно припасена. Советую тебе чтобы не отбить мотивацию не читать спойлер. Я решил что на практике эта программа провальна. Слишком много трафика сжирается + не у всех есть достаточно скорости чтобы раздавать и принимать одновременно
Тогда как будет свободный день начну писать, пока какую-то общую схему в голове придумаю.
>Друзья есть?
Легче второй телефон купить будет уже.
Спасибо еще раз анончик, но идеи всё равно можете покидать, на будущее может понадобится.
Да я же не для коммерции пишу, не думаю что пэт-проекты должны приносить реальную пользу, хотя может какой-то гений свой бранч на гитхабе запилит и будет убийца спотифая.
Ты же кути хорошо знаешь? Я вот любитель и пытаюсь вкатиться. Немного неудобно, что нет последовательности и приходится примеры разбирать и методом проб и ошибок учиться. Из за этого говнокод редкостный. Может есть какой то план или тип того? А то я как только хочу написать что то для себя, продумываю алгоритм то сразу напарываюсь на незнание инструменов и место того что бы писать код гуглю ошибки и переписываю в более менее приемлемый вид код.
Да я сам только учусь, сомневаюсь что мой код можно назвать не говном. А так ты делаешь всё правильно. Где-то картинка была, не найду сейчас. В целом учебный процесс так и происходит: почитал документацию - попробывал написать своё - не вышло/вышло плохо - отложил - почитал документацию - переписал пример - вышло чутка лучше. Главное не забивать а регулярно изучать новое и совершенствоваться, не думаю что сеньоры в этом треде изначально писали будто они в Яндексе проработали 10 лет. Можешь код на кодревью вкидывать, сюда или в @qt_chat в телеге, там вполне адекватное комьюнити.
чел не может решить немного расширенный fizzbuzz, земля пухом
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
RES[DATA[j]]++;
}
}
В вот этой вот программе?
https://pastebin.com/rnEEFFZJ
Если что, программа для получения гистограммы из матрицы 3х5(MxN) с разрядностью 4(K)
Что это за хуйня, и как программа получает гистограмму из этого?
Всё уже не нужно, я разобрался.
>лучше всего 4 курса по с++ от яндекса на курсери, они охуенные, лучшие курсы на русском по крестам на данный момент
Там есть реально что-то полезное, чего в книжках/интернетах не достать?
Мне чет сам формат таких курсов совершенно не нравится.
>Харькiв
Крестовые джуновакансии только в столицах и твоем аналоге ДС2.
Можно на галерах с ебаненького посмотреть, но сомневюась, что кому-то нужен джун без опыта
> Я бы и за еду + хорошую рекомендацию поработал пол года
Вот в этом и заключается твоя проблема.
Так вакансий и так с гулькин нос, без опыта вообще нет. Для студентов от никсов всяких только шарпы и жсы предлагают. Я уже слышал твою точку зрения в реальной жизни, но я вообще ее не понимаю, в чём проблема поработать за копейки ради опыта, а потом перейти на нормальную вакансию?
>>81620
Харьков это и есть ДС2 у нас. Да и в целом вся айти сфера в 3 городах сосредоточена: Харьков, Куев и Львов.
Проблема в том, что ты так и останешься там работать за еду. Люди представляют, как они за год/два/N прямо наберутся опыта, будут крутыми разработчиками и все двери открыты, вот только таких перекатывающихся довольно немного.
Может всё-таки в джаву?
это интенсивный курс, в хорошем смысле, потому что в тебя впехивают кучу инфы
но при этом все закрепляется практическими заданиями, в которых надо кодить, причем они проверяются не только автоматической проверяющей системой, но и преподами
и, тк курс платный, вообще то ты можешь (должен) быть активным в переписке, спрашивать что непонятно, а преподы тебе будут отвечать
>Я бы и за еду + хорошую рекомендацию поработал пол года
как это выглядит:
ты приходишь, ничего не умеешь
тебя учат уму разуму, вытирают тебе попку
при этом тебе платят денежку на покушать (sic!)
а через полгода ты им сделаешь махнешь ручкой, до свиданья, типа, я пойду еще где поработаю
и еще и рекомендацию попросишь (а ха ха )
Разве рынок не так работает? В теории мне могут оффер на стронг джуна дать, или просто зарплату повысить чтобы я не уходил.
Есть какие-то книги с алгоритмами, написанными на c++ и их применением, язык уже знаю на достаточном уровне, а вот задачи решать не могу, хотя могу реализовать алгоритм
Есть Седжвик, но там полное днище: с++ там еще до 11 года выпуска, и даже эти плюсы там используются понарошку, только как альтернатива псевдокоду. Еще очень сумбурное изложение и всратый перевод с грубыми ошибками.
ИМХО, лучше изучать алгоритмы по псевдокоду по нормальным книжкам и уже потом гуглить нормальные, рабочие реализации на крестах для конкретных алгоритмов.
int i_val = 1;
int &a_ref = i_val;
int &b_ref = a_ref;
b_ref это ссылка на i_val или на a_ref? b_ref не превратится в висящую ссылку, если вдруг a_ref будет уничтожен?
> b_ref это ссылка на i_val или на a_ref?
это 2 ссылки на одну и ту же переменную i_val.
> b_ref не превратится в висящую ссылку, если вдруг a_ref будет уничтожен?
Висячую ссылку получить реально, но в твоем случае, когда все на стэке - ты никак висячую ссылку не получишь.
https://2ch.hk/pr/res/1482318.html (М)
ПЕРЕКАТ
https://2ch.hk/pr/res/1482318.html (М)
ПЕРЕКАТ
https://2ch.hk/pr/res/1482318.html (М)
господа. дедлайны горят. молебно прошу вас поспособствовать в написании легкого кода. подсобите сибирскому касипоше :(
(под пунктами 2 и 3)
Это копия, сохраненная 22 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.