Это копия, сохраненная 22 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: https://2ch.hk/pr/res/2111351.html#2156767 (М)
Да, два символа, но второй может быть цифрой.
vector<int> a;
a.push_back(10);
vector<int> b;
b.push_back(20);
for (auto it = a.begin(); it != a.end(); ++it)
{
cout << ⚹it << ‘\n’;
a = b;
}
Output:
10
Здесь я ожидаю что-то вроде бесконечного цикла, потому что итератор был инициализирован итератором вектора a, который указывал на начало оного. На первой же итерации делаю a = b, таким образом, так как цикл должен работать, пока итератор оригинального вектора a не будет равен его end(), он должен итерироваться по всей озу, пока не надет нужный адрес ячейки. Однако происходит всего одна итерация.
>Чем является итератор?
Итератор является итератором...
>Ведь обычно мы разыменовываем итератор звездочкой, чтобы получить элемент, на которой он указывает.
Просто определен operator⚹()
>Здесь я ожидаю что-то вроде бесконечного цикла
Это UB
Бля, я перегрелся от плюсов. Уже сам понял, в чем моя ошибка, пока писал сообщение: там же после каждой итерации a.end() будет получать end вектора b, так что все ок.
Тогда объясните еще такой вывод. Правильно понимаю, что тут из-за ресайза такое получается и может ебнуть access violation, там, где он начинает печатать нули до последнего нуля включительно?
>2. ебучие исключения которые работают по умолчанию, и что вся стандартная библиотека написана так, предполагая их использование. еще не завезенный std::expected приходится пилить свои велосипеды.
Нахуй пойди со своим говном. Исключения - топчик.
>4. Уебищные макросы, которые приходится городить если хочешь запилить свой логер, с компайл тайм верификацией формата, к тому же макросы единственный способ получить Source location откуда этот лог вызывается, чтобы скрыть всю имплементацию внутри удобной функции аля LOG_ERROR("Error: {}", err)
https://en.cppreference.com/w/cpp/utility/source_location
>6. Отсутствие встроенных высококоуровневых утилит для работы с сетью, приходится инклюдить мамонтов аля буст азио или бус бист, котоыре тянут за собой половину остального буста.
Ссу тебе в ротешник, буст асио требует только буст систем.
>9. Бесит std::move не обнуляющий примитивные типы после мува.
Убейся блядь.
>11. Ебучие инклюды, в С++20 пришла замена в виде модулей.
Модули нахуй не всрались
> там же после каждой итерации a.end() будет получать end вектора b, так что все ок.
Я опять поторопился. Сейчас понял, мое изначальное предположение было правильным, и я этот факт уже учитывал. Лол. Так что вопрос актуален + хочу объяснение того пика, который скинул.
>>157785
> Это UB
Почему это ub?
>Почему это ub?
https://en.cppreference.com/w/cpp/container/vector
Потому что присвоением ты инвалидировал все полученные ранее итераторы. И их использование теперь - UB
>>157813 (Del)
Съеби отсюдя блядь
>a = b;
У тебя копируется содержимое вектора, а не ссылка на него, тут тебе не жс или откуда ты там. Но вообще это UB поскольку вектор меняется и могут инвалидироваться итераторы.
А итератор это такая абстракция работы с коллекциями данных, которая в принципе может делать что угодно. Например inserter итераторы никуда не указывают, а вставляет значения в контейнеры. Ты можешь написать итератор который работает по сети с базой данных и он будет работать со всеми стандартными алгоритмами стл.
Съеби отсюда школьник
>джава это самый обрыганский, самые ебаный, ублюдский язык, даже не сам язык а просто вся эта инфраструктура его
В джаве она хотя бы обрыганская, но есть, а в С++ в принципе инфраструктуры нет...
большой скачек был бы если бы abi стандартизировали и как следствие стандартизированную динамическую загрузку классов
а все что сделали это добавили кучку синтаксического сахара чтобы было удобней делать шаблонную магию, добавление семантики вообще наверное только одно сделали - семантику перемещения ввели..
а так кресты в энтерпрайзе все и сдохли потому что не этого, а явка живет там и процветает
да че там, даже если хочешь сделать любую плагинную систему, в той же любой расширяемой игре, то будь готовь пердолить сишный код как 40 лет назад, по сути накручивая всю ту же компонентную модель на структурах и указателях на функции как в com или gtk
хотя нахуя я это написал, потому что кто это понимает, понимает и так, а кто не понимает, то посчитает мой текст шизофреническим бредом
Я закончил чтение на втором слове.
Здесь модельной внешности деффки, просто пишут в мужском роде, чтобы не требовали сап с датой.
Да, а как иначе?
>большой скачек был бы если бы abi стандартизировали и как следствие стандартизированную динамическую загрузку классов
и поломали бы существующий софт
>а так кресты в энтерпрайзе все и сдохли потому что не этого, а явка живет там и процветает
нет, у джавки был Сан, у Сана были Солярки и деньги. Собственно платформа+бабки = язык программирования. За плюсами никто не стоял и не пиарил.
Вот такие?
В С++ треде
Да, конечно. С итераторами вообще можно как угодно обращаться - копировать, перезаписывать. Они ж чаще всего просто хитрые указатели.
удобные option и result, match еще очень хочется
и вместе со всем этим аналог карго
auto&&
int count(const Container& container)
{
int sum = 0;
for (auto&& elt : container) {
sum += 1;
}
return sum;
}
>Отсутствие какой-либо высокоуровневой поддержки конкурентности, нету тред пулов
Экзекуторы уже почти готовы, потерпи чутка и всё будет в сторонней библиотеке от фейсбука или гугла
>большой скачек был бы если бы abi стандартизировали
Так аби и так стандартизировано, читай мануал по SystemV и пиши что хочешь.
Разобрался уже.
У меня в дебаге включена проверка итераторов и она не дает вообще ничего сделать с итератором, если решила, что он инвалид. Нельзя даже присвоить ему валидный итератор.
Что-то у меня нет либы compare
лабы идут нахуй
Короче, хочу портировать её под нормальный компилятор, это сложно? Такой вопрос не смог нагуглить, на что лучше всего заменить ssize_t? Зачем эта хуета нужна, я тоже не понял спустя столько времени гуглёжки. Почему просто не использовать unsigned int?
Ты хуй.
Просто мне понравилось так писать - группировать приватные поля не выделяя под них класс/структуру где-то в ебенях в отдельном файле (и потом хуй поймешь нахуя эти сотни файлов исходников), а внутри класса.
Но на гитхабе такое не видел - мужики так не пишут. Так какие подводные?
аргументируй. Мне реально интересно что тут может быть не так, в плане показа кода другим (в том числе на собеседованиях).
Знать стоит, а вкатываться в плане заработка не стоит.
На мой взгляд начинать надо с
1. си
2. Java, С#
Потому что size_t не на любой платформе является unsigned int
Это какой компилятор у тебя size_t не компилирует?
rvalue-ссылка с выводом типа.
>группировать приватные поля не выделяя под них класс/структуру где-то в ебенях в отдельном файле (и потом хуй поймешь нахуя эти сотни файлов исходников), а внутри класса
А почему просто не положить эти поля внутрь класса, и не внутрь структуры внутри класса?
Недавно пришлось сделать бамп аллокатор. Минут 5-10 пишется, прикольно получилось и прямо зашло в архитектуре, получилось быстрее (хотя там инициализация программы, на скорость примерно пофиг) и намного меньше оверхеда чем от системного аллокатора. Ну вот и всё, как-то говорить не о чем.
>>158941
Короче по работе особо нихуя сейчас нету сложного, единственное с чем я сейчас ебусь это с тем, что ебучие создатели numpy не позаботились о том чтобы спроектировать свою говноподелку нормальным образом чтобы люди в других языках могли это так же юзать как и в питухоне. Просто мрази тупые, как и все питон сообщество. Ну так вот, перевел говнокод с питухона с нампай на с++ использую опенсиви и свои кастомные реализации нампай функционала и это работает почему то не так как там. А все эти имплементации нампая в с++ аля xtensor говно полное.
>>158952
Так есть же tbb malloc, jemalloc, tcmalloc и прочее. Нахуя свой кривой велосипед пилить?. Лично я очень активно юзаю tbb во всех своих проектах. Очень классная либа где есть все из коробки и таски и парлель фор и конкурентные дата стракчерс и алокаторы.
Опять это синьор+ пригорает тут
>Нахуя свой кривой велосипед пилить
Потому что когда у тебя буквально почти сотня гигов данных которые ты должен держать в раме, проще написать штуку на 20 строчек чем теребить general-purpose маллоки.
Что мешает держать сотни гигов с приведенными мной отлаженными аллокаторами еще и заточенными под многопоточность? Вот твоя поделка поддерживает многопоточное выделение памяти? Сомневаюсь. И наверняка там еще десяток багов неберется. В нормальном проекте такой велосипед бы не прошел код ревью 100% и тебя бы заставили юзать готовые проверенные алокаторы.
>многопоточность
Мне не нужна, там инициализация в один тред при запуске идёт и дальше все обращения read-only. И там буквально 20 очевидных строчек кода, какие баги лол.
И сразу предупрежу возможный вопрос: есть как юниты, так и интеграционные тесты, все гоняются под asan-сборкой. Только фаззирование у нас в далёких планах.
>буквально 20 очевидных строчек кода, какие баги лол.
Этого достаточно чтобы совершить баг, работая с голо памятью, в лучшем случае это может привести к сегфолту в худшем к неочевидному трудновысисляемому багу и мемори ликам.
Вообще я не понимаю в чем сложность использовать готовые решения.
Просто я не сторонник изобретения велосипедов, и знаю каким боком это может обернуться в проекте. Поначалу может казаться что эти 20 строчек кода действительно проще написать самому чем подключать какую-то либу к проекту, но со временем такой код может начать обрастать зависимостями и костылями, что в конечном итоге приведёт к очень сложному рефакторингу по тскоренению всего этого самописного говна. На моей прошлой работе, именно так и было сначала тоже всякие умники практиковались в с++ доказывая себе и кому-то ещё что они могут, но в итоге потом с этими велосипедами были большие проблемы. Так что проще найти какие-то уже известные либы для себя которые покрывают большинство нужд в с++ и юзать их в любом проекте с самого начала.
Я и не спорю, я сам не люблю велосипеды и хитровыебства без причины. У нас тоже для загрузки хватало обычного new/delete, но потом внезапно разрослись данные. И именно в этом месте я решил, что контроль важен и general-purpose аллокаторы не потянут, и переписал. Если бы нужно было что-то сложнее (или я бы думал, что впоследствии придётся делать что-то сложнее), я бы уже призадумался найти что-то готовое. Тут есть некая грань, которую нужно научиться ощущать, и лишь время покажет, оказался ли я прав. Вообще говорят что mimalloc сейчас топ в плане general-purpose, надо бы мне затестить как-нибудь.
> У нас тоже для загрузки хватало обычного new/delete,
Вы прям так напрямую память через new выделяете?
Как на счет безопасных RAII контейнеров аля std::vector?
>general-purpose аллокаторы не потянут,
А чем они не потянул? Если у вас нету конкурентности. Даже стандартный аллокатор спокойно может выделить хоть 60 гб памяти за раз, при условии 64 битной архитектуры и наличия достаточного количества RAM + SWAP
>Вы прям так напрямую память через new выделяете
Нет конечно, я просто как пример привёл.
>А чем они не потянул?
Изначально у нас и был вектор на несколько сотен тысяч объектов разного непредсказуемого размера (по сути строк, но с несколькими кусками метаданных), то есть приходилось выделять память как под сам вектор, так и дополнительно отдельно на каждый объект. Вот оверхед по памяти на каждую из стапиццот аллокаций я и хотел побороть, он там ~30-40% был. Теперь же всё как раз и лежит в одном большом блоке памяти, и этот блок бамп аллокатором и заполняется.
Ок, ну ты же понимаешь, что теперь ты загнан в периметр этого большого блока памяти и не сможешь его просто так увеличить если что да и память он нерационально занимает. Но вот готовые аллокаторы могли бы тебе помочь с фрагментацией памяти при многократном выделении, т.к. внутри себя они выделяют память из пулов и по умному там все распределяют.
Вообще тут надо смотреть исходя из задачи и требований, может вообще лучше сменить ваш вектор на хешмапу, либо какой-нить btree, либо сделать какую-то древовидную структуру с чанками в виде векторов на липестках. Потому что сам понимаешь при добавлении или удалении элементов из такого огромного вектора всю память под него нужно будет реалоцировать заного и копировать туда старую, что уже довольно дорого и тоже не очень эффективно т.к. вектор внутри себя тоже аллоцирует всякий раз памяти с запасом в зависимости от текущего числа объектов в нем.
>не сможешь его просто так увеличить
Мне и не нужно. Я уже раза 3 сказал, что я один раз заполняю блок на старте и дальше только читаю из этой части. Мутабельные структуры сразу на порядок увеличивают сложность, и тогда бы действительно лучше какое-нибудь библиотечное решение взять.
>память он нерационально занимает
Там всё вплотную лежит, ничего лишнего. В этом и суть бамп аллокатора. Думал правда некоторые величины в LEB128 закодировать вместо uint16_t потому что они по большей части в районе 20-100 были, но это уже точно лишнее, так как моя цель уже достигнута.
Короче, поэтому в этом треде и не стремятся "обсуждать сложные задачи и сложные их решения на С++"
Хз. На первом курсе устроился в видеонаблюдение крестомакакой в мухосранске. Прошивка была готовая, поэтому стояла задача писать конфиги за 22к в месяц. По учёбе накопилось дохуя долгов и меня отчислили. один хуй не ит специальность, но техническая Скоро должна прийти повестка. Самое хуёвое, что работал не оффициально, поэтому опыта работы нет. опыт написания конфигов, лол
если ты зелененький совсем, то читай липпмана, потом полирни последней книгой майерса
не читай последние книги страуструпа, он плохие книги в конце жизни стал писать, лениться
в идеале стоило бы сначала k&r прочитать пару раз с выполнением всех упражнений
ну я закинул удочку про то что в с++ нет стандартизированного abi и как следствие нет стандартизированной динамической загрузки классов, получил пару стандартных ответов + хейт
и все
как бы уровень этого треда понятен, можно дальше в нем бред и хуету писать, кекая и мекая, а нахуя серьезно что то делать? на вопросы ньюфагов отвечать что означает && в том или ином контексте? да нахуй нужно
>Нахуя свой кривой велосипед пилить?.
с целью обфускации, защита от внутривидовой конкуренции между программистишками
с другой стороны автор кастомного аллокатора возможно гораздо умнее: ибо понаписав подобного кода, хуй теперь его уволят с его работки, ибо только он сможет объяснить че он там вообще имел ввиду и зачем
>нет стандартизированного abi
Что ты вообще имеешь в виду под этим? Что в стандарте не описывается загрузчики эльфов, мэнглинг, пэддинги и регистры всех-всех-всех процессоров?
хотя бы имена
в общем минимум который позволил бы сделать стандартизированную динамическую загрузку классов
Странно. Если ты в разработке давно не нуб и пишешь на эрланге много лет, то наоборот ты должен рассказывать, что можно написать, связанное с распределенными системами/многопоточкой/сетью и базами данных, не?
Например, если бы нужно было бы написать на эрланге, а не на плюсах, какие идеи проектов ты бы мог придумать?
Ну, мне хочется написать то, что на плюсах было бы сделать лучше чем на эрланге, но в области которая мне знакома и интересна. Делал в основном всякие опердеи, платформу для месседжинга, биллинг, процессинг. Но не буду же я в качестве пет проджекта делать биллинг и процессинг, а очередной мессенджер скучно. В идеале бы хотелось еще писать то, в чем С++ проявил бы себя лучше, чем эрланг. Думал над каким-нибудь простеньким сервером для мультиплеерной консольной игры, но что-то не стоит особо на это, да и показывать потом как-то стыдно такое.
> Делал в основном всякие опердеи, платформу для месседжинга, биллинг, процессинг.
Делай это.
> Но не буду же я в качестве пет проджекта делать биллинг и процессинг, а очередной мессенджер скучно.
Это просто отмазки.
> Думал над каким-нибудь простеньким сервером для мультиплеерной консольной игры, но что-то не стоит особо на это, да и показывать потом как-то стыдно такое.
И это тоже сделай. Не обращай внимания на отмазки.
Может быть проект должен быть про что-то легко визуализируемое? Или регулярно, периодически делать снимки состояния и визуализировать их.
А вообще есть такое, да. Я имею в виду, бывает такое, что трудно придумывать себе задачи, генерировать идеи.
Мне кажется, здесь может оказаться полезной такая штука, как само-анализ, само-диагностика, разобраться в себе. Взять тетрадь и записывать туда мысли, например, начав с вопроса "почему мне трудно придумать идею проекта?" и дальше перечисляешь всё, что приходит на ум, какие-то диалоги, воображаемые споры, предположения и т.д. Например, можно представить себе двух персонажей, живущих в твоей голове: Перфекционист и Начинающий Мастер. Начинающему Мастеру нужен опыт, практика, а Перфекционисту нужны идеальные проекты и идеальные реализации. Ты отправляешь идею Начинающему Мастеру, но её перехватывает Перфекционист, ему не нравится идея и он выбрасывает её в мусор. Нужно что-то делать с этим сумасшедшим Перфекционистом, чтобы он не мешал Начинающему Мастеру. Ну это как пример.
Вот с перфекционистом и начинающим это прямо точно описал, еще часто вступает прагматик (зачем этот проект нужен? что мне с ним потом делать?).
Спасибо тебе, вдохновил. Начну, наверное, с распределенного чата, чтобы можно было просто общаться p2p, потом добавлю чат-комнаты и участников, чтобы порешать проблемы с консистентностью данных, прикручу CRDT, затем end-to-end шифрование, передачу файлов. Думаю для начала хватит.
>задача писать конфиги за 22к в месяц
>По учёбе накопилось дохуя долгов и меня отчислили
>Скоро должна прийти повестка
>работал не оффициально, поэтому опыта работы нет
>опыт написания конфигов, лол
Сочувствую, надо же было так сильно проебаться по жизни. Но ничего страшного. От армии можно откосить, а потом поступить в нормальный вуз на ИТ направление и пойти работать куда-нибудь во фронтенд.
Win10. Есть приложение на плюсах. Во время его жизни оно может общаться с виндовым сервисом, который стучится на некий сервер и просит выдать экземпляр лицензии.
Проблема в следующем: в случае какого-нибудь неконтролируемого и неотхватываемого краша приложения (типа запись за границу массива и т.п.) надо отправить какое-то последние слово на сервер и вернуть все лицензии, иначе они повиснут использованными навсегда, и сделать это без создания второго приложения.
Мб подскажете что умное, с уважением.
Нонсенс какой-то, все наружу торчит как в сишечке.
Вовсе нет. Просто это выпадает из общего дизайна библиотеки.
Интересуюсь, вдруг есть какая-то веская причина?
Задача по MPI (через point to point)
Регулярное заполнение квадрата точками. Точки должны быть расположены
через равные промежутки (подобно клеткам в тетради).
Вопросы:
Что такое регулярное заполнение квадрата и что я тут должен запараллелить?
Спроси у препода, который дал тебе лабу.
Сделай все поля открытыми. Приватность это каменный век. Пиши сразу как в питоне.
Придумали Страуструпа. Хз, чего все плюются, пишет хорошо.
Джава сама себя пиарила сборщиком мусора например. Чтобы любой даун мог писать код. Теперь представь что Страуструп/Комитет и Степанов выпускают С++11 не в одинадцатом году, а сразу в 1995 со всеми смарт пойнерами. Чтобы сделала джава тогда. Скорее всего пососала. Но поезд уехал. Теперь питон дает пососать и плюсам и джаве. Может комитет и высрет что-нибудь лет через 20 чтобы соответствовать развитию. Если ворчун не откинет копыта.
И сишке. Осталось отменить строгую типизацию и будет вообще заебца.
Сортировка - это алгоритм. А тут структура данных, которая натягивается поверх другой структуры данных.
Дак добавить в сервис проверку, живо ли ещё приложение.
При вводе ctrl z выходит из цикла и пропускает последующий ввод
Что с этим делать?
Смотря что тебе надо сделать. Ctrl+z в консольке закрывает инпут стрим. Если тебе нужно продолжить собирать инпут, попробуй сделать 2 цикла и переоткрывать std::cin, но не могу представить, зачем тебе это надо.
Спасибо
{ заполняешь квадрат -> опустошаешь } - делаешь так регулярно, наверное с помощью цикла.
запараллелить заполнение строк или столбцов, чтобы они, ну, шли слева направо столбиком, или строкой сверху вниз, или из верхнего левого угла равномерно заполняли квадрат к правому нижнему углу.
типа на поток несколько столбцов или строк, в зависимости от размера квадрата твоего
Это тебе вдогонку, пес
{
char unk;
int chislo;
};
struct mem
{
un memo[27];
};
mem pam;
Как мне можно выполнить поиск в массиве на соответствие хоть 1 символа pam.memo[].unk к strochka[j] без кучи if?
strchr не сработает т.к. это не char массив, а одиночная char внутри массива структуры, это нужно чтобы хоть как-то привязать определённую букву в строке к цифре введённой с клавиатуры
Просто написал поиск символа через for, чёто тупанул что так можно было сделать
>Как мне можно выполнить поиск в массиве
>strchr не сработает
Ну так ты пиши свои классы таким образом, чтобы они работали со стандартной библиотекой (или с той библиотекой, что у тебя заменяет стандартную).
> т.к. это не char массив
Ебани преобразование в char, например.
я чмоня
Нет ли способа насильно засунуть в макрос перевод строки чтобы
#define X\
Y
разворачивалось в
X
Y
, а не X Y
Зачем? Для компилятора разницы никакой, а в строковых литералах макросы не работают.
Каким образом в данном примере реализовать логику взаимодействия объектов одного типа?
1) getValue необходимо раньше конструктора Typename объявить?
2) Оператор+ после (A+B) возвращает ссылку на временный объект Typename, который затем взаимодействует с C? Если так, то что в поле m_value у этого временного объекта?
m_value == 3 по теореме Cосновича. Алсо в строках 8-10 жуткий говнокод. За такое надо харкнуть преподу в лицо.
ты прав.
потому что в конструкторе функция, которая еще не объявлена?
Ну если какой-нибудь простой, где есть чаты, юзеры, обмен сообщениями и файлами, и сквозное шифрование, то на любом популярном языке будет элементарно, на Go/Erlang/Elixir особенно. Если звонки, то там уже придется WebRTC покурить или VoIP, видео тот же WebRTC или SIP. Если делать распределенный чат, то уже посложнее. Но в целом, само ядро мессенджера, штука элементарная.
Сложнее становится, когда всякие свистоперделки начинают сверху накручивать, а-ля боты, статусы юзеров, счетчики сообщений, мульти-девайсность и самое главное UI для всего этого.
A, B, C создаются в строчках, в которых объявляются. У них вызывается конструктор без аргументов, которого не определено.
вангую это какой-то тест в путяге.
Да тут всю программу можно сдавать в палату мер и весов как платиновый эталон говнокода.
Я никогда еще такого треша не видел, даже в шараге.
Проблемы с консистентностью и прочим из CAP, с обходом NAT, поиском пиров. Это первое, что вспомнилось.
если чо ,сделал так, но хз правильно ли
Не каждый скриншот демонстрирует такую концентрацию UB и шизы на строчку кода.
1. Мудацкое форматирование, абсолютно.
2. m_value неинициализировано если х<=0
3. UB в getValue() при этом же условии.
4. ; после } (см. п.1)
5. UB: возврат висячей ссылки на временный объект.
5а. Этот объект создается неявным кастом из инта, полученного неявным кастом из була.
6. this.getValue
7. Незакрытая, блять, скобка (см. п.1)
8. Классический посос на конструкторе по умолчанию.
Дальше, думаю, можно не продолжать.
Статический член живет всегда в одном экземпляре, независимо от экземпляров класса. Он будет существовать даже если ни один экземпляр класса не создан.
Написать конструктор перемещения можно, но если нет других членов, то делать этому конструктору будет нечего.
как макросами из этого
task_ ## __COUNTER__
получить
"task_№"
№ это получающийся __COUNTER__
Я перепутал, не статический массив, а обычный, который создаётся на стеке.
что-то типа
template<typename TYPE, size_t size_>
class sArray
{
TYPE array_[size_];
};
Ты наверное попался, что просто так в сях и плюсах нельзя сделать макрос конкатенации:
https://godbolt.org/z/xzxxh459n
Тогда смотря какая у тебя обертка.
У std::array, например, вообще никаких конструкторов нет, кроме сгенерированного default конструктора.
Перемещение имеет смысл для классов-хендлеров. В твоем примере переместить член array_ никак не получится.
спс анон, ты меня спас
да это понятно все, кроме пункта 5 и 5а.
5. Ссылку от operator+ надо в любом случае возвращать, чтобы дальше в калькуляторе А+B+C это сработало, разве нет? По типу инкремента ++(++x). Это должен быть некий временный объект со значением m_value?
5a. Почему там каст от инта в бул неявный?
По сути через перегрузку оператора необходимо вернуть ссылку на временный объект с промежуточным значением bool m_value.
Не ссылку, а сам новый объект с промежуточным значением.
Типа return Typename(m_value || A.m_value) или хуй тебя знает, что вы там хотите получить.
то есть так?
Typename operator+(const Typename& A)
{return Typename(m_value || A.m_value)}
и добавить конструктор для Typename(bool)?
Нет.
У меня флаг -foptimize-register-move ака -fregmove
Attempt to reassign register numbers in move instructions and as operands of other simple instructions in order to maximize the amount of register tying. This is especially helpful on machines with two-operand instructions.
И я вот нихуя не понимаю какой код я должен написать, чтоб увидеть как флаг работает. Помогите пожалуйста с минимальным примером
>maximize the amount of register tying.
Скомпилируй под архитектуру с большим количеством регистров, например итаниум.
Ты хочешь агрегатную инициализацию параметра, но при передаче аргумента используется другая. На месте {1, 1} конпелятор видит initializer_list.
Допиши ch перед {1, 1} или определи в ch конструктор из initializer_list.
А еще v ты инициализируешь внутри класса (не в конструкторе).
В этом случае инициализация через () не работает; только = или {}.
спасиюо
class A
{
private:
std::vector<B> my_vector;
};
int main()
{
A a; // при компиляции пишет, что incomplete type в векторе
return 0;
}
Почему нельзя сделать инстанс класса A с вектором значений с fd класса B? Я понимаю, если бы это был массив, где у нас статическое количество объектов, поэтому sizeof(A) менялся бы в зависимости от размерности массива, следовательно, нужно было бы знать sizeof(B). Но в чем проблема с вектором? Ведь он же просто хранит поинтер на последовательный блок памяти. sizeof(vector) всегда const. Зачем ему definition класса B?
Ему нужно знать размер твоего класса в, это же просто последовательный массив в куче, а класс в ещё не определен. Делай вектор указателей на в, их размер зависит только от платформы.
Так у меня compilatio error не на попытке пушбека или чего-то подобного, где вектору нужно было бы знать размерность объекта, у меня ошибка при попытке создания инстанса класса A. Вопрос актуален
фейспалм.жпг
Нет.
Хочешь ООП - пиздуй в джаву. Алгоритмы и структуры данных там же освоишь ничуть не хуже.
И можешь поупражняться немного в сишке. Чтобы понимать, как оно на низах работает. Нескольких глав из Кернигана и Ритчи тебе достаточно будет.
Кресты, в общем случае, не нужны. Их используют для специфичных проектов. Там выбора нет. Без надобности лучше туда не лезь.
Касательно сишки, я прочитал всего Прату кроме пары глав и еще касался ассемблера немного. Однако сейчас это все немного подзабылось.
>Хочешь ООП - пиздуй в джаву. Алгоритмы и структуры данных там же освоишь ничуть не хуже.
Джаву впизду, точно нет. Смотрю в сторону шарпа, что по нему скажешь?
Как язык шарп норм. Перегруженный правда, зато развивается.
И обрати внимание, что на дотнете доступны также языки F# и F*, так что тебе будет чем развлечься в будущем.
Но я не вижу у него перспектив применения особых. Шарп конкурирует с джавой, используется для разработки веб-бэкендов для всякого энтерпрайза, десктопных приложений под винду и геймдева. В мобильной разработке практически не задействован. В новомодной херне типа дата саенс, машинного обучения не задействован.
Подумай, чем хотел бы заниматься, в какую область податься и выбирай соответствующие языки тогда уж, мне кажется.
Хотелось бы приятный язык в котором я смогу освоить ООП на высоком уровне, хорошо разбираться в алгоритмах, структурах данных. Что конкретно хочу делать пока точно не определился, сейчас хочу язык, чтобы без особых танцев с бубном реализовать свои идеи приложений, которыми сможет пользоваться обычный люд и хочу попробовать геймдев. А шарп эдакий швейцарский нож вроде неплохо подходит для этого всего. Вопрос денег пока не стоит.
Ну да, я в курсе.
Бери шарп. Он подходит под твои критерии.
А если углубишься в геймдев, перейдешь на плюсы. Но начинать с них, ну это такое. Там и танцы с бубном и "приятности".
Все три языка это тяжёлые промышленные комбайны со своими особенностями, которые выбираются под задачу. Специального языка для обучения нет.
я думаю ни в одном современном языке в полной мере не реализованы все парадигмы ООП
А что это за парадигмы? Обычно их всего три. Наследование, полиморфизм, инскапсуляция. Что еще надо реализовывать?
А насчет плюсов, стоит ли их вообще знать, кроме как для геймдева или это будет юзлес? Всякие САПРы и научные симуляции/расчеты я точно делать не планирую.
На плюсах дохуища всего написано. Твой браузер, юзерспейс твоей ОС, твой стим например.
Бэкенды бОльшей части сайтов, куда ты ходишь. Точно полезно.
Проблема в том, что он скорее всего не будет писать браузеры, стим и бекенд гугла=))
Ладно, уговорил, пусть пишет.
>джава + с++
Не знаю, как насчёт каких-то отдельных задач и вакансий. Но как бы существенная часть джава библиотек - это обёртки над сиплюсовыми либами, да и сама джава написана на плюсах. Иметь возможность что-то пофиксить, пропатчить в этой части, заюзать подходящую плюсовую либу в проекте, самостоятельно запилив под неё биндинг, это должно быть охуенно полезно.
Разве что, если таким заниматься, то ты в плюсовые разработчики и переедешь со временем..
Выбери один стэк и задрачивай его. Когда станешь крепким мидлом - перекатиться между стэками будет проще
Java и с++ редко встречаются вместе. Обычно в паре к c++ идёт Python и наоборот.
Есть JNI, используется в Андроиде для некоторых задач, где нужна производительность - некоторые игры с графикой, мультимедия. Ещё делают приложения на QML, но насколько много там плюсов, мне неведомо.
Дёргаешь деструктор вектора — тип должен быть полным.
> питоновским удобным stroka.split(',')
То-то питон самый тормозной язык из всех реально используемых.
Если хочешь, как в питоне, то о перформансе можешь забыть, вот только зачем тогда тебе кресты?
>Это всё обосновано чем-то кроме нерасторопности Комитета?
И чо должен .split возвращать?
vector? list? deque? И чего именно? строк или вью?
> Есть ли надежда на будущие стандарты? Что делать сейчас
Можешь свалить отсюда, например. Нахер ты тут не нужен с платиновыми вопросами.
Boost String algorithms. Или используй строки из своего фреймворка. А в целом страдай, особенно когда дело коснётся юникода, его обработки и разных кодировок
А выбрать что то одно из этого это какая то проблема?
Или раз несколько вариантов реализации, то не бывать никому?
>А выбрать что то одно из этого это какая то проблема?
Естественно. Ты же должен обосновать, почему этот выбор самый правильный.
Контейнер пусть передаётся как шаблонный параметр. Значение по умолчанию - std::deque. Элементы контейнера std::string_view.
Вектор строк, четко и ясно. 99.9% юзкейсов это покроет. Не надо городить универсального монстра.
Кому не нравится, пусть пишут свой велосипед.
>Не надо городить универсального монстра.
И тут IBM такой "Не, голосуем SA. На наших системах вектор/список/whatever багованный, поэтому не хотим через него делать.".
У меня есть функция, и внутри неё я создал переменную int a, я что-то с ней сделал и вывел её на экран, или присвоил её значение другой переменной (Она больше не нужна), дальше в функции я написал ещё что-то и функция закончилась. Переменная a очищается из памяти когда я последний раз её использую, или когда заканчивается функция?
Если она очищается при конце функции, имеет ли смысл запись int *a = new int, а пототом delete a, когда она не будет уже нужна, раньше чем скомпилируется остальной код функции (Чтобы переменная меньше времени лежала в памяти). Просто когда читал про динамическое выделение памяти, везде писали что такую штуку только для массивов используют.
Или это просто дрочь ненужная?
все что создается после { удаляется после }
кроме того что ты выделил в динамической памяти с помощью new или malloc
также удаляются поинтеры к тем участкам динамической памяти, так как они являются переменными с адресом
>>167218
Можно вернуть псевдо-массив с элементами типа string_view (заранее подсчитать его размер), по которому можно пробегаться, получая значения, генерируемые на ходу. Или вовсе вернуть итератор, который при разыменовании будет возвращать новое значение. Хочешь - строй из этого вектор, хочешь - используй иначе. И не нужно вручную возиться с циклами.
>>167244
Спасибо, посмотрю.
два чая
Сам использую сплит оттуда.
Вообще работу с нитями без без библиотеки не представляю, на родной С++ нет нормального non-case-sensitive поиска.
У меня вопрос - Каким образом форматируется текст в письмах(в программе Outlook или веб версии Gmail). Я передаю текст в почтовую программу через wstring. Могу ли я в wstring отформатировать текст?(сделать часть текста цветным, жирным и т.д).
То есть если я хочу освоболить память, которая выделялась на a до }, то я обязательно должен сделать переменную динамической?
int *a = new int
a - это пойнтер к новой переменной int. Он не удалится из памяти до тех пор, пока ты не напишешь:
delete a;
не понимаю зачем тебе вообще заморачиваться с этим и не использовать просто
int a;
В этом случае оно само очистится из памяти после окончания функции.
*Она не удалится
Да какой-то внутренний перфекционист заиграл внутри просто. Да и выйгрыш от такой штуки вряд-ли большой будет если функция маленькая
Таким же как html или rich edit. Движок или поле редактирования решают какие параметры у буквы и соответствующим образом дёргают gdi/gdi+/direct 2d или что там ещё у них рендерит
я так и не понял как сделать то, что я хочу. Просто добавление тэгов не работает
Конечно не работает, а ты думал, теги распознаются магически сами по себе? А почему не распознаются в <b><u>этом</u></b> посте тогда, как думаешь?
Может быть какой-нибудь RTF, наверняка похоже на то, как работает копипаст с цветом, размером и картинками. Я бы про копипаст и RTF погуглил
Маркет написан на жабе, некоторая часть поиска тоже.
В такси да, там антошка любитель микросервисов на С++ работает, поэтому их там и используют, хотя изначально такси на питухоне было написано.
Хотя есть другие проекты, которые на С++ пишутся. Но не прям все, скорее половина или даже меньше.
>Бэкенды бОльшей части сайтов, куда ты ходишь
Бэкенды написаны на пхп. Тот же фейсбук и вк используют пхп, хоть и с существенными модификациями.
>Маркет написан на жабе
То то меня уже 4 года туда крестовиком хайрят в 2 разные команды.
> фейсбук
Друг там в менло-парке крестовиком так же работает
Судя по расширению, она должна инклудиться как заголовочный файл.
А по твоему error report она компилируется как файл .cpp.
Qt
>То то меня уже 4 года туда крестовиком хайрят в 2 разные команды.
Diversity in recruitment. Глянули твои поисковые запросы про членодевок и няшных кунчиков и решили, что надо тебя взять по квоте.
>яндексе
Плотют нихуя, даже по сравнению со сраным сбером.
Топ места для плюсовика это хуавей, нвидиа и интел, но туда хуй попадешь, так как места буквально нужно резервировать будучи студентом 3 курса профильной кафедры мфти.
Как мне сделать, чтобы работало и static_cast<unsigned int>(myclass("12345678")) == 12345678? Я хз даже где и что начать писать.
В Касперском вполне нормально. Хотя сейчас в основном на KOS набирают, а там я не знаю какая внутренняя кухня.. И слышал что в JetBrains хорошо, но там когда смотрел в последний раз почти все чисто плюсовые вещи заняты, извольте знать Джаву.
Пишешь оператор приведения к инту myclass::operator unsigned int() const
https://en.cppreference.com/w/cpp/language/cast_operator
Вот есть у нас сегмент данных и сегмент команд в ОЗУ.
Процессор выполняет одну операцию за раз (в нашем случае).
Заносим данные и команды из памяти в регистры процессора, волшебство, затем обратно в память. Так же это в простейшем случае?
Зачем создавать еще один буфер между программой и процессором, если мы можем обращаться к самой программе, к этим данным. Короче я спутано написал. Но вот может кто привести пример, когда это именно эффективно?
Аппаратный Стек в первую очередь нужен для вложенных вызовов подпрограмм, чтобы туда складывать адреса возврата. Остальное уже добавили для удобства до кучи
Раньше (да и, наверное, есть и сейчас такое) в некоторых микроконтроллерах для каждой переменной было своё место в памяти. Вот есть у тебя функция
int f(int x) {
int y = x + 2;
return y;
}
У "x" адрес, скажем, 0x1000, у "y" 0x1004. И все операции над ними действительно проводились с этой памятью. И вроде всё работает, но, если подумать, то рекурсивные вызовы становятся невозможными (напиши вычисление чисел Фибоначии и посмотри, что пойдёт не так). Но хрен с рекурсией, обойдёмся. Гораздо хуже дело обходится с многозадачностью. Любой кусок кода теряет реентерабельность. Если два потока одновременно зайдут в эту функцию, то они распидорасят данные друг друга. Если данные хранить на локальном стеке у каждого потока то всё получается как надо.
Ещё стек нужен для обработки исключений. Иначе будет не понятно какие данные и операции над ними нужно провести для отката в валидное состояние.
>Или вовсе вернуть итератор, который при разыменовании будет возвращать новое значение.
Это называется генератор, а не итератор.
А что в Касперском по зп?
Вообще тема инфобеза довольно интересная, тот же networking со всякими анализаторами трафиками на dpdk прикольная область, но кроме касперского знаю только positive technologies, на которые наложили санкции, и group-ib. Интересно что у них по зп.
Вообще с радостью пошел бы пилить всякие СОРМы, но боюсь условия труда будут крайне хуевые.
Оправдывайтесь.
https://ideone.com/XdxRL9
1.Что за числа в выводе Apple (Red delicious,red,7.3)12142, откуда?
2. Почему если методы оставить константными, но убрать const у ссылок на возврат все перестает работать?
string& getName() const { return m_name; }
СОРМы пилят в НТЦ Протей
Если метод const, то все члены считаются const.
return m_name; запросит запрещенное преобразование const string в неконстантную ссылку.
И вобще, возвращай по значению в подобных случаях. Return value optimization все сделает в лучшем виде.
В гонке за право насасывать копетану галеры?
>И вобще, возвращай по значению в подобных случаях
В подобных случаях надо кокрастыке возвращать "по ссылке"
> Return value optimization все сделает в лучшем виде.
Он тут вообще не при делах
эти данные я отрисовываю в виде графиков и показываю. Я научился показывать один файл данных, но вот с показом этих данных за все дни у меня возникла проблема, потому что я не знаю паттернов как все это может быть устроено.
Как мне реализовать реалтайм тайм загрузкуи показ этих файлов?
Например я кручу график влево, данные первого файла кончаются и программа понимает, что надо скачать второй файл, она его скачивает и уже пдгружает мне второй файл.
Есть еще одна загвоздка я как то могу химичить с данными, то есть преображать все данные из файла в другие данные.
Что мне реализовать? event -loop с пулом воркеров? или что то другое.
Да, ты прав. get-метод не тот случай.
Читай книги, пиши код
>>>2168840
Ну ты и нахуевертил.
У тебя массив указателей. Память под сами указатели ты выделяешь, а указатели указывают в никуда.
Последний считанный cin'ом символ печатается при следующем вызове cout, в самом начале вывода (после этого потерявшегося символа идёт нормальный вывод cout). Может ли это возникать из-за того, что я в программе использую и cin/cout, и printf? Как фиксить, если fflush не помогает? вечно в крестах какая-то ебанина с вводом выводом
>>169092
Код показать не могу, меня за это набутылить могут (да и к интернету мы тут не подключены).
Короче проблема решилась сама себе, просто добавил новый метод классу и внезапно лишний символ перестал печататься, при том что ввод вывод имеющихся методов я никак не трогал. Ебать фантастика, как вы на этом пишете вообще.
Пишется "фантастика", читается "UB".
Это у тебя какая-то бага, запускай valgrind, санитайзеры и ищи. Даже sync_with_stdio(false) не должен таких эффектов показывать. Но вообще cin/cout та ещё хрень, не рекомендую пользоваться.
>считывается один символ cin'ом (это в главной функции)
>проходит передача по каналу и обработка информации, много чего выводится на экран cout'ом, всё это происходит внутри методов класса и выводится без каких-либо проблем
>возвращаемся обратно в главную функцию, здесь первый же cout сначала выводит считанный когда-то ранее символ, а потом уже то, что должен
Очень ли плохо то, что у меня вывод делается иногда cout, а иногда printf? Или все из-за того, что внутри класса они используют какой-то другой поток вывода, не тот что в мейне?
А чем пользоваться, scanf/printf? Или какую-нибудь кастомную библиотеку подключать?
могу только подсказать что ты прекрасно все это сможешь сделать в одном потоке, и ни слова больше потому что лень объяснять что то таким мелкочеликам как ты, несмотря на то что ты по видимому уже зарабатываешь своим говнокодом на хлебушек с маслом а я безроботное говно, ну а вообще конечно ты можешь прикрутить "эвентлуп с пулом воркеров" чтобы когданибудь твой говнокод попался на глаза нормальному кодеру и он уссался бы с тебя
>Топ места для плюсовика это хуавей
вчера в /b в одном из тредов кстати заявляли что хуайвей обосрался со своей новой операционкой потому что набрал кодеров из россиюшки
хз, пиздел ли анон, проверять лень
Надо написать программу, выполняющую один раз ввод последовательности
целых чисел, признаком конца которой будет ввод числа ноль (ноль не считается членом
последовательности) и определяющую значения в соответствии с условием варианта.
Входные данные: Последовательность целых чисел, заканчивающаяся нулем.
Выходные данные: Найденные значения с пояснениями
При выполнении работы необходимо учитывать, что
• последовательность может быть пуста
• может не содержать элементов нужного типа для решения задачи типа
• может не содержать необходимого для решения задачи количества элементов.
И так же определите наибольшую длину монотонного убывающего фрагмента последовательности (то
есть такого фрагмента, где все элементы меньше предыдущего).
желательно с пояснениями
бог поможет
Что значит не можешь? Заебали, пишите хотя бы компилируется оно или нет. А то что с памятью там пизда и при запуске всё полетит через три сегфолта, так это проблема не класса и не метода.
Что за хейтер кстати? Небось давно уже помер от геморроя на пару со своей мамашей а шапку так никогда и не обновят.
Сьеби уже
Почему это должен быть какой-то конкретный анрн? Просто любой абстрактный шарпорастоблядок.
что значит окмпилируется? ошибок красных нет, но выдает предупреждение по памяти
> так это проблема не класса и не метода.
так а как исправить? чтобы к методу можно обратиться было
По сути из плюсовых вакансий в мск онли Яндекс за редким исключением, в то время, как всякие озоны, сберы да и тот же яндекс много всего пилят на вышеупомянутых языках и платят за это овердохуя шекелей.
Когда в плюсы завезут нормальный тулинг, на это можно будет надеяться.
Сбер крестовиков хайрит, но оверолл - язык не очень живой, и если хочешь денег - лучше задротить либо ГОвно, либо фронт. Да, продажа души за деньги
>так а как исправить? чтобы к методу можно обратиться было
Пройдись отладчиком уже.
>tmp->get_name(); //почему я не могу обратиться к методу?
tmp имеет тип указателя на player. Проблема в том, что в этой точке (строка 43) этот указатель не указывает ни на какой объект player.
Простого исправления тут нет. Выпили весь класс нафик с этими new и используй vector. Плееров добавляй через push_back().
Спасибо большое!
Ебался 8 часов с одной лабой и 70% времени заняло прыганье по форумам и гуглёжка потому что не знал за сщуествование векторов а потом ебался с оператором friend std::ostream& operator<<
И при этом большинство ошибок было банально из-за невнимательности, потому что к началу 1 часа голова уже плывёт невероятно
У нас нет лаб. всем похуй. уже 3 курс идёт
Вот поэтому универские лабы и должны быть на паскале или питоне, чтобы не ебаться с синтаксисом.
>Как думаете, бэк на плюсах будет когда-нибудь так же распространен и востребован, как написанный на Govnishe/Java/#/Py?
Какую задачу он будет решать? И какова скорость разработки? Есть ли удобные фреймворки или может как на go можно в 3 строчки поднять сервер?
>много всего пилят на вышеупомянутых языках
А тут все просто, каждый язык и фреймворки решают свою задачу.
Go - микросервисы с хайлоадом и многопоточностью, все есть из коробки, запустить сервер можно в 3 строчки прям как в express.js и это дает высокую скорость разработки. Но делать что-то большое уже сложно.
Java - тут на спринге делают большие тырпрайзные приложения с длительным сроком поддержки, сюда же можно и .net припахать, иногда на спринге пилят микросеервисы, но я в живую не видел.
python, php, js, ruby - всяко-разно для бэка от пхпшного симфони, который почти спринг, до express.js, sinatra, flask на которых хуяк-хуяк и в продакшн. Там заняты все ниши которые возможны, скорость разработки высокая.
Короче в бэке +/- все уже есть, скорость быстродействия в большинстве случаев не так важна поскольку для клиента не особо важно ответили ему за 100 мс или за 10, плюс еще всякие запросы в базу, время коннекта, запросы во внешние апи и прочее танцы с плясками, которые нивелируют эти милисекунды. Плюс нагрузку можно распределять, девопс напишет заклинание в конфиг балансировщика, поднимет еще пару подов и готово. А если в конечном итоге нет большой разницы что брать, то выбирая между go и c++ выберут то на чем можно быстрее разрабатывать или то что лучше поддерживать
> пилишь бэк на плюсах
> падает прод
> зато 5% прирост
>group-ib
Как показала практика, лучше в инфобез не лезть вообще.
Грузить джейсоны и клепать однообразные круды гораздо безопаснее, чем лезть в вундервафли и настоящий цифровой гулаг.
>бэк на плюсах будет когда-нибудь так же распространен и востребован
Нет, и никогда такого не произойдет. Причина очень простая - С++ сложный, и вместо того, чтобы сосредоточиться на бизнес-логике и высирать код, я должен держать в памяти информацию о кучи подводных камней, которые могут разом обрушить сервер.
В этом плане джава в своей время оказалась очень успешной - есть ООП и относительно неплохая стандартная либа, но в то же время не нужно задумываться о конструкторах копирования, операторах присваивания и пристально следить за тем, куда там скопировались указатели, чтобы не дай бог double free не случилось или утечки.
js, php, python, хоть и имеют динамическую типизацию, но все равно способов отстрелить ногу гораздо меньше, а скорость разработки высокая.
>в то время, как всякие озоны, сберы
В ритейле, банках и телекоме (если не брать железячные темы), С++ не место. Там как раз популярна джава на бекенде, так как можно десятилетиями поддерживать один и тот же проект, изредка перекатываясь на новую версию спринга и jvm.
>>169573
>Сбер крестовиков хайрит
Там сбердевайсы вроде крутые. Но опять же, это не банкинг, а больше про IoT и желание сбера стать айти гигантом на рынке РФ.
Если брать классический С++ в банках, то это окажется ембеддед вроде pos терминалов и банкоматов с написанием хуевин под старый добрый winXP в некоторых особых случаях
>ембеддед вроде pos терминалов
Оооо. Я в таких терминалах малварь sqlite видел. Вот в бэке есть базы данных с репликами, шардингами, бэкапами и вообще это ещё архитектить надо. а там тупо сделали sqlite файлик вместо бд чтобы чуть какая авария можно было его на флэшечку скинуть, отредактировать и вернуть обратно. Уже представляю грандиозность задач в ембеддед, где непременно нужны кресты
>бэк на плюсах
Удел плюсов в будущем - всякие системные хуевины и платформы для разворачивания более высокоуровневых ЯП.
Чтобы поддерживать условные V8/JVM/CLR, mysql/postgres много людей не нужно - от силы по паре тысяч плюсовиков в google/oracle/microsoft. Для графики все аналогично, для всяких там кадов хуядов тоже.
С++ это очень штучная вещь, для которого много вакансий быть в принципе не может, особенно в СНГ или нищих странах европы, где толком и нет своих разработок в системщине, а основной доход в ит это энтерпрайзы, живущие за счет нефтяных бюджетов
>особенно в СНГ
Здесь это может компенсировать всякий епам, который в снг на любой стэк нанимает даже плюсы.
Смотря какой бек. Я вот поддерживаю на крестах компилятор внутрепроприетарного графического языка чтобы наши навигаторы мышкой свои алгоритмы рисовали и ещё кучу дсл. Это все бек по сути.
>>158726
дрочить не надо. Заниматься надо.
Прочти Прату или Липпмана ( Essential C++) или Эккеля.
Из нового Ivor Horton Beginning C++17/20
Короче бери любую базовую книгу по плюсам. потом смотри более углубленно темы. Надо читать, надо запускать, надо гуглить.
для "мы вам перезвоним" нужно еще чутка почитать алгоритмы и структуры данных и погуглить 400 вопросов на собеседовании С++.
Прочтешь хоть одну книгу по плюсам, уже 200 вопросов считай прошарился.
Это все вполне реально.
Да, язык можно изучать бесконечно.
>>158782
https://pdfdirectory.com/pdf/0880-learning-c-programming-lanuage.pdf
>>159596
паука для парсинга сайтов
>>167323
Смотря под какие задачи. Кроме буста есть ACE, POCO, SFML, RapidJSON,nlohmann,tinyxml,
Крупные галеры погоды не делают. У них под C++ примерно такой же процент вакансий как и на открытом рынке. Ну и сами галеры предпочитают энтерпрайз с долгими контрактами или вёб, чтоб быстро и без гемора срубить бабла.
бля, ты не слушай этого мудака залетного
вангую это тот же челик что недавно заявлял тут что "шаблоны с++ ничего не знают о типах языка" и его никто не смог переубедить
а щас он че-то там про явку в ритейле, банках и телекомах вещает ничего не понимая в откатных говносхемах наших манагеров-кабанчиков, что происходили в середине нулевых когда эти системы переписывали с крестов и дельфи на говноявку
>че-то там про явку в ритейле, банках и телекомах вещает ничего не понимая в откатных говносхемах наших манагеров-кабанчиков, что происходили в середине нулевых когда эти системы переписывали с крестов и дельфи на говноявку
А что не так? Всем уже давно очевидно, что гораздо проще поддерживать жирный ритейл с легаси на явке, чем на С++. Банки туда же. Там где нет нужды в low latency, то смысла в С++ ровным счетом 0, одни убытки будут.
struct Node {
Node next;
subNode subhead;
};
struct subNode {
int data;
subNode next;
};
Думал над таким вариантом, но в строке >subNode subhead; выдаёт ошибку: C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Буду очень благодарен
struct Node {
Node next;
subNode subhead;
};
struct subNode {
int data;
subNode * next;
};
rКурсив включился
У него предмет называется "Программирование на С++", значит, про лабы надо спрашивать здесь.
Потихоньку с плюсов пересаживаются на жилистый мускулистый питон.
Слышал, но не изучал. Спасибо, пойду читать. А мой вариант с указателем не взлетит, да?
>структура может быть любого размера (в разумных пределах) и включать в себя любое количество элементов
Если ее структура будет известна только в рантайме, то шаблоны не помогут. Надо будет передавать в том числе информацию как она устроена в самой структуре, это ООП во все поля. У тебя будет древовидная структура полиморфных объектов представляющих собой какие то значения, юнионы, даблы , массивы и тп, которые будут выдавать о себе информацию в рантайме, для получения их значений или ссылки на свои дочерние объекты. Это не так сложно на самом деле, у нас постоянно используется.
Нужен годный аутсорс-сайт где я, бедная cpp-макака ,смогу заработать на еду. Сорок usd в месяц будет достаточно. Готов хуярить по 8 часов в день, лишь бы получать свои копейки на пропитание. Желательно что бы заказчиками были частные лица, которым нужен не сам код, а непосредственно работающая программа.
советуйте только то, чем пользовались сами
Кушать хочу. Идти на дноработку не вариант. Да и не нужно на самом деле. Ведь я же не просто так 4 года на цпп пишу? Наверняка есть возможность заработать на паек. Тогда можно хикковать занимаясь любимым делом
А на 40 баксов в месяц реально выжить? Даже с учётом в того что живёшь в нижнем усть-залупинске
Конечно. На еду хватит
Ну да, гречка, макароны красная цена, по праздникам фрукты.
Эта фраза детектор дебилов на самом деле. Конечно понимаю, а ты - нет.
Очевидно, что "структура" - это не только сишная хуйня struct, но и произвольная последовательность байтов, в которой закодированы поля.
Смотря что у тебя пара символизирует.
выжить можно было на подсчитываемый раньше государством прожиточный минимум (он был 10-12 тыщ рублей в регионах, в москве больше)
но при условии наличия собственного жилья и налаженого быта в квартире, плюс наличие каких-то запасов одежды, плюс (это важно) человек должен уметь готовить и быть подкованным в жизни, хоть немного
сейчас гос-во отказалось от рассчета минимального прожиточного минимума исходя из потребительской корзины, сделав другие метрики, сделав еще один шаг к демонтажу структур социальной помощи в государстве
чел ты продолжаешь обнажать уровень своего невежества
Ебать ты дебилоид. У меня средняя пека майнит 60 баксов в месяц, а тебе надо въябывать 8 часов. ОРУ С ДОДИКА
Структура должна уметь создаваться в зависимости от действий пользователя, конфигурационных файлов, данных из сети и тп. А рефлексия для этой цели это костыль в языках типа шарпа для дебилов.
> написать только на c#? хоть и калькулятор написан на c++, в нём используется управляемый код. qt так умеет? будет ли вообще уметь? qml?
на WinRT вроде подобное реально сделать
Ну да, c# если по нормальному
Криптошвайн-маняфантазер,спок
На qml пишется легко все кроме верхней полоски м крестиком. Работающую картинку как у тебя можно набросать за минут 15 наверное, там кресты будут нужны только для пуска, все остальное на qml и js.
https://pastebin.com/beM0n3s9
Этот код компилируется и даже запускается, но работоспособность проверить я уже не успел. Норм шаблон написал или хуйню сделал?
Поиск по вектору структур, состоящих из идентификатора команды и вектора строк ее обозначающих.
Знаю, что можно просто из функции вектор по значению вернуть, и за счёт RVO + move конструктора, если просто так написать
vector<string> v = f();
то всё будет норм.
Но всё же..
Тебе же нужен и итератор и сама коллекция. Возвращай кортеж из них, типа: auto [v, i] = f();
А, да, я дебич, ещё же end нужен. Тогда нужно возвращать два итератора, begin и end. Возвращать и вектор, и итератор - это как-то странно, проще тогда один вектор вернуть и из него достать begin и end.
Просто у меня в голове интерфейс функции в этом случае хорошо бы сделать абстрагированным от того, какая конкретно коллекция используется для хранения строк. Чтобы была просто возможность просмотреть их, возможно, сохранить куда-то себе.
а как именно АЛГОРИТМЫ учить?
Есть такой язык VEX, он является внутренним языком скриптинга в программе Houdini, и его синтаксис частично основан на C/C++. Так вот, недавно столкнулся с такой вот конструкцией:
var_a = (int) number;
хотя я бы написал так:
var_a = int (number);
Мне стало интересно откуда это, в хэлпе по самому VEX-у ничего подобного нет. Возможно, ноги растут из самого C++, вам знакома такая конструкция?
Ок, спасибо. Значит сделали для удобства оба варианта.
Такой странный вопрос...
Вот можно писать массивы не как array[3], а (array+3).
А что на счет многомерных? Получается там же array[2][3] = array[23] = (array+23) или тут все таки 2+3?? Но вот незадача - последний вариант не работет даже с "+"!
Такой вопрос: как правильно писать, что бы это рабьотало? И как быть с многомерными массивами?
Забыл: *(array)
Чел, если ты сишник - бери любую книгу для нюфань и читай. Ты уже на классах охуеешь.
Как вариант - курс на куросере от яндекса
Для ОПа — надо в следующем треде воткнуть ссылку https://github.com/sosachbot/cppthreadhat
да
Да я мимошел. На доске про программирование нет специального тега для кода, лол.
Абу, explain yourself.
Лайки в параше и флажки стран ему было пилить не лень, а один ебучий тег с заменой на <pre><code> хуй.
Пиши свой сплиттер, делов на пару строк на питоне.
#file имя файла
Код
...
#file имя файла 2
Код
Он тебя про модули спрашивал, а ты опять пирдолигн свой толкаешь((9
Лет через 10-15, когда с Qt будет то же, что сейчас с Borland C++ Builder.
Спасибо за совет, но я не думаю, что там будет очень сложно, ведь про ООП уже знаю, да и более-менее реализовывал его на сишке.
Никто тебя и не заставляет разделять их, если тебе не нужны отдельные компилируемые единицы.
Хорошо почитать и посмотреть примеры про наследование\инкапсуляцию\полиморфизм.
Понять, что инкапсуляция это охуенно, наследование хуйня, полиморфизм редко где нужен.
И дальше писать код и набираться опыта.
Объект - существительное.
Свойство - прилагательное.
Метод - глагол.
Все, теперь ты знаешь ООП лучше 90 % манятеоретиков.
Хзы что ты именно хочешь, можешь про solid почитать
Узнаешь как ооп в архитектуре используется и для чего
Но инкапсуляция и правда не нужна. Зачем мне самому себе строить ограничения на ровном месте?
Пока ты один в проекте, то может быть и незачем. Когда у тебя команда - инкапсуляция становится критически важна. При грамотном подходе человек использующий твой класс не сможет разрушить заложенную тобой логику и будет его использовать его правильно. Когда у тебя нет инкапсуляции, то любой человек в проекте будет пытаться прострелить себе ногу.
Зачем? Разделение .h и .cpp это лучшее, что придумано людьми. Ты без проблем можешь писать все в одном файле и сейчас.
Да, охуенное разделение, охуенно работает. Определения шаблонов всё равно приходится писать в хедеры. Плюс говно по типу namespace impl, чтобы скрыть детали реализации.
>Определения шаблонов всё равно приходится писать в хедеры.
Потому что .cpp это единица трансляции который в конечном итоге дает скомпилированный, но не линкованный .obj файл. Все шаблоны/их типы должны быть вычислены ДО начала трансляции кода, т.к. язык строго типизирован.
>Плюс говно по типу namespace impl, чтобы скрыть детали реализации.
И что в этом плохого?
Модули починят
Не знаю, извини(( Я понимаю про шаблоны, но просто нахуй тогда пытаться делить на хедеры и сорсы, если всё равно всё в кучу в хедерах получается?(( Мне нравится идея того, что в хедерах публичный интерфейс, но то, что туда надо ещё пихать шаблоны и туда иногда ещё попадают вещи, не касающиеся публичного интерфейса, которые можно разве что попытаться скрыть...
Кажется, в модулях эти проблемы решены, вот насчёт шаблонов не уверен, но я ещё сам их не пробывал... Не знаю, какая там поддержка их в например симейке.
А ладно
я на js пишу так-то, с++ только с лабами вот мучаюсь
>ООП
понять что такое гомоморфные иерархии классов и статический/динамический/adhoc полиморфизм и их use cases
понимать что все остальное про что будут писать и говорить про ооп в контексте с++ - буллшит и игнорировать
не путать компонентное программирование через эмуляцию интерфейсов и ооп, это блядь разные приемы в с++
как то так
но лень объяснять, потому что кто это знает тот знает и молчит, кто не понимает тот посчитает этот текст сумашедшим высером
Толсто.
ну вот первый буллшитер, к примеру
инкапсуляция и ооп вообще никак не связаны, за мантру "ооп это наследование инкапсуляция полиморфизм" нужно валить на пол и бить ногами
Расскажи нам, работник гугла\фейсбука, что такое ООП. Желательно без софистики, что тру ооп было в смоллтолке, а сейчас это все хуйня
template <typename T>
class MyClass : public T
{ ... };
Пока прикинула план шифрования и дешифрования, но как-то с кодом не получается. Подскажите пожалуйста, как это сделать.
Шифрование:
1) берем алфавит, для него рандомно делаем таблицу, по которой будем шифровать (просто меняем буквы местами)
2) в кодовом слове определяем номер каждой буквы (например а-0, б-1, в-2 и тд)
3) по номерам заменяем эти буквы из таблицы для шифрования
Дешифровка:
Нам понадобится та же таблица, только уже в ней будем искать букву, смотреть ее порядковый номер и заменять на изначальную букву
Я нихуя не понял. Ты хочешь перемешать строку? Вот алгоритм
https://en.m.wikipedia.org/wiki/Fisher–Yates_shuffle
Копируешь откуда-нибудь PRNG функцию, чтобы генерить номера символов для алгоритма и перемешиваешь. Ключом будет сид PRNG.
Чтобы восстановить, наверное, просто в обратном порядке обменов делаешь этот алгоритм. Только тогда придётся ещё заранее сгенерить все номера символов с тем же сидом, чтобы пройтись по ним в обратном порядке по ходу алгоритма.
Тоже говно идея, но по крайней не такая шиза, как у тебя.
>но просто нахуй тогда пытаться делить на хедеры и сорсы, если всё равно всё в кучу в хедерах получается?((
Я написал выше про шаблоны. Все остальное можно писать в одном .cpp файле. Есть даже прием для ускорения сборки - все собрать в один .cpp и оттранслировать только один юнит.
Изначально смысл хедеров описать один раз объект/функцию/перечисляемые типы и использовать потом везде. Если не использовать заголовки, то придется объявлять прототипы функций каждый раз когда ты захочешь заюзать функцию из другого юнита трансляции.
>Мне нравится идея того, что в хедерах публичный интерфейс
Так и должно быть.
>но то, что туда надо ещё пихать шаблоны и туда иногда ещё попадают вещи, не касающиеся публичного интерфейса, которые можно разве что попытаться скрыть...
Тебя никто не заставляет использовать шаблоны (исходя из своего опыта могу сказать, что если ты собрался заюзать шаблоны, то возможно стоит пересмотреть архитектуру того, что ты делаешь сейчас, т.к. есть вероятность, что ты делаешь что то не так). Тем не менее они полезны. Метапрограммирование в крестах весьма мощная штука и позволяет решать нетривиальные задачи. В моей практике это иногда встречается (геймдевелопер 25 лет опыта). Однако необходимость пилить шаблоны в хедерах не является какой то проблемой по сравнению с задачами которые они позволяют решить относительно малой кровью.
>Не знаю, какая там поддержка их в например симейке.
cmake не поддерживает шаблоны, лол. А вот любой современный компилятор все это поддерживает нормально.
ооп это та или иная форма полиморфизма и ничего больше
даже наследование не более чем инструмент для его организации
инкапсуляция вообще не причем, отдельно от ооп
>человек использующий твой класс не сможет разрушить заложенную тобой логику и будет его использовать его правильно.
Помню как приходилось переписывать по половине функционала, потому что ОО-дебилы ИНКАПСУЛИРОВАЛИ всякие мелочи, которые внезапно оказались важными для решения некоторых задач. И это в питухоне, Карл!
У меня есть коллега, который презирает уровни доступа С++. Он работает на низком уровне, использует С++, как С с классами. Драйвера, софт для embedded и т.п. Когда я ему начинаю говорить про типобезопасность, инкапсуляцию, он говорит, что возьмет и получит нужные данные по смещению. Ну и что ему возразишь? Ничего. Он прав. Если кто-то захочет - он сделает. Даже в мейнстримовых песочницах можно. Вопрос цены только.
Конечно это не значит, что нужно все это забыть. Но категоричность сбавить можно было бы :)
Где на практике нужны эти алгоритмы, кроме графики и хайлоада? В десктопных приложениях, в реализации протоколов максимум std::sort пригодился.
мимо разраб жирного эмбеддеда
долбоебам закон не писан
Это что за хуйня он не может неявно преобразовать bool в std::optional? Пиздец как я заебался на этом говне писать.
Это специально было сделано, тётя Дуня. Проверяй опшнлы и корректно забирай значения, а не забивай хуй.
В чём смысл передавать в метод set optional? Это как-то тупо, проще и логичнее вынести этот if (value) в код, который вызывает set. Это не область ответственности сеттера, он не может корректно обработать отуствтие значения в опшенале, как мне кажется.
Вывод типов... Ну да, придётся добавить <bool> к вызову метода.
Как раз таки это класс я сделал специально, т.к задача заключается в том, что приходит некий результат с полями обернутыми в optional и смысл в том, чтобы если значение есть формировать поле в джейсон, а если нет - нет.
>проще и логичнее вынести этот if (value) в код,
Как раз наоборот, изначально было в коде тупо проверка ифами по всем полям, где я нашел пару ошибок + это дублирование кода.
>Вывод типов... Ну да, придётся добавить <bool> к вызову метода.
Нет, приходится добавляться set("sdad", optional{true})
Не явное преобразование - грех
Ты уже умнее 90% вкатунов, хоть и смешал плюсы с сишкой.
>изучаю c++
Нахуя? Я вот пытаюсь наоборот с него перейти куда-то после 10 лет поедания говна на нем.
Запомни: С++ - это когда пахнет говном в офисе
Кушать хочется. Ещё есть стул в виде раста, но он мне кажется сложноватым пока что.
Раст во-первых намного проще перегруженного цпп.
А во-вторых, нахуй тебе эта низкоуровенвая параша? Ебаш Котлин или С# и кайфуй от жизни.
Ну хз, концептуально раст кажется сложнее.
>А во-вторых, нахуй тебе эта низкоуровенвая параша?
Чтобы держать мозг в тонусе, так сказать. Ещё можно обмазаться абстракциями и стать фп-каргокультистом, но я пока ещё хз, хуже это или лучше.
Ну конечно низкий уровень знать желательно, но не критично в зависимости от прикладной области. Но лучше знать и понимать алгоритмы и уметь выражать задачи на абстракциях языка. Так что чтобы держать мозг в тонусе, лучше фп. Но если ты только вкатываешься, начинать с хаскеля тебе будет сложно. Так что мой совет F# - это OCaml со встроенным dotnet, ахуенная штука, которая позволяет писать на функциональном языке и пользоваться dotnet фреймворком.
Но но, мясовор же!
Интерфейс надо реализовать самому, а реализация уже реализована, осталось только расширять.
>Запомни: С++ - это когда пахнет говном в офисе
дык это от тебя шмонит говнецом: разьебанная срака не держит уже
>перегруженного цпп
в цпп нет ничего ненужного
целый комитет яйцеголовых стоит на страже не допуская добовления в язык лишней семантики! а существующий синтаксис лишь обслуживает семантику!
>фп-каргокультистом
современный с++ к этому не располагает
разве что ты хочешь ретро-кодинга, развлекаясь метапрограммированием на с++98..
>F# - это OCaml со встроенным dotnet, ахуенная штука, которая позволяет писать на функциональном языке и пользоваться dotnet фреймворком
если есть 2 квартиры, одну сдаешь, во второй живешь, и еще если умеешь жить экономно (варить борщ) то Ф решетка - твой выбор
в остальных случаях не советую
следующий вопрос, это слишком легко
В справке написано
Constructs a page setup dialog that configures a default-constructed QPrinter with parent as the parent widget.
То есть, я могу вызвать опцию без параметров и он должен настроить принтер который есть в моём экземпляре класса? Но почему тогда в функции выше он создаётся заного при нажатии кнопки? Может его нужно создать один раз, при инициализации класса?
типичная двачная пидоражка
Ну можно ещё через итераторы попробовать сделать
Но итераторы в плюсах уродливые, получится только хуже
Так что я бы так оставил
только бы сделал фор по коллекции, а не по индексам
как раз нельзя (или у меня не получилось), потому и вопрос. data1 и data2 хранятся на стеке, а в ptrData нужно передать указатели на них
Так-то было бы красиво написать ptrData.insert(data1.begin(), data1.end()) - но это не работает, так как итератор хранит значение.
Ктулху призываешь?
Что бы тебя не обоссали на лабекодревью, то можешь лямбду вынести. Пикрелейтед агейн.
Все тот же мимо другой анон.
Код говно на самом деле. У меня никогда не получается с первого раза норм. За это я получу страпон.
Все тот же мимо другой анон.
Вот код, который я скопировал с какого-то сайта и он рабочий, создаётся окно, в котором вращается треугольничек
Я решил перенести весь этот код внутрь класса (Всё что внутри main я перенёс в отдельный метод setwindow). И в итоге в методе setwindow при вызове glfwSetKeyCallback(window, key); возникает ошибка
аргумент типа "void (class1::)(GLFWwindow, int key, int scancode, int action, int mods)" несовместим с параметром типа "GLFWkeyfun"
c glfwSetErrorCallback(error); примерно та же ошибка
как фиксить?
Изначальный код:
void error(int error, const char description)
{
fputs(description, stderr);
}
void key(GLFWwindow window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
void display(GLFWwindow window)
{
int width, height;
glfwGetFramebufferSize(window, &width, &height);
float ratio = width / (float)height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef((float)glfwGetTime() 50.f, 0.f, 0.f, 1.f);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 0.f, 0.f);
glVertex3f(-0.6f, -0.4f, 0.f);
glColor3f(0.f, 1.f, 0.f);
glVertex3f(0.6f, -0.4f, 0.f);
glColor3f(0.f, 0.f, 1.f);
glVertex3f(0.f, 0.6f, 0.f);
glEnd();
}
int main()
{
glfwSetErrorCallback(error);
if (!glfwInit())
exit(1);
GLFWwindow window = glfwCreateWindow(1000, 1000, "TEST", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(1);
}
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwSetKeyCallback(window, key);
while (!glfwWindowShouldClose(window))
{
display(window);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
Вот код, который я скопировал с какого-то сайта и он рабочий, создаётся окно, в котором вращается треугольничек
Я решил перенести весь этот код внутрь класса (Всё что внутри main я перенёс в отдельный метод setwindow). И в итоге в методе setwindow при вызове glfwSetKeyCallback(window, key); возникает ошибка
аргумент типа "void (class1::)(GLFWwindow, int key, int scancode, int action, int mods)" несовместим с параметром типа "GLFWkeyfun"
c glfwSetErrorCallback(error); примерно та же ошибка
как фиксить?
Изначальный код:
void error(int error, const char description)
{
fputs(description, stderr);
}
void key(GLFWwindow window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
void display(GLFWwindow window)
{
int width, height;
glfwGetFramebufferSize(window, &width, &height);
float ratio = width / (float)height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef((float)glfwGetTime() 50.f, 0.f, 0.f, 1.f);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 0.f, 0.f);
glVertex3f(-0.6f, -0.4f, 0.f);
glColor3f(0.f, 1.f, 0.f);
glVertex3f(0.6f, -0.4f, 0.f);
glColor3f(0.f, 0.f, 1.f);
glVertex3f(0.f, 0.6f, 0.f);
glEnd();
}
int main()
{
glfwSetErrorCallback(error);
if (!glfwInit())
exit(1);
GLFWwindow window = glfwCreateWindow(1000, 1000, "TEST", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(1);
}
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwSetKeyCallback(window, key);
while (!glfwWindowShouldClose(window))
{
display(window);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
Ложная тревога, сделал key статиком и ошибка пропала
Вот код:
uint32_t Tn = TCNT1 / 2;
uint32_t Time = (T * 30000) + Tn;
char Str[16];
uint8_t n=sprintf(Str, "%lu\n", Time);
Я пробовал модификаторы
%u
%d
%lu
%ld
%llu
%%lld
%lu\n
%ld\n
%llu\n
%lld\n
Ничего из этого не заработало.
Выручайте, молю.
А какие более-менее универсальные алгоритмы там применяются и как? Что-то связанное с деревьями, скорее всего?
Ну хуй знает...
В итоге в 99% случаях пишешь фунс(а.бегин, а.енд)
Александреску и Страуструп, кто ж ещё.
Их дело придумать, не им же потом на этом говне писать.
алсо, остоеться надеяться что ты студентик еще, а не работаешь на российскую оборонку :P
я могу только сжимать свое очко чтобы говно не вываливалось, думаю в моем возрасте это неплохое достижение
а я язык трубочкой сворачивать - кто лучше?
жаль, что ушами двигать не могу и поднимать одну бровь тоже не умею
Пишу с телефона. Тебе надо сделать вот что. Берёшь arr[4] чаров и свой uint32_t val и делаешь так - arr[3] = val >> 24; arr[2] = val >> 16; arr[1]= val >> 8; arr[0] = val;
Имеешь ввиду эту строчку? >uint32_t Time = (T * 30000) + Tn; где T у тебя был 8 бит? У тебя что за компилятор? MSVS собирает этот код, т.к. выполняет автоматическое преобразование типовю
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число— максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
(Пикрил )
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1≤N≤100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 32.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число— максимально возможную сумму, соответствующую условиям задачи.
Входные данные.
(Пикрил )
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1≤N≤100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример организации исходных данных во входном файле:
6
1 3
5 12
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 32.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
Почему, кстати, здесь не воспользоваться reference_wrapper?
Class1(Сlass1* pre){
a=0;
prev=pre;
next=nullptr;
pre->next=И ВОТ ЧТО ТУТ ПИСАТЬ? ПРОСТО &Сlass1 НЕ КАТИТ, Т К ЭТО ИМЯ ТИПА
}
this?
Возможно свои особенности какие то есть. Эта фича называется Implicit type conversions и возможно не поддерживается твоим компилятором.
>лучше всего
в трейдинге были неплохие зарплаты
>чищу вилкой говна
легаси говна?
>будет ли выхлоп
Если ты действительно шаришь в какой-то предметной области, то да.
Финансовая индустрия - во всех инвестбанках, хеджфондах, частных трейдерских компаниях есть внутренние монструозные числодробилки
Некоторое количество плюсовых работ есть в ФААНГах, но работать там это такое себе. Но платят норм.
>трейдинг, финтех
Ну кто бы сомневался, чем денежнее - тем унылее, кхе.
>>177197
>легаси говна?
Ещё как. зазывали на "с++17 в проектах", оказалось как всегда.
>шаришь в какой-то предметной области
С позиционированием себя беда, конечно. Работал над всяким понемногу, ни от чего особо не угорал - только по графонию периодически чего-то ковыряю и почитываю. Я так понимаю без ясного и чёткого выпячивания какой-то своей фишечки и специализации в cv ловить особо нечего - в лучшем случае локальные же херки и будут написывать.
>в лучшем случае локальные же херки и будут написывать
Да не, сейчас всякие пишут. На хедхантере очень сильный разброс - со всех наших пердей (НиНо, Нск, Красный, Дс1/2, Калина, даже с Томксков), с хохлоины, с восточной европы и кипра.
На линке к ним присоединяются дойчи и китайцы.
struct st
{
int x;
int y;
}
class s
{
st a;
s() : a(???)
{
}
}
Спасибо
Вероятно это сообщения не из студии, а из соснольных команд шиндовс типа dir или copy, которые она может запускать при сборке.
Подскажите как организовать парсинг данного текста. Объект строится из частей путем унарных и бинарных операций над частями. То есть необходимо реализовать калькулятор, который работает с типом <Part>. В самом определение типа <Part> будут перегружены все возможные операции с типом.
Первая идея была спарсить с помощью boost::property::tree. В тексе находим "Part_derived (type" и создаем объект <Part_derived_manager>, который в полях содержит строку "a,b,c" для инициализации полей объекта <Part_derived> в дальнейшем. Рабочая схема, как думайте?
Все сложнее с объектами.В тексе находим "OBJ" и создаем объект и создаем объект <object_manager>, который содержит индентификатор и строку-выражение "PR2*(PR1+PR2)". Что с ней делать? Части уже созданы, в каждой из них перегружены арифметические операции. Придется писать полноценный калькулятор на boost::spirit, с токенизатором, лексером для этой строки-выражения, калькулятор который работает с типом <part>? Если да, то как затем хранить это выражение в объекте <object>, поскольку оно потребуется в будущем.
Какие библиотеки для работы с 3d можете посоветовать?
Зачем использовать что-то стороннее, связанное с графикой, если собрался делать свой графический движок? Просто возьми какие-нибудь либы для создания окна с opengl контекстом и для загрузки opengl функций, и пиши с нуля, что душе угодно. Ну или вулкан. Или этот бойлерплейт с созданием окна и загрузкой функций тоже сам напиши.
(0xb7, 0x65, 0xb7)
Почему вы хотите работать именно в нашей компании?
Кем вы видите себя через пять лет?
Почему ты не можешь решить FizzBuzz за три минуты?
Параллелизм. Либо на него будет тестовое.
А вообще на синьёра катают по предметке, если это не яндексы-хуяндексы, а конторы поскромнее.
Нет.
берешь @ пишешь
Устраивайся, я тебя даже пособесю :3
переустановите шиндовс
переустановите шиндовс
>А разве сеньер не должен сам уметь проводить собеседования?
Как-то раз я пришел в Скотолоджик и не они мне, я им провел собеседование
Инсталер - это отдельная программа. Насколько я помню, у нее нет настроек языка. Микрософт при скачивании подсовывает версию на том языке, который она считает подходящим для тебя.
>Че сейчас на сеньерскую позицию спрашивают на собеседованиях в конторки выше среднего? Виртуальный деструктор
Sad, but true.
Мне в прошлом году прилетело несколько интересных предложений и я пошел на собеседования. Там везде спрашивали про виртуальный деструктор и прочую базовую херню. У меня на тот момент 24 года опыта было за плечами.
Мимо дед.
Удали forward declaration - class gobjects; и подключи хедер с полным объявлением.
Зачем переизобретать boost? https://www.boost.org/doc/libs/1_77_0/libs/iterator/doc/function_output_iterator.html
На дворе 21 год, давно есть range v3 - https://godbolt.org/z/f5ch4M1bz
Буст в конторе не используем, только STL и собственные наработки. Стандарт пока что 14-17 (либы 14, конпелятор 17). Короче, надеюсь тимлид не скажет, что сильно выебываюсь, когда дойдет до ревью кода ветки.
Короче у меня взаимная зависимость классов и всю мою парашу нужно заново переписывать. Я в главном классе game вызываю метод отрисовки в классе draws, внутри которого вызывается метод внутри класса внутри gobjects, внутри которого вызывается метод внутри draws. И типа компилятор читает один h файл, там есть обращение к классу из другого h файла, который компилятор ещё вроде не прочитал. Я хз как пофиксить это не переписывая
Да я сам уже допер что хуйню сделал, первый раз делаю прогу в которой больше 2 файлов
>У меня на тот момент 24 года опыта было за плечами.
>Мимо дед.
Если бы у тебя было 24 года опыта, то у тебя так же должен был бы быть опыт проведения собеседований и ты должен был бы знать, что постоянно даже на сеньерские позиции приходят какие-то деды с 10-20+ годами опыта, но которые 2+2 сложить не могут, не говоря уж про виртуальный деструктор.
Есть такое.
В книжках, в примерах с интернета все стараются скомкать код, определить внутри класса, или все вообще в main() засунуто и подперто глобальными переменными.
Взял за правило, когда смотрю такой пример, всегда изучаю дополнительно как это правильно раскидать по разным файлам, как можно избавиться от глобальных переменных, расчленить на отдельные функции.
Есть возможность вызывать объект по обращение к его полю, например? В данном случае в векторе 3 экземпляра Car, но обращаться к ним можно только по индексу вектора. Допустим при парсинге я не знаю, по какому индексу bmv, но мне необходим будет именно этот экземпляр.
>Если бы у тебя было 24 года опыта, то у тебя так же должен был бы быть опыт проведения собеседований и ты должен был бы знать, что постоянно даже на сеньерские позиции приходят какие-то деды с 10-20+ годами опыта, но которые 2+2 сложить не могут, не говоря уж про виртуальный деструктор.
Всякие люди бывают на собеседованиях. Однако если человек приходит с опытом условного сеньора, то вполне достаточно задать ему сеньорские задачи. Например объяснить как он будет реализовывать какой нибудь шаблонный класс для обмена данными между потоками (для простоты пусть данные будут POD структурами) и все lock-free должно быть, плюсом спросить его почему он выбрал такое решение. Здесь можно узнать вообще знаком ли человек с lock-free многопотоком, с моделью памяти и вообще на сколько он адекватно воспринимает реальность. Мне, например, неинтересно может ли человек заобезьянить какой то быдлокод. Этому можно научить любую пыхомакаку. Мне нужен человек который может самостоятельно решать поставленные проблемы. Сеньор by default знает нахуй нужен виртуальный деструктор, зачем переспрашивать эволюционную лестницу у человека от сперматозоида до сеньора то? По моему это дерьмо и пустая трата времени, плюс неуважение к всем присутствующим на собеседовании. Джунам джуновское, а сеньорам сеньорское, просто потому что сеньор умеет все что умеет джун, а джун не может в сеньора.
Не всегда он быстрее. Надо измерять (если быстрота вообще нужна).
>пусть данные будут POD структурами
>для простоты
Вообще-то, POD структура - это довольно сложная штука; в том смысле, что ее формальное определение довольно упоротое и включает другие штуки с упоротыми определениями.
Вот мне что интересно, сеньеру это все реально нужно помнить и знать?
Ну то есть уметь по определению строго доказать, что такой-то класс - это POD, а вот такой - не POD потому, что...
Или сеньеру достаточно иметь представления, что POD - это такой достаточно простой объект? А за подробностями отослать к справочнику и/или к std::is_pod.
Сеньер вообще имеет право сказать "Вот тут я не знаю/не помню, надо почитать справочники. А еще лучше обратиться к languge lawyer'у"?
Естественно. Все от мала до велика пишут на некотором подмножестве языка. Разница только в том, что синьёр скажет, где быстро загуглить и как это сделать другим способом.
А можно несколько примеров, если не трудно?
Когда можно, а когда точно нельзя.
Просто хочу для себя составить представление о хорошем подмножестве, насколько вообще стоит углубляться в чисто языковые дебри.
Ну самое избитое это кидать исключения или возвращать код ошибки. Если ты долго педалил эмбед, то про catch/throw останутся лишь воспоминания.
std::optional
>Вообще-то, POD структура - это довольно сложная штука; в том смысле, что ее формальное определение довольно упоротое и включает другие штуки с упоротыми определениями.
POD в условиях задания взят для упрощения задачи(так как не POD структуры имеют кучу нюансов в поставленной задаче, что бы не тратить время на них, а поговорить предметно по задаче успеть). Никаких упоротых определений тут нет. Это структура без наследования, без виртуальных методов, у всех членов тривиальный конструктор копирования. Если простыми словами, то
Это POD
[code]struct PODYoba
{
int one;
int two;
}[/code]
Не POD
[code]struct NonPODYoba
{
std::string one;
int two;
}[/code]
Задача стоит не про POD поговорить, там нечего обсуждать. А посмотреть понимает ли человек за lock-free алгоритмы, за модель памяти. Я писал выше про это.
>Вот мне что интересно, сеньеру это все реально нужно помнить и знать?
Зависит от специфики работы на которую он претендует. У меня это гейдев(пека, свое пихло и экосистема, не анрыл) с заветными 4к@60фпс ну или VR режим где чем больше тем лучше. Ну, а где то похуй будет, потому что производительность не важна и там зададут другие вопросы.
>Или сеньеру достаточно иметь представления, что POD - это такой достаточно простой объект?
Достаточно знать, да. Вопрос был в другом.
>>183121
>Сеньер вообще имеет право сказать "Вот тут я не знаю/не помню, надо почитать справочники.
Ну, если сеньор не знает, что такое POD и ему нужен справочник для этого, то он какое то кю, а не сеньор. Конечно я не вижу ничего плохого в справочнике в том числе и на собеседовании, т.к. std:: в голове не держится весь или что то из мета-программирования того же. Но базовые вещи человек на такой должности должен знать без справочника.
>>183138
>Разница только в том, что синьёр скажет, где быстро загуглить и как это сделать другим способом.
Поставлена конкретная задача, а не поиск другого способа или ебля гугла. Я хочу увидеть как человек думает над задачей и идет к решению. Готов даже подсказать, а не дать выебать гугл и стэковерфлоу. Это собеседование где оценивают его навыки и знания.
>Вообще-то, POD структура - это довольно сложная штука; в том смысле, что ее формальное определение довольно упоротое и включает другие штуки с упоротыми определениями.
POD в условиях задания взят для упрощения задачи(так как не POD структуры имеют кучу нюансов в поставленной задаче, что бы не тратить время на них, а поговорить предметно по задаче успеть). Никаких упоротых определений тут нет. Это структура без наследования, без виртуальных методов, у всех членов тривиальный конструктор копирования. Если простыми словами, то
Это POD
[code]struct PODYoba
{
int one;
int two;
}[/code]
Не POD
[code]struct NonPODYoba
{
std::string one;
int two;
}[/code]
Задача стоит не про POD поговорить, там нечего обсуждать. А посмотреть понимает ли человек за lock-free алгоритмы, за модель памяти. Я писал выше про это.
>Вот мне что интересно, сеньеру это все реально нужно помнить и знать?
Зависит от специфики работы на которую он претендует. У меня это гейдев(пека, свое пихло и экосистема, не анрыл) с заветными 4к@60фпс ну или VR режим где чем больше тем лучше. Ну, а где то похуй будет, потому что производительность не важна и там зададут другие вопросы.
>Или сеньеру достаточно иметь представления, что POD - это такой достаточно простой объект?
Достаточно знать, да. Вопрос был в другом.
>>183121
>Сеньер вообще имеет право сказать "Вот тут я не знаю/не помню, надо почитать справочники.
Ну, если сеньор не знает, что такое POD и ему нужен справочник для этого, то он какое то кю, а не сеньор. Конечно я не вижу ничего плохого в справочнике в том числе и на собеседовании, т.к. std:: в голове не держится весь или что то из мета-программирования того же. Но базовые вещи человек на такой должности должен знать без справочника.
>>183138
>Разница только в том, что синьёр скажет, где быстро загуглить и как это сделать другим способом.
Поставлена конкретная задача, а не поиск другого способа или ебля гугла. Я хочу увидеть как человек думает над задачей и идет к решению. Готов даже подсказать, а не дать выебать гугл и стэковерфлоу. Это собеседование где оценивают его навыки и знания.
void* гыгы
Очень хорошо. Есть плата, к которой я не хочу гонять через весь город. Я скачал эмулятор. Набор букв и цифр, который ее обозначает, вроде бы совпадает. За чем еще мне следует проследить?
> в чем может быть дело
Литерали в чем угодно
В любое место пальцем тыкай, там проблема может быть
Собственно аналогично и чинить пытайся, методом тыка
Если твой единственный совет это "попытайся разобраться сам", тогда как выглядит вопрос, на который ты соблаговолишь ответить?
Учитывая что ты дал примерно нихуя инфы, то и совет соответствующий
Ой, звучит как слишком через жеппу
Не, просто данные туда-сюда гоняем, и есть, грубо говоря, два упорядоченных контейнера с айдишниками, при чем две разные структуры с полем айди (то есть там еще и компаратор в алгоритм надо передавать). Вот решил избавиться от лишнего жора памяти back_inserter с последующим проходом.
Интеллисенс и сборка используют разные компиляторы в разных режимах. Тем не менее, фикси инклюды
Я не он, но знаю ответ. Это Visual Assist, он проверяет орфографию, но с русским у него не очень, даже если словарь прицепить
НВИДИЯ-КУН
Кэп, ты?
Есть пет-проект, где очень нежелательно юзать исключения. Надумал такую штуку вангую, что изобрёл велосипед, но похуй - в приватном поле класса ебануть булевый флаг, означающий валидность объекта после того, как конструктор сделал всё необходимое. А последующий вызов методов данного класса через проверенный таким образом объект уже будет проверяться через обычный сишный return error code либо через std::optional в более сложных случаях. Это норма или антипаттерн? Заранее спасибо
Борьба с исключениями - это антипаттерн. Но раз тебе так хочется, сделай пустой конструктор и ещё метод init(), который будет возвращать коды, как у дедов 50 лет назад.
В чем же его сложность?
>>185299
>В чем разница?
Это надо всего Страуструпа прочитать. И то, там у него не все рассказано.
В твоем случае - пустые скобки == конструктор по умолчанию. Разницы нет в том контексте, где ты их применил.
В других контекстах разница есть. Например на пикрил первые три вызова эквивалентны, а четвертый выдает ошибку "нет аргумента".
По началу, лучше разбираться конкретно с теми контекстами, которые ты встречаешь на примерах, чем пытаться запомнить все со справочника.
Если тебе нужны примеры, то возьми какую-нибудь книжку и держи под рукой справочник. На одних ответах с двача ты осмысленную программу никогда не напишешь.
настоящий сеньор если придет на собес и его начнут ебать многопоточкой поинтересуеться какие юз кейсы этой многопоточки на фирме вообще используються и по факту оказываеться что потоки им нахуй не нужны, а проэкт делают долбоебы используя хайпнутые технологии
типа запиливая свои тред пулы и прочуу поеботу когда достаточно организовать всего лишь асинхронный io в один поток и этого будет более чем достаточно под ту нагрузку под которую пишеться проэкт
вот так то
>как у дедов 50 лет назад.
Я слышал, что в геймдеве не жалуют исключения.
Не из-за того что деды, а потому что все эти новенькие недеДские плойки-хуейки криво поддерживают исключения.
А ещё бывает (причём довольно часть), что дебичи не могут в матан и алгоритмы, поэтому брутфорсят своё шаблонное говно параллелькой, гордясь что оно lock-free.
ну если вспомнить историю вопроса то страуструпу пришлось ввести механизм исключений в язык по той причине что он ввел конструкторы классов в язык и возможность перегрузки операторов
а из конструкторов и операторов значит по другому никак не вернуть ошибку, нужно городить исключения
все это он подробно расписывал в своих книжонках пока еще не обленился совсем
кстати он расписывал и про то как писать код на крестах без исключений
значит он говорил что вам волей не волей придеться вводить двухэтапную инициализацию класса (а уж как вы будете это делать ваша воля, есть парочка общеупотребительных паттернов на это), а для операторов вам нужно будет рядом еще делать дублирующую функцию-член что не будет кидать исключение в случае ошибки, а вернет номер ошибки или как там у вас будет организовано
все это он тоже подробненько описывал
читайте книжки в общем
или не читайте
похуй
вот типа говорят что язык переусложнен бла бла
а вот он пишет что над каждой частью языка долго думал прикидывал и так и сяк и получалось что без этого не обойтись на уровне библиотек, что типа надо вводить в язык и все такое
то есть он не потому что модно было вводил что-то на уровень языка, а потому что надо было
В Сях нуль-терминированные строки тоже считались хорошей, продуманной идеей. И array decay тоже хорошо помогал при портировании программ из B. Обе идеи продуманы, но на текущий момент считаются неудачными. Настоящая цена той или иной реализации идеи понимается только после её интенсивного использования.
В гугле весь С++ код не имеет исключений, включая гугл хром. Выжимая максимум из программы, ты всё же захочешь от них избавиться.
> что плохо
Нормально, это обычное дело для хедеров. Поэтому в них и принято юзать include guards/pragma once.
Да какая разница, что там в гугле.
Проектировать надо так, чтобы код, которому надо работать быстро, в принципе не имел необходимости бросать.
А всякая логика вроде "не нашёл такой-то файл" пусть бросает сколько ей угодно. Избавиться от неё захочет только любитель разодрать своё очко нашлёпать побольше говнокода, с которым потом очень весело возиться.
Спасибо
Да, спасибо. Есть еще вопросик. Нужно выполнить макросы в определенном порядке (макросы встречаются только вне main) . Для этого мне нужно как то понять, что все макросы обработаны. Нет ли никакого способа понять, что я обработал все макросы?
#ifdef?
А вообще у меня холодный пот на жепе выступил при попытке представить цепочку умозаключений, которая привела к твоему вопросу. Скорее всего задачу будет лучше каким угодно другим способом.
*лучше решить
При том что само смешно что в языке давно есть всякий сахар который все это мог бы делать сам, но видать у коммитета до стандартных стрингов руки не дошли
стрингбилдер хуйня с проблемами
В С++20 или в vcpkg install fmt
это выглядело бы как
std::string frog = std::format("Message: {}, line: {}", GetMessage(), GetLine());
В шарпе (который я безумно обожаю и на С++ стараюсь не писать, когда можно писать на шарпе)
string frog = $"Message: {GetMessage()}, line: {GetLine()}";
Сроазу видно, какой язык сделан для людей
Из всех хедеров заинклюженных, само собой.
С презрением.
Допустим я хочу вызывать метод, в котором должен быть параметр, но я не хочу передавать этот параметр в метод, однако он там быть должен. И сделать этот параметр параметром по умолчанию тоже не получается. Как это сделать максимально грамотно?
Для начала скажи, почему не хочешь передавать и почему нельзя сделать по умолчанию. Может, у тебя нормальная причина, а не "Хочу, чтобы компилятор сам писал код за меня".
>почему не хочешь передавать
Пытаюсь реализовать BST, для рекурсивного метода вставки нужны данные и указатель на указатель на корень, хочу передавать в метод только данные и хочу чтобы второй параметр был там по умолчанию. А по умолчанию его не получается вставить там требует static.
the compiler can optimize away - это из лексикона Страуструпа.
Есть user defined конструктор - компилятор обязан давать гарантии на счет поведения конструктора.
Нет user defined конструктора - компилятор может решать на свое усмотрение. Подробности реализации.
Для случая пустого {}-инициализатора я в справочнике вижу только описание конечного эффекта, но не того, как он достигается, с вызовом скрытого конструктора или без него. В Стандарте я ориентируюсь плохо, чтобы такие тонкости искать.
#ifdef VECTORDEF
extern nsp::myvec<...> vec
#endif
#ifndef VECTORDEF
#define VECTORDEF
namespace nsp {
myvec<...> vec;
}
#endif // !VECTORDEF
Почему то вставляем везе второе определение
Я ничего не понял
Можешь просто хэдер онли лайбрери запилить
Создаёшь хпп файл, там же реализацию пишешь
Всезде где тебе понадобиться эта библиотека, просто кидаешь этот один файл
Один из примеров использования: есть некий файл с тестами tests.cpp, в котором используется эта библиотека (test.h подключен). Так же есть test_main собственно с функцией main. Туда я тоже должен подключить test.h, чтобы использовать классы из хедера. Там мне нужно будет как то использовать результаты тестов из tests.cpp. Я хотел сделать глобальный вектор, но не получается.
Короче как сделать глобальную переменную, доступную из всех файлов и чтобы компилятор не ругался на множественное определение?
Почитать книшку по С++ и понять что такое определение и что такое объявление.
В хедере ты должен объявить. Объяылять можно сколь угодно раз.
А вот определение может быть только одно
Короче, в твоем хедере надо писать объявление:
extern bool IsLoh;
в твоем цпп надо писать определение:
bool IsLoh = true;
p.s. С++ - не тот язык в который можно вкатится по урокам с ютубса. Много всяких мелочей. Так что иди и читай Ламота
Эта любовь придумать себе проблемы на равном месте без хорошего знания языка. Ты сейчас будешь дрочить всякую хуиту типа ifdef (которые ты тоже не понимаешь), потому что не понимаешь как это все работает.
Ты сначала сделай чтобы работало. И отправь нахуй того кто тебе там условия задачи выставляет:
- преподу лабу можешь и на питоне сделать
- на работе? - я хуй знаю кто там тебя с таким уровнем взял
- сам себе такое условие выставил? Лечи свою шизу и не страдай хуитой - любой код сначала пишется чтобы работало, а уж потом выебываешься. А не как ты - хочу сделать через жопу потому что мне не нравится как все делают.
Тебе тут не помогут с такой шизой.
Ну или давай вообще весь код и все условие (но тоже вряд ли помогут - ибо лень и никому не нужо)
Бывает четвертый вариант еще - ебанутая автоматизированная система проверки, типа той, что у курсов яндекса используется. Дали тебе задачу вот и ебись с системой сам.
Да по стандарту по самому нужен гайд как им пользоваться.
С такой штукой, как инициализация та же, не сообразишь вообще где искать, в каком разделе? Там же куча контекстов. Получается, что зачастую ответ на простой вопрос размазан по нескольким разделам.
И чем новее Стандарт, тем хуже. На том же стек оверфлоу если и встречаю ссылки на Стандарт, то не старше 11 года.
Не надо так делать.
> Да по стандарту по самому нужен гайд как им пользоваться.
У страха глаза велики.
>С такой штукой, как инициализация та же, не сообразишь вообще где искать, в каком разделе?
В [dcl.init] всё собрано))0)0
> Получается, что зачастую ответ на простой вопрос размазан по нескольким разделам.
Стандарт не читал, но мнение имеешь? Диванный кукаретик?
> И чем новее Стандарт, тем хуже.
Тем лучше. Подразделы переносят в более логичном порядке.
> На том же стек оверфлоу если и встречаю ссылки на Стандарт, то не старше 11 года.
Ну в вопросах 2011-го года — наверное. А в свежих — на 17-й, 20-й или текущий драфт, если только явно не требуется старее.
дзен заключаеться в том что в языке си нет никаких строк
и именно поэтому си живет и прекрасно себя чувствует уже скоро как пол века
и че?
в гугл хроме полно сомнительных архитектурных решений и ни в коем случае эту кодовую базу не стоит брать за образец
в стандартной библиотеке std::ostringstream уж больше четверти века вообще то
ну и альтернатив полно, начиная с boost::format и прочего
call wrapper что ли надо?
всегда можешь написать еще одну функцию рядом, но это наивный подход
можешь написать перегрузку, причем в новой перегрузке просто вызывать старую функцию оборачивая ее
ну а вообще то в стандартной библиотеке всегда существовала кучка средств для подобной работы (и причем ее существенно дорабатывали в новых стандартах), типа std::bind
а вообще не слушай меня тк я хуйло безработное и лох фу таким быть, будь лучше четким, самое главное быть в жизни четким
секрет любого макросописания - это наебашить побольше (((((()))))((()))) в код, потом ты узнаешь про склейку строк, а потом изучаешь boost::preprocessor
>Стандарт не читал, но мнение имеешь?
Я пытался и говорю о своих попытках. Я не говорю, что надо под меня переделывать Стандарт, я говорю, что не помешал бы гайд по его использованию.
>Диванный кукаретик?
Хоббист, не карьерист.
Даю неточные ответы всегда в расчете на то, что меня поправят лучше знающие люди. Что в этом криминального? На том же стековерфлоу обычно правильный ответ только один.
return this->c;
}
При компиляции получаю ошибку error LNK2019: ссылка на неразрешенный внешний символ. Если попытаться вернуть ссылку на временный объект, то все ок. ЧЯДНТ?
ВСе понял. Статики нельзя возвращать
можно, просто обьяви его в .срр дополнительно, или сделай инлайн
Не надо тебе этого.
>Я не говорю, что надо под меня переделывать Стандарт, я говорю, что не помешал бы гайд по его использованию.
1. Открываешь
2. Читаешь
> Даю неточные ответы всегда в расчете на то, что меня поправят лучше знающие люди. Что в этом криминального?
Это провокация.
Начнем с того, что ты хуй это еще ни разу не стандарт. И ты идешь нахуй читать доку по ranges.
Могу предположить, что в коде происходит следующее:
1. собираем слова с ввода
2. находим те, которые отличаются только лишь одной буквой
3. выводим первое попавшееся выбрасывая пару букв, которые отличаются
4. получаем по пальцам за отсутствие return 0;
>какие-то деды с 10-20+ годами опыта, но которые 2+2 сложить не могут, не говоря уж про виртуальный деструктор.
Двачую.
>>182926
>Сеньор by default знает нахуй нужен виртуальный деструктор, зачем переспрашивать эволюционную лестницу у человека от сперматозоида до сеньора то?
Потому что годы идут, а мозгов не прибавляется.
>Мне нужен человек который может самостоятельно решать поставленные проблемы.
И что же ты для этого будешь спрашивать?
>>183108
POD - это структура, которую можно свободно memcpy / memset. А сеньору-помидору нужно знать в чем разница между std::copy и memcpy.
>>183121
>Сеньер вообще имеет право сказать "Вот тут я не знаю/не помню, надо почитать справочники. А еще лучше обратиться к languge lawyer'у"?
Зависит от вопроса, блин. Ответ "нет" в разы хуйовее чем "не знаю, но наверное...".
>>183164
>Если ты долго педалил эмбед, то про catch/throw останутся лишь воспоминания.
Еще одна жертва говносборок конпеляторов
>>183167
>А в C++ можно реализовать переменную, которая бы могла иметь возможные значения, которые я захочу.
std::variant
>>184161
>>184216
>Существует команда которая вызывает один метод у всех инициализированных в программе экземпляров класса/наследника?
Добавь базовый класс с виртуальным методом, который регистрирует в конструкторе, дерегистрирует в деструкторе. Только помни, что в многопотоке оно работать не будет.
>>185311
>Борьба с исключениями - это антипаттерн
Люто плюсую!
Самое смешное - есть куча книжек про ООП паттерны, но нигде не обесняется как сделать расширяемую архитектуру ошибок. enum { OK, FAILED, FILE_NOT_FOUND }; ебаный в рот!
>>185475
>В гугле весь С++ код не имеет исключений, включая гугл хром.
А знаешь почему? У них в кодестайле написано: "мы активно юзаем сторонний говнокод и вот он то в эксепшены не умеет. Потому обходимся без них"
>Выжимая максимум из программы, ты всё же захочешь от них избавиться
Наоборот. Экспешены ускоряют success-flow программы за счет торможения fail-flow. Вопрос только в том, что у тебя чаще выполняется - success или fail.
>>185721
glBegin/glEnd, OpenGL 1.0, прослезился. Никто так уже не пишет - все гоняют массивы точек одной командой. Эти команды депрекейтнули еще в OpenGL ES 2.0 кажись, а в декстопных - где-то в 3.х. Алсо >>185723
>>185836
>>185827
>Допустим я хочу вызывать метод, в котором должен быть параметр, но я не хочу передавать этот параметр в метод, однако он там быть должен.
>BST
Сделай метод-член класса, и вместо tree_insert(data, tree); будет tree.insert(data); Красивше.
>какие-то деды с 10-20+ годами опыта, но которые 2+2 сложить не могут, не говоря уж про виртуальный деструктор.
Двачую.
>>182926
>Сеньор by default знает нахуй нужен виртуальный деструктор, зачем переспрашивать эволюционную лестницу у человека от сперматозоида до сеньора то?
Потому что годы идут, а мозгов не прибавляется.
>Мне нужен человек который может самостоятельно решать поставленные проблемы.
И что же ты для этого будешь спрашивать?
>>183108
POD - это структура, которую можно свободно memcpy / memset. А сеньору-помидору нужно знать в чем разница между std::copy и memcpy.
>>183121
>Сеньер вообще имеет право сказать "Вот тут я не знаю/не помню, надо почитать справочники. А еще лучше обратиться к languge lawyer'у"?
Зависит от вопроса, блин. Ответ "нет" в разы хуйовее чем "не знаю, но наверное...".
>>183164
>Если ты долго педалил эмбед, то про catch/throw останутся лишь воспоминания.
Еще одна жертва говносборок конпеляторов
>>183167
>А в C++ можно реализовать переменную, которая бы могла иметь возможные значения, которые я захочу.
std::variant
>>184161
>>184216
>Существует команда которая вызывает один метод у всех инициализированных в программе экземпляров класса/наследника?
Добавь базовый класс с виртуальным методом, который регистрирует в конструкторе, дерегистрирует в деструкторе. Только помни, что в многопотоке оно работать не будет.
>>185311
>Борьба с исключениями - это антипаттерн
Люто плюсую!
Самое смешное - есть куча книжек про ООП паттерны, но нигде не обесняется как сделать расширяемую архитектуру ошибок. enum { OK, FAILED, FILE_NOT_FOUND }; ебаный в рот!
>>185475
>В гугле весь С++ код не имеет исключений, включая гугл хром.
А знаешь почему? У них в кодестайле написано: "мы активно юзаем сторонний говнокод и вот он то в эксепшены не умеет. Потому обходимся без них"
>Выжимая максимум из программы, ты всё же захочешь от них избавиться
Наоборот. Экспешены ускоряют success-flow программы за счет торможения fail-flow. Вопрос только в том, что у тебя чаще выполняется - success или fail.
>>185721
glBegin/glEnd, OpenGL 1.0, прослезился. Никто так уже не пишет - все гоняют массивы точек одной командой. Эти команды депрекейтнули еще в OpenGL ES 2.0 кажись, а в декстопных - где-то в 3.х. Алсо >>185723
>>185836
>>185827
>Допустим я хочу вызывать метод, в котором должен быть параметр, но я не хочу передавать этот параметр в метод, однако он там быть должен.
>BST
Сделай метод-член класса, и вместо tree_insert(data, tree); будет tree.insert(data); Красивше.
>Еще одна жертва говносборок конпеляторов
кроссконепеляторов, third-party либ и всяких тулчейнов от блядских nvidia, не способных высрать нормальный nvcc.
> провокация
Ну а что? Весь двач на этом стоит.
Карьеристам - деньги и слава, мне - РНН господину - знания и свобода от условностей карьеризма. Справедливо ящитаю.
Вот если бы я тебе ответил "сам не не нуб, а на нуба наезжаешь", вот это была бы провокация.
>POD - это структура, которую можно свободно memcpy / memset.
Это trivially-copyable. А чем от POD отличается даже я не хочу знать.
Почему принято считать, что регистры процессора быстрее оперативной памяти? Я понимаю жесткий диск электромеханическое устройство, но оперативная память плата, где электрические сигналы, как и в процессоре распространяются со скоростью света. А кто-нибудь вообще проверял, может они равны по скорости?
Не стоит вскрывать эту тему.
Регистры они в процессоре, а оперативка снаружи. Прикинь во сколько раз больше путь сигнала. Скорость распространения сигнала же не бесконечная. А еще оперативке нужен контроллер памяти. Правда его давно уже в процессор встраивают.
>распространяются со скоростью света
Сигналы сигналами, а есть еще переходные процессы всякие. 0 в 1 не со скоростью света превращается.
const std::string formattedMessage = fmt::format("[{:02d}:{:02d}:{:02d}:{:03d}] {:s}\n", hours, minutes, seconds, milliseconds, message);
Вывод
[00:00:00:000] Test
То есть как отформатировать чтобы числа выводились двумя символами? Например hours равен 1, тогда в строку пишется 01?
Вроде же в STL были какие-то такие функции форматирования?
Страуструпа почитай, как он это через локали делает в главе про локали.
sstream ss;
ss << '['
<< setw(2) << setfill('0') << hours << ':'
<< setw(2) << setfill('0') << minutes << ':'
<< setw(2) << setfill('0') << seconds << ':'
<< setw(3) << setfill('0') << milliseconds << "] "
<< message << endl;
auto formattedMessage = ss.str();
С тебя 5 защекоинов
Потребовалось написать приложение на win32 API. Как включить bmp изображения, загружаемые программой в ресурсы так, чтобы при компиляции они включались в exe? Работаю в Visual Studio 2019.
Заранее спасибо
#embed типа?
В дереве проекта есть папка Файлы ресурсов/Resource files.
Кликаешь -> добавить ресурс -> импорт...
Либо пуками залезаешь в *.rc файл своего проекта и туда добавляешь путь к изображению.
Но по-хорошему если ресурсы крупные, то их надо хранить за пределами исполняемого бинаря.
ага
soft obfuscation
защита от вкатунов
кресто-задротики так пытаюься защитить свой хлебушек с тонким слоем маспа сверху
позоришься
регистр - это как твой хуй или анус, вот хочешь подрочить, сразу взял и подрочил, потому что это под боком, на расстоянии вытянутой руки. А оперативная память - это скоуп доступных тебе телочек (или мальчиков), чтобы какую-то дрюкнуть тебе надо сначала знать ее контакт (адрес в памяти), позвонить, договориться что она придет, потом она к тебе на такси (по шине) едет. В общем мораль такова что быстрее и дешевле подрочить
почему если значение -а- меньше значение -b-, то нихуя не выводится.
ПЖ!!!
)
И ещё
- В логических выражениях поставь явно нужные круглые скобки, возможно у тебя проблема с прецедентностью
- Не используй альтернативные написания операторов (and -> &&, or -> ||), считается моветоном
- Не пихай всё в одну строчку, очень неудобно будет пошагово отлаживать и просто сложно на лету отличить условие от самого действия
- Пользуйся дебаггером
Мало что понял, тк это второй урок информатики, но спасибо за ответ, прислушаюсь.
А можете в таком стиле целую книгу по основам CS написать? Пользовалась бы успехом!
std::vector<std::unique_ptr<My_Class>> my_class;
my_class.push_back(std::make_unique<Naslednik>());
Если я напишу my_class[0]. то мне в возможностях высвечивается только то, что добавлено либой вектора
ты имеешь в виду журнал хакер?
Спасибо
То есть я обращаюсь к методу my_class, внутри которого есть проверка на размер числа, и если число больше чем нужно, то вызывается другой метод, в котором я хочу реализовать удаление этого экземпляра из вектора.
if (vector_name.method_name())
{
auto iter = vector_name.begin();
iter += i;
vector_name.erase(iter);
}
Обращайся ещё.
У меня все работает, код покажи.
>только указатель на память
Ещё указатель на последний элемент, указатель на конец блока памяти и указатель на аллокатор. Итого 4sizeof(void) = 32 для x64 и 16 для x86(32).
>сколько вектор при его создании заранее резервирует элементов из кучи
Если ты явно не укажешь число в конструкторе или через инициализацию, то 0. Дальнейший рост зависит от реализации.
От реализации библиотеки STL, а не от компилятора.
> Ещё указатель на последний элемент
> указатель на конец блока памяти
А в интовой переменной религия хранить не позволяет? Типо переменная lengер и переменная capacity. Или бывают вектора длиной более 65,535 элементов?
Тип int не используется как тип размера данных. Для этого в языке есть специальный тип - size_t (метод sizeof() возвращает значение именно этого типа). size_t меняет свой размер в зависимости от платформы, как и указатель - то есть для х64 он будет 8 байт, при том что int будет 4 (иногда больше).
это скорее наследие сишки. sizeof кста может вернуть число большее суммы размеров типов элементов структуры из-за выравнивания.
Да.
Ну эти больше по внутренним фсбшным делам, нежели по оборонным. Если с тем же "Кронштадтом" сравнивать.
нет, не миф
благодаря шаблонам, благодаря статическому полиморфизму
да и рантайм полиморфизм в крестах самый быстрый, быстрее не сделать
благодаря тому что нет сборки мусора в самом языке
нет, не миф
первое, благодаря шаблонам, благодаря статическому полиморфизму
да и рантайм полиморфизм в крестах самый быстрый, быстрее не сделать
второе, благодаря тому что нет сборки мусора в самом языке, а в различных подходах к управлению ресурсами почти всегда используеться та или иная форма "подсчета ссылок"
третье, за счет "размещающей формы new" можно создавать эффективные контейнеры
это то что навскидку можно вспомнить
Это овердохуялион кост.
ловля - само собой нет. А все обвязки, если эксепшены не кидаются - ПРАКТИЧЕСКИ бесплатны (размер кода увеличивается и все)
Там где оверхед не нулевой Страуструп говорит, что его оверхед минимальный по сравнению с возможными альтернативами. Там где решение Страуструпа сливает по скорости в рантайме, он находит всякие другие достоинства, вроде maintability.
Не стоит понимать zero cost как буквально всегда равно нулю.
>>193478
Вот кстати хороший пример. Не зеро кост в сравнении с полным отсутствием проверки и обработки ошибок.
без исключений в языке не обойтись, их пришлось ввести
страуструп об этом и в книгах и в статьях писал и на конференциях об этом талдычил
потому что иначе никак не обработать ошибки в конструкторах и перегруженных операторах
а как раз конструкторы и возможность перегрузки операторов (особенно второе) и являются важнейшими инструментами для повышения уровня абстракции в коде на крестах
ну а так как раскрутка стека оче дорогая операция, страуструп предлагал как раз использовать в критических по производительности библиотеках исключения только там где ни обойтись и ловить их по месту (те сразу же)
конструкторы можно оборачивать различными порождающими паттернами
при реализации библиотек рядом с перегруженным оператором в классе можно реализовывать функцию-член, с тем же функционалом что и в делает оператор, но которая не будет кидать исключение и дальше уже использующий библиотеку будет решать чем ему удобней пользоваться
таким образом несмотря на то что исключения вроде как и дорогие при ловле, при правильном применении все это минимизируеться
Очевидно, будешь говно вилкой чистить на заслуженном проектике, поддерживая его на плаву.
А на ютубе все видео про чат ботов в вк - это либо ебаный питон, либо реклама сервисов долбоёбских
Поясните как это всё реализовать пж
Ищешь библиотеку с работой ботов ВК подключаешь ее, читаешь доки, пишешь
Ну или сразу смотришь api который даёт тебе ВК и пользуешься им напрямую
ну или не использовать плюсы для этого, легче будет такое как уже сказали выше на питоне
Накидайте пожалуйста github репозиториев с эталонным качеством кода. Что бы я прочитал и охуел от того как все корректно и няшно
Забыл добавить : чем новее стандарт тем лучше
Весь питон это ~800 страниц спецификации. Из них тебе достаточно вдумчиво прочитать страниц 200.
Очевидный https://github.com/microsoft/STL
Вполне корректно (хотя, баги есть), но совсем не няшно
Вешаю noexcept на все функции, в которых я не ловлю исключения.
В чем проблема? Ведь это просто убирает ненужные издержки. Почему нужно лечиться от "noexcept болезни" ?
https://youtu.be/LDoCQzSd3xo?t=786
Ты серьезно? Вот это эталонный c++ код? Я так и должен писать в своих проектах, да?
https://github.com/microsoft/STL/blob/main/stl/src/filesystem.cpp
>>195130
Нет, он хуевый с точки зрения читаемости, но его полезно почитать, посмотреть как реализуются требования стандарта, как делаются оптимизации в шаблоном кодев зависимости от характеристик аргумента (например, std::copy, vector::resize).
Так же интересно посмотреть на устройство рантайма, всё то, что выполняется до и после юзерского main()
Да, ответственно подошли к вопросу хуевости. Даже табы пополам с пробелами навалили.
а нету такого
весь промышленный код на крестах - это просто приплюснутая сишка
а state of art код устарел уже, 98м стандартом ограничен как правило, а модерновый код говнище, даже тот что не стыдяться на конференциях на слайдах показывать, во многом еще и потому что сам язык стал развиваться, стали быстрее выкатывать новые фичи в язык
а для того чтобы появилась красота, нужны ограничения платформы
если приводить сторонний пример, то лучший демо-арт на амигах и спектрумах и прочих альтернативах pc стали делать уже после того как эти платформы по сути умерли, но таким образом были определены рамки для (комьютерного) творчества - разрешение монитора, цветность, возможность или нет плавного скролинка, количество выводимых спрайтов, возможности для синтеза звука..
а в ситуации когда чуть ли не каждый год появляються новые инструменты (применительно к крестам, не только синтаксические возможности, но и чутка но и меняеться семантика), сложно начать писать действительно красивый код, потому что еще нужно накопить определенный опыт работы с этими новыми возможностями; большинство нового крестового кода что использует новые стандарты - это по сути грязный экспериментальный код, даже несмотря на то что часть этого кода используеться напрямую в продакшене
>>>>195458
Ну, даже если это и так как ты сказал, все же хочется верить что где-то там есть толковые дяди которые умеют делать няшный и корректный код(как на том же шарпе), а не как у меня - корявое говно работающее только после часов дебага
до до до , кроме мув семантики с 98 стандарта толком ничего не изменилось, вы главное не нервничайте, мы скоро выпишем вас домой
в шаблоны еще добавили возможность императивного программирования, а до этого в 98 стандарте для метапрограммирования требовался функциональный подход используя различные трюки
чем не добавление новой семантики
а вы из серьезного бизнеса ?
Программировать вообще стыдно, даже признаваться в сосании хуйцов лучше.
while(s != '\0'){
if (s >= 65 && s <= 90)
s += 32;
s++;
}
}
void to_lower(char s){
for (; s != '\0'; ++s)
s |= (1 << 5);
}
Лве функции которые делают одно и тоже, верхнюю написал я, вторая из интернета. Что лучше?
форматирование съехало + звездочки съело, ахуенно
Лучше вторая т.к у char* нет оператора +=, так что в первой ошибка компиляции
Ну ты сверху меняешь значение только если *s это от A до Z.
Т.е строка "1234rt_HEIL_HITLER" будет выглядеть так : "1234rt_heil_hitler"
А снизу вместо всех не A..Z симаолов будет что-то другое. Кстати ты в первом забыл указатель перемещать, так что он вообще в бесконечный цикл падает
>няшный и корректный код
Ну вот допустим есть lambda expressions, введённые в с++11. Если почитать стандарт, то там сплошной since/until C++14,17,20,23. В таких условиях только экспериментальное говнецо можно писать.
>Если почитать стандарт
А я и не собирался вычитывать до потери сознания стандарт/cppreference.
>И вобще подобные операции над символами делаются через int, а не char.
явный каст? А зачем?
>В половине случаев корректно будет.
Алгоритмы не эквивалентны. О каком сравнении по скорости идет речь если они выдают разный результат ?
Что будет быстрее в итоге сводится к тому что дешевле : + или битовое или. Чисто интуитивно кажется что второе
>зачем
Посмотри документацию для <cctype>, там у всех функций сигнатура из int в int. В char не помещается EOF, поэтому int.
По скорости я вообще не сравнивал. Просто отмечаю, что в половине случаев второй вариант сработает корректно - там, где пятый бит равен 1 ничего не произойдет.
char это 1 байт = 8 бит = 2^8 = 256 значений. От 0 до 127 это ascii таблица, дальше от 127 до 255 это ansi таблица. Ты не можешь изменить хоть какой-то бит числа и внезапно попасть в ту же точку, в ascii и ansi таблице символы не повторяются
Хотя стоп, у нас же битовое или .Если у нашего char 5 тый бит уже установлен то действительно ничего не поменяется. А таких символов 1*2^(7) = 128.
Чето я сразу не подумал
>надо в следующем треде воткнуть ссылку
>Файл, который вы пытаетесь скачать, больше не существует.
перезалей, тогда и воткнем
>книгу Макс Шлее
Пытался как-то вкатиться через эту книгу. Читать имеет смысл только первые главы про сигналы Qobject и прочую базу. Дальше просто кидаешь чужой код и документацию. Учить фреймворк последовательно и всеобъемлюще это бессмыслица. Просто берешь нужный тебе инструмент и вперед
Пытался как-то через мапу с индексами, поинтерами, но ничего не вышло.
Помогите со следующей проблемой:
если я компилю просто объектники, грубо говоря:
>g++ imgui.o imgui_draw.o main.o
- всё хорошо и даже вроде работает
но мне хочется сделать
>g++ imgui.cpp imgui_draw.cpp -c
>ar rsv imgui.a imgui.o imgui_draw.o
>g++ imgui.a main.o
- как результат, в main'е imgui'шные функции не линкуются. Как это работает (и почему не работает?)
Либы именуются как lib{name}, поэтому переименуй imgui.a в libimgui.a. Для линковки она передаётся как -limgui (без префикса lib и постфикса .a). Если надо линковать статически, то перед ней указываешь -static.
Вроде вот так должно быть
g++ -c main.c -o main.o -static -limgui
Я помню Сэджвик в своей Algorithms in C похожее делал, можешь почитать.
Вот я скачал соурс код отсюда https://www.qt.io/offline-installers
Скачался zip-архив с соурсами. И что мне с ним делать? Как это совместить с QtCreator?
Запросы очень частые, раз в 20 мс. Чтобы интерфейс не зависал, пока воткнул костыль в виде qApp->processEvents(), но так делать вроде бы нельзя, да ведь?
Как правильно это все распараллелить, подскажите плиз.
>где лучше
Да не знаю, я после знакомства с moc'ом блеванул и бросил это дерьмо. У шлее вроде бы все довольно просто объяснено было, насколько сейчас помню
Через Qt Documentation.
Просто гуглишь, то что тебе нужно и гугл тебе выдает подходящий класс.
Например, тебе надо работать с картинками. Вбиваешь в гугле qt image, и первый же результат https://doc.qt.io/qt-5/qimage.html то что тебе нужно. Там все подробно описано, какие методы, сигналы и слоты там есть.
Ну и ты должен понимать, как сигналами и слотами пользоваться, это база qt так сказать. Тоже на их сайте можешь почитать, никакой Шлее не нужен особо.
они ввели лямбды и стало сразу скучно и просто, понимаешь?
в 98 стандарте нужно было писать вообще по красоте - используя композицию функторов, в std был (и сейчас есть) набор средство для такого похода
можно было писать действительно интересный state of art код
почти заголовок <functional> был сделан для возможности композиционного программирования
это точно так же (повторюсь) как раньше возможность метапрограммирования на с++ была одна - только через функциональный подход, а сегодня они сделали возможности императивного программирования на этапе компиляции, стало проще, но гооораздо скучнее
Ты кукаретик, а я практик. Ты видишь манягоризонты, а я проблемы с обратной совместимостью и людей делающих одно и то же, но на разных диалектах. В итоге мы имеем глиномесиво, а не state of art.
Просто напомню тебе, что проекты на цпп выходят в нормальный продакшн не ранее 2х лет после начала разработки. Проект цпп является свежим, если ему 4-5 лет. За это время выходит 2-3 апгрейда стандарта и то, что написали 4 года назад никто в здравом уме портировать не станет.
Что именно? Запрос-обработку данных? А как потом данные передавать в интерфейс? Через сигнал?
Через что угодно, хоть через сигнал, хоть через синхрозириванную общую переменную
в этом случае это не "манягоризонты" а скорее ретро-кодинг, можно так назвать
ну это как сегодня, знаешь, все еще иногда выходят новые игры для спектрума, для амиги.. ну и само собой демо-арт процветает на no-pc платформах
в качестве развлечения мне интересно писать на 98 стандарте, используя рекурсивный подход для метапрограммирования, для кодогенерации в компайл-тайме, ну или делая композиции функторов используя возможности библиотеки stl, при этом я могу писать и модерновый код на новых стандартах делающий все то же самое, просто такой код получаеться более скучным и плоским
естественно это все это just for fun
за предложение делать многопоточку для такого тупого io нужно сразу валить и бить ногами
за предложение делать многопоточку для такого тупого io нужно сразу валить и бить ногами
владелец двача даже барана чисто зарезать не может чего ты от него еще хочешь?
А я хз. Uart порт древний и есть практически на всех железячках. Qt большой и не везде влезает, так что обычно такое на C пишется через системное api.
Но метод m_impl->Create() - не константный и внутри себя он изменяет уже свои члены.
Почему это работает?
Чел, охуенный совет. Вот я точно так же делал, возникла одна проблема. Нигде не было решения, здесь тоже никто не ответил. Хотел сделать кнопку параметров печати, улучшить пример калькулятора. Документация прочитал, нихера не понял, почему эти параметры не отображаются, а если и отображаются не сохраняются
Создал класс(максимально простой для проверки всего этого)
Объявление класса с прототипами методов поместил в заголовочный файл "classname.h", как меня учили.
Определения методов класса поместил в файл classname.cpp, не забыл #include "classname.h", как меня учили.
В файле main.cpp прописал #include "classname.h".
Это говно все равно не работает, сообщая якобы о undefined reference. Неужели нет компилятора, который не будет так тупить и просто возьмет и соберет все?
Бля, я же максимально понятно расписал, ну ладно
С кодом все хорошо(за исключением возможно того что __Ptagma__ уже занята кем-то, не надо использовать имена начинающиеся с _ или __ они зарезервированы под стандартную библиотеку дефайны компилятора и прочее)
если дело не в _Pragma_ то проверь собирается ли Pragma.cpp. Вполне возможно ты как-то не так добавил его в свою IDE
Спасибо, я погуглил, виновата во всем IDE. Точнее способ добавления файлов в проект с галочками debag/release, в котором я не понимаю ничего.
>Почему это работает?
Потому что так это и работает. Константность метода не транзитивна.
Если б у тебя m_impl имел тип WindowSystem, то компилятор тебя бы тормознул. А так, через ссылку/указатель делай, что захочешь.
>не константный и внутри себя он изменяет уже свои члены
Указатель m_impl куда указывал, туда и продолжает указывать. Его значение (адрес) не изменяется - вот, что тебе гарантирует Страуструп.
А состояние, на которое указывает m_impl, это уже состояние другого класса. Оно не рассматривается как часть состояния WindowSystem.
cin >> n;
int * arr = new[n];
delete [] arr;
Откуда delete[] знает сколько элементов в массиве если значение не известно на момент компиляции? Если new сохраняет его куда-то, то куда?
Если коротко : компилятор секретно выделяет перед твоим массивом еще немного памяти чтобы сохранить там сколько ты выделил. delete[]
читает как бы -1-ый элемент где записан размер.Если ты напишешь delete[] для обычного указателя( не массива ) он тоже прочитает и будет пиздец
https://youtu.be/TQ5VPnKWqoY?t=228>>197335
С таким помогает посмотреть, как в stl сделано
Почитал про hidden friend, но не совсем понял как его можно применить к шаблонам. Без адских костылей только так, реализация фрэнда внутри класса.
А как быть с обычными функциями, я так и не понял. Получается, что объект класса B никуда нельзя передать.
А зачем что то на С писать, если в Qt уже есть все готовое? То есть изобретать велосипед? Там есть QSerialPort, в котором все уже написано.
QSerialPort port;
port.write("отправь данные");
QByteArray buffer = port.readAll(); //данные
Это если упрощенно, там еще ждать надо, пока устройство данные пошлет с помощью waitForReadyRead(int timeout) или как то так. Ну и параметры ком порта в port прописать.
Интересно какой ответ ты ожидаешь услышать
Просто постарайся
Хорошо. А как все таки распараллеливать это, чтобы mainloop не захлебнулся? И если создавать новый поток под это - моветон, то что делать?
сдавайся, ты говно
Айда к нам в жаваскрипт. У нас годные тянучки, новейшие технологии, современные задача. Будешь на реакте писать, 300к получать.
Могу только ультра дженерик совет дать: если ты не гипераутист, способный 24/7 заниматься одним и тем же - правильный режим дня, друзья, хобби, отдых. Хотя хз, вкатуном никогда не был, может у них по особому всё устроено.
Ссылается на что? На область памяти. Ты ярлык забрал, а область памяти осталась на том компе.
Типа того.
Да, и ебаная винда вместо логичного null reference exception выдает срань как на пике.
Спермохлебы, ваши оправдания?
> Спермохлебы, ваши оправдания?
На сперме больше юзеров -> больше money получаешь, разрабатывая под нее
Есть тут работающие аноны? Подскажите где вы работаете, и интересна ли вам ваша сфера?
Работаю 2 года в геймдеве, год ебался с анриалом, потом сьебался в мобильный гейдев дрочильни для домохозяек со сверхприбылями. В принципе на текущей работе устраивает всё - зп выше рынка, 17 стандарт, CI/CD, адекватная команда, вобщем всё круто кроме одного - задач. Я пиздец не люблю геймдев, но других вакансий практически нет только эмбеддед с сишкой и стмками. Хотел в ближайшие года 2 подготовиться к смене области, пока потихоньку подтягиваю алгоритмы и дрочусь с разными технологиями как хобби. Был у кого опыт полной смены области разработки? Расскажите не пожалели ли о смене работы?
Там вроде v8.
В смысле да, v8 компилируется сразу в машинный код.
Через UB.
>Есть тут работающие аноны?
Нету. Так как современный с++ - это эзотерический язык для just for fun программирования.
Нвидиа-кун c зп 700к/месяц не в счет, тк он программирует bat-файлы и пишет excel-таблички для своего начальника. Что он делает в этом itt треде вообще непонятно.
А, это я в компараторе накосячил. Все, понял
Но что-то я не совсем понимаю, что значит "вставить" новый элемент? Вставить куда? У элементов нету же индексов, есть только значения, которые могут повторятся. Единственная информация, которая идентифицирует элемент списка, это набор указателей.
В этом-то и дело, что нет просто "вставки". Есть вставка в начало, вставка в конец и вставка в середину (обычно перед i-ым элементом или после него). При вставке в середину ищешь циклом элемент устанавливаешь правильные значения указателей.
И не просто могут, а будут. Но ты ищешь не по значению, а по порядку, переходишь к следующему элементу и увеличиваешь счётчик, пока он не будет равен порядку, там и вставляешь.
Лол я так выше именно это и спрашивал. Вставляет в начало списка, первым элементом
Падажжи. Один мужик на ютубе, с++ программер сказал, что преимущество списков перед массивами в том, что можно без затрат производительности просто взять и вставить новый элемент куда хочешь.
Но есть один нюанс. Дополнительных затрат производительности не будет только если у тебя уже откуда-то есть указатель на место вставки.
Дело пяти минут. Регаешься на десятиминутную почту, входишь в студию и забываешь.
Я так уже несколько раз перерегивался. Одна учётка начинает просить телефон, я открываю десятиминутную почту, м всё по новой.
Мне похуй на анонимность, мой IP они и так видят. Но номер оставлять не хочу, пусть нахуй идут. У них есть моя почта, остальное их ебать не должно.
Попробуй нарисовать на бумаге, как кто куда указывает.
У меня так не получилось, пришлось указать номер. Вобще там любой прокатит, главное смску прочитать.
Да и че микрософт с моим телебоном сделает? Лучи 5G из Америки на меня направит чтоли?
В доставке пиццы в сто раз палевнее указывать номер, как и любые приложения на телебон ставить.
У меня в винде тонны извращенного хентая, алеее. Вот буду я работать в тесла, все узнают об этом и че? Отправят меня синтезировать кошкодевочек. А я может не хочу, я хочу программировать роботов-убийц для наступления скорейшего кибергулага на планете.
> В доставке пиццы в сто раз палевнее указывать номер, как и любые приложения на телебон ставить.
А вот ты шиз и параноик.
Что означает строчка "comp=[]()", что за синтаксический пиздец? Мне это напомнило перегрузку операторов, но там должно быть "operator=()" или "оператор[]()"
Используешь какие-то левые библиотеки, а потом недоволен. Ты бы еще спайсы за углом купил, а потом жаловался, что от него у тебя понос вместо кайфа.
Да, правее левой стандартной библиотеки может быть только свой каноничный велосипед.
Ну вот и пиши его. А то, как выяснилось вектор boolов лучше не использовать, потому что шизы сделали его неработоспособным в погоне за экономией памяти. Придется использовать другую структуру или писать свой динамический контейнер bool
Крестушню вообще какие-то шизики левые проектировали. Один cout << hui чего стоит.
Ты это не пизди, залетный. Проектировали язык так, чтобы был мощный и универсальный инструмент.
Странно, что компилируется - лямбда захватывает переменную pairs, а её нет в списке захвата. И вообще что это - вектор векторов?
>на вершине кучи лежит 3, а не 0, хотя в массиве pairs size у pairs[0] = size у pairs[3] =1, но (зв)pairs[0].begin() равен 0, а (зв)pairs[0].begin() равен 3.
Вообще ничего не понял из этого предложения. По компаратору мне кажется, что ты хочешь лексикографический порядок - сначала должны выводится с самой маленькой длиной, а затем с самым маленьким первым элементом. У pairs[3] размер 1 - он и идёт первым.
>лямбда захватывает переменную pairs, а её нет в списке захвата
Значит это или static или глобальная переменная в том же .cpp, что и лямбда.
Какие именно? У меня вообще нет лаб
а что не так? написано что твоё значение нигде не используется, то есть ты эту переменную нигде не применил, ей все равно на "орфографию"
Effective STL от майерса, устарела, но все еще ок для базового понимания идеи Итераторы-Алгоритмы
Спасибо
о да...
Тоже охуел с вопроса про лямбду
Оказывается есть указатели на массивы, это не, что указывают на нулевой элемент массива, а самые настоящие указатели на массив, сохраняющие информацию о его размере и не распадающиеся при передаче функцию. Синтаксис объвления чем-то схож с объявлением указателей на функцию T (⚹ptr)[N] = &arr; Если такой указатель увеличить на единицу, то получится адрес сдвинутый на размер всего массива? а не на размер одного элемента в массиве. Также есть ссылки на массив T(&ref)[N] = arr; Работают как и все ссылки как псевдонимы переменной, поэтому можно обращаться к элементам массива ref[5], ref[3]
Если вас бесит то, что один массив можно скопировать в другой только через цикл в языке С++, то можно облачить массив в структуру или класс struct A{T arr[N];}, а затем просто одному экземпляру структуры присвоить другой экземпляр, и все элементы массива будут автоматически скопированы.
А теперь посмотри на std::array и шаблонные перегрузки Secure CRT
Для легаси массивов давно есть удобные обертки span, можн и указатели делать и в stl пихать. А так используй array. Или вектор.
А чё в этом нового, если это всё из С пришло? А скопировать можно через memcpy(to, from, sizeof(a[T])).
target_compile_options(foo PUBLIC -m32) для GCC/Clang и какой там есть соответствующий флаг для MSVC
Это ещё из сей тянется. Ну вот смотри, есть у тебя int a[4][5].
a[1][1] - int
&a[1][1] - int
&a[1] - ???
&a - ???
&a[1] это не int, потому что это не указатель на указатель, а указатель на массив из пяти элементов, и ему при инкременте, например, нужно будет перешагнуть через пять интов.
Вот и получается, что
&a[1] - int ()[5]
&a - int (*)[4][5]
Абу, введи ты уже теги для кода, Господи.
a[1][1] - int
&a[1][1] - int⚹
&a[1] - int (⚹)[5]
&a -int (⚹)[4][5]
> Для легаси массивов
> легаси
Вот оно как.. Штош
>>200644
> А так используй array. Или вектор
Я недавно только полюбил векторы, теперь не знаю, как бы жил без них.
>>200654
>>200778
А я начал с плюсов.
Хотя недавно прочитал, что в с гораздо понятней взаимодействие с операционной системой и мне стало интересно.
Статический unique_lock и condition_variable? Вот как это намутить, можно пример? Даже не компилируется у меня
Ошибки даже не в моих исходниках, а в левой библиотеке, которую я юзаю, и почему то еще в бибилиотеках MinGW, который установился вместе с Qt 6.2.
Мне че теперь ползать по чужим библиотекам и править там эти ошибки?
>Очередной выпуск рубрики "новые удивительные открытия в с++"
>Оказывается есть указатели на массивы
Бро. Нам вполне хватило того, что в этом ИТТ-треде открыли, что в C++ есть лямбды.
Ошибки то сами прочитай
Кажись тебе надо просто инклуды пофиксить
Господи когда уже можно будет а модулями нормально работать, чтобы такого не было
https://0bin.net/paste/AK5xDZi6#bWboWISE8tpAbL7Fea1KMP8a3RZylTpuWPQzYaOyAMz
Тут скорее всего как с математикой. Ты не научишься решать задачи, если не будешь их решать.
Любая книга по алгоритмам - а потом дрочить литкод
В математике разжевываются общие методы, есть примеры решения задач (применения методов) и есть ответы для самопроверки. Можно буквально ограничиться парой книжек и задачником, даже без гугла вполне можно обойтись.
>В олимпиадном программировании разжевываются общие алгоритмы, есть примеры решения задач (применения алгоритмов) и есть тесты для самопроверки.
шень
Ну так анон и спрашивает, где об этом прочитать.
А какие именно инклуды, можешь подсказать? Хотя бы примерно почувствовать?
Он везде ругается на byte, хз чем он ему не нравится.
https://stackoverflow.com/questions/60793009/error-using-qt-during-build-c2872-byte-ambiguous-symbol
Никогда не делай using namespace std; в хидерах
Спасибо, похоже ты прав, попробую починить.
А можешь еще подсказать, почему раньше работало, а теперь перестало? Чисто развития ради.
А хз. Перешёл на c++17 например. Или ещё что (до фига чего) поменялось между 5 и 6 версией
Перешел в смысле произошел жесткий переход с C++11 на C++17? Потому что в pro файле у меня C++11 остался прописан.
Ну тогда хз вообще, я с Qt и mingw не работал никогда. Может ещё откуда определение типа подтягивает
Ну ладно, ты итак мне помог, спасибо. А то я охренел, даже не знаю, че делат ьв таких случаях, да и загуглить как то не смог толком.
Видимо, всё таки проблемы C++17 и niflib, про array подумали а про byte нет.
https://github.com/niftools/niflib/commit/dad027aa40bc4ea90b2cc6c80f2b22962a025f99
Ололо, нашел чем удивить. А как тебе тип ссылки на массив неизвестной длины? T(&ref)[] = arr;
Ну давайте письками померяемся.
Я довёл MSVC до Internal Compiler Error.
Вроде, это было сочетание Variadic template, CRTP и кажется множественные наследования, не помню точно.
А какую хуйню смогли устроить вы?
> А как тебе тип ссылки на массив неизвестной длины?
У меня не собирается
invalid initialization of reference of type 'int (&)[]' from expression of type 'int [6]'
>Я довёл MSVC до Internal Compiler Error.
>Вроде, это было сочетание Variadic template
Это классика. MSVC в некоторых вещах в плане поддержки (новых) стандартов стал заметно обгонять GCC и Clang, но сунь в него variadic template чуть нетривиально вложенный внутри другого variadic template, и он клеит ласты.
>>202572
цепепе туони включи
Я потом долго пытался понять, что же я сделать хотел. А когда понял, понял
что можно проще реализовать
Бамп
кстати да, дальше где есть действие просто а=б или б=а ошибок не выдает, только там где сложение
Добавь const к аргументу operator=.
Твой operator+ возвращает matrix по значению, т.е. создаётся временный объект (rvalue), который существует только внутри выражения, где использовался +. Такие объекты подразумеваются неизменямыми (исключение move семантика). А в operator= ты передаешь значение по обычной ссылке, что позволяет изменять состояние переданного объекта. А это уже ошибка.
А ещё лучше, сделать два оператора, для const matrix& и matrix&&. И конструкторы тоже. Гугли rule of 5
>новые удивительные открытия в с++
А еще в мире C++ можно археологией заниматься. Например, во времена динозавров можно было присваивать потоки (_withassign на пикрил).
Нет уж, легаси, написанного неизвестным людьми из неизвестных соображений мне хватает в рабочих проектах.
_withassign это часть библиотеки до принятия 98 стандарта.
>Нету. Так как современный с++ - это эзотерический язык для just for fun программирования.
Ok.
Ты хотел нормального ответа от шарпобляди?
появилась необходимость выводить на печать этот документ ,
подозреваю, что это можно сделать с помощью dynamicCall, но не знаю, где достать все обращения(Quit() и т.п.) для этой функции
можете пожалуйста подсказать где достать эти обращения.
Если я ошибаюсь и с помощь dynamicCall нельзя вывести на печать подскажите пожалуйста с помощью чего это можно сделать
Лабы идут нахуй.
> где достать все обращения(Quit() и т.п.) для этой функции
> можете пожалуйста подсказать где достать эти обращения.
На официальном сайте https://doc.qt.io/qt-5/qaxbase.html
Вроде нет, я запихивал в кют бустовские корутины (которые ебут стек и поганят на бинарном уровне) и все было норм. Остальное почти все там вроде просто на уровне хедеров, и никак не напортачат.
Знание языка и "умение программировать" это разные вещи. Программировать, судя по всему ты умеешь - опыта в 3 года для мидла ок.
А язык - ну прочитай Майерса, вспомни все, и иди на собесы
>ебут стек
Самое наркоманское, что я видел это sljit в pcre, компиляющий регекспы в натиные бинарные куски
Я не он, но с радостью писал бы десктоп (не обязательно UI) на шарпе.
Но пишу на плюсах, потому что
1 знаю их и подъёбы winapi лучше, чем что либо другое
2 студия божественна
3 надо дёргать сервисы, драйвера и COM объекты
Можно. Но основное правило как и везде - взбалтывать, но не смешивать (любая используемая либа должна обитать в своей песочнице). Бэк пишешь на beast/asio, фронт на Qt. Между ними санитарный контроль в виде абстрактных интерфейсов. В бэке никаких QString'ов быть не должно и наоборот.
>просыпаешься
>2021
>уже реализуются фичи с++23
>ты еще толком не знаешь с++14
ну ептваю
>надо дёргать сервисы, драйвера и COM объекты
знаешь, не у всех есть хата доставшаяся от бабки, чтобы работать за минималочку в нии
ты еще скажы что ты математик, тогда сразу нахуй -70% к зп
Нет, не легаси, до некоторых мест винды только так можно адекватно (без адовых велосипедов и недокументированых костылей) достучаться.
>>205736
Хаты нет, снимаю сычевальню. Нет, не математик, не люблю алгоритмодрочерство. Обычные задачи. Положить-переименовать файл, установить и запустить сервис, из сервиса наоборот позапускать процессы под залогинеными юзерами, пообщаться с сервером, получить стейт из сервиса, что-то сказать драйверу. Незамутненная прикладуха, никакой наукоёмкости.
> Игровой движок со скриптингом на питоне
> Фреймворк для машоба
А как подружить питон и плюсы? Типо нельзя же написать функцию на плюсах и вызывать её из питона или можно? Как?.
Можно, все базовые питоньи функции для взаимодействия с внешним миром так и написаны.
Гугли python ffi, boost python и прочее.
А у нас кровавый энтерпрайз
class B
{
public:
B()
{
std::cout << "B() called\n";
}
B(int a)
{
std::cout << "B(int) called\n";
}
};
class A
{
public:
B b;
A() : b(10)
{
b = B(10);
}
};
int main()
{
A a;
return 0;
}
На выходе получаю:
B(int) called
B(int) called
Почему вызывается конструктор копирования в строке b = B(10);,
ведь в списке инициализации b(10) объект уже был инициализирован конструктором копирования? Соответственно, здесь b = B(10); должен вызываться operator=(...). Объект ведь не может инициализироваться дважды.
class B
{
public:
B()
{
std::cout << "B() called\n";
}
B(int a)
{
std::cout << "B(int) called\n";
}
};
class A
{
public:
B b;
A() : b(10)
{
b = B(10);
}
};
int main()
{
A a;
return 0;
}
На выходе получаю:
B(int) called
B(int) called
Почему вызывается конструктор копирования в строке b = B(10);,
ведь в списке инициализации b(10) объект уже был инициализирован конструктором копирования? Соответственно, здесь b = B(10); должен вызываться operator=(...). Объект ведь не может инициализироваться дважды.
> Почему вызывается конструктор копирования в строке b = B(10);,
«B(int) called» — это вызывается конструктор копирвоания?
Сори, я, видимо, ночью уже туплю. Полчаса пытался разобраться, почему так происходит, но только сейчас увидел, что у меня там не B(const B & rvalue), а B(int a). Не знаю почему, но мой мозг упорно воспринимал это как конструктор копирования. Только теперь дошло, что это конструктор с параметром.
Значит, тут все нормально. B b в классе инициализируется конструктором по умолчанию. Потом в теле конструктора A инициализируется temporary object конструктором B(int) и он присваивается через operator=(const B & rvalue) члену b. Вопрос закрыт
Догадывался, что так и должно быть.
Эх, как же у меня горел пердак, когда через час отладки я понял, что сравниваю не два числа, а число и строку.
морщу лоб уже 2 дня ни как не могу сообразить, делаю ифами
Итак - при включении качает от нуля до уставки (100), ждет падения до гис (95) и качает до 100 опять
кажется очень простым но что то идёт не так
vals-датчик давления int 0-100
p1-уставка int-100
p3-гистерезис int 0-40
key1 признак включения -bool
full признак первого набора давления bool
[code]sum=p1-p3;
if (vals>=p1 && f_key1 == true && full == false) {
full = true;
}else{ out= HIGH); }
if (full == true && f_key1 == true ) {
if (vals>p1){ out= LOW);
} if (vals<sum){ out= HIGH); }}
[/code]
Во первых зачем писать ==true когда это не требуется. А ==false заменяется на !=
g++ -lcurl -lcurlpp -Wall main.cpp
Работает хорошо и файл есть. Но его нельзя запустить на другой тачке, ибо libcurlpp.so.1: cannot open shared object file: No such file or directory
А когда я делаю g++ -lcurl -lcurlpp -Wall main.cpp -static, то
/usr/bin/ld: cannot find -lcurl
/usr/bin/ld: cannot find -lcurlpp
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
ЧЯДНТ ?
> Попробуй дёрнуть ldconfig, чтобы либы проиндексировались.
Без понятия, что это
> Ещё посмотри от чего твой бинарь зависит с помощью ldd.
Ну я это и так знаю. Куча дерьма и нужная мне libcurlpp
https://stackoverflow.com/questions/32102613/how-to-compile-a-program-with-static-libcurl
Вообще если ты libcurl ручками собираешь, то для статической линковки нужно в ./configure указывать --enable-static. Если пакетами ставишь, то пакеты тоже не все подходят (для разработки обычно ставястя "libname"-devel).
Я ставлю libcurlpp, обёртку для curl. И как я понял, тут чтобы его собрать надо nmake какой-то. Пиза у вас тут, крестовиков, с линковкой и подключением библиотек, конечно.
Если собирать либы с --enable-static, то что это даст? Будет какой-то новый особый файл, который можно будет склеить с бинарником?
>Будет какой-то новый особый файл
Да.
Под виндой статическая либа - файл .lib, динамическая .dll (и к ней в пару создаётся .lib являющийся интерфейсом).
Под linux статическая .a, динамическая - .so.
>nmake
Это для сборки под windows, но через студию. Ты ничего там не путаешь?
Возможно, да, что-то путаю. Я просто хочу удобную http либу для плюсов. Пока колупаюсь. Возможно, стоит просто разобраться с ванильным curl.
>Под linux статическая .a,
Статическая либа ведь линкуется (вклеивается) в исполняемый файл? Я же не путаю?
>Это для сборки под windows, но через студию.
You can build curlpp in three different ways
A. from within MS Visual Studio IDE
B. using msbuild tool and solution files
C. using namke and makefile
>Vcpkg is a package manager for the different C and C++ libraries.
>Vcpkg can collect usage data. The data collected by Microsoft is anonymous.
Ясно
очередной шизоид, который боится, что его хелловорлды украдут.
vcpkg полностью опенсорс, иди посмотри, что там по телеметрии
>ты еще скажы что ты математик, тогда сразу нахуй -70% к зп
Ты сделал меня плакать.
Ну почему я не родился негром, а?
>>#elifdef (since C++23)
>>#elifndef (since C++23)
Интересно, они долго это придумывали? Аж целый 23 стандарт... Наверное даже устали придумывать и разрабатывать
А главное - нахуя?
Вместо #ifdef лучше таки писать #if defined - позволяет чище делать более сложные условия.
А еще лучше делать просто #if X - чтобы делать нормальные красивые конфиги
А еще лучше забыть уже всю эту макросовую хуиту, когда есть нормальные компалтайм условия
А можно как-то этот vcpkg скачать в папку с проектом, чтоб например собрать проект оффлайн когда библиотеки сильно обновятся?
короче, вот так правильно
if (vals < (p1 - p3 )) out = true;
else if (vals > (p1 + p3 )) out = false;
у нас так и сделано, вцпкг лежит в папке с проектом и пребилд скрипт все скачивает и собирает, если не собрано.
Заодно спрошу: как проверять правильно ли отработал delete[]?
Интересно, покажешь пример скрипта? Это нормально для каждого проекта тащить свой vcpkg?
А если надо?
> Интересно, покажешь пример скрипта?
Там нихуя интересного, просто vcpkg install с манифестом, дополнительные костыли для бинарного кэширования и все.
> Это нормально для каждого проекта тащить свой vcpkg?
Микрософт сам это рекомендовал до того, как сделал версионирование. У нас свои либы запакованные в вцпкг, по-этому мы просто вцпкг и нужные порты храним в проекте и не ебем голову
for(std::set<int>::iterator it = clients.begin(); it != clients.end(); it++)
И есть беда, что в случае удаления элемента из сета мне надо продолжать цикл либо с самого начала либо со следующего элемента (лучше последний вариант)
Пробовал переставить итератор снова в начало и continue, но тогда если элемент был всего один то сега
Вариант с goto сработал, ток хотелось бы без него
Как делать?
https://en.m.wikipedia.org/wiki/Erase–remove_idiom
Remove или remove_if сдвигают элементы для удаления в конец контейнера, erase их удаляет одним действием.
Ты не способен даже прочесть то, что сам советуешь, пиздец.
> The erase–remove idiom cannot be used for containers that return const_iterator (e.g.: set)
https://en.cppreference.com/w/cpp/container/set/erase
Вот тут есть пример, как делать: erase возвращает итератор на следующий элемент, поэтому можно просто
for(auto it = set.begin(); it != set.end();)
{
----if(condition)
--------it = set.erase(it);
----else
--------++it;
}
да
в следующей жизни повезет
Дайте ссылку на викторину по c++14
Норм, оссобенно если они маленькие и по названию спп и х файла будет понятно что в них находится
А как правильнее инклуды писать в таком случае? Для всех классов писать в самом начале хедера? Или можно перед объявлением класса писать заголовочники, которые нужны именно ему?
Мне второй вариант кажется более читабельным, только не будет ли ошибок каких нибудь из-за этого?
Начал смотреть хедеры Niflib, оказывается там везде понатыканы using namespace std, почти в каждом хедере. Из-за этого наверно компилятор ругается, вроде начиная с С++14 так нельзя.
Как по уму решить эту проблему? Пока на ум кроме ручной чистки хедеров Niflib ничего не приходит.
То есть я понимаю разницу, но как мне сделать во вотром случае не константную ссылку?
>В чем разница между этими строчками?
в каааждой строчке только точки после буквы L
ты поймешь конечно все что я сказать хотел!
Что почитать по c++14
Правильно, только тип зверя надо передавать аргументом createAnimal, цикл перенести в foo(), для него можно енум завести. И сырые указатели с утечкой памяти в foo() режут глаз.
> цикл перенести в foo()
Везде пишут мол надо отделять изменяемую часть от неизменной, а все что меняется от рантайма к рантайму переносится в фабрику, которая, я если я все понял, является здесь createAnimal()
Что считать "изменяемой" частью? Пусть "изменяемым" будет источник названия зверя, а фабрика будет создавать только то, что ей говорят. Источник может быть любым - ввод с клавиатуры, конфиг, БД и т.д. Если понадобится создавать 10000 заранее известных типов зверей, не придётся дорабатывать фабрику, чтобы убрать из неё ввод с клавиатуры.
А, ебать понял
библию, книгу апокалипсиса, на этой неделе патриарх затирал про то что апокалипсис мол начнется с полного порабощения и контроля человека, а мол современные цифровые технологии позволяют это сделать! а значит ускоряют приближение Конца и Судного дня!!
Нельзя таким образом менять ключ в set и map, они не просто так константы возвращаются.
Помогите, словом.
Начал дрочить кресты, ебусь с указателями.
Задача такова:
Объявите указатель на массив типа int и выделите память память для 12-ти элементов. Необходимо написать функцию, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов: (пик1)
Скажу сразу, я решил заполнять массивы рандомом и тут-то повсплывали всякие сложности, но отступать мне не хотелось и я выдал такой вот пахомистый код (пик2)
В чем задумка? Я создаю массив, рандомно его заполняю, затем создаю массив, где четные и нечетные числа меняются местами, для чего в заполнении массива прописываю функцию. Функция сия создает два динамических массива: один с четными числами оригинального массива, другой - с нечетными. Затем функция проверяет каждое число оригинального массива на предмет его четности или нечетности и заменяет его соответствующим по индексу числом из противоположного массива. На случай, когда один из массивов закончится я предусмотрел поместить в индекс результат остатка от деления текущего значения итератора на размер заканчивающегося массива.
Сам код:
#include <iostream>
#include <cstdlib>
#include <ctime>
int addFoo(int massiv, int razmer_massiva);
int main()
{
srand(time(NULL));
int size_of_array = 12;
int arr = new int[size_of_array];
std::cout << "Original array: ";
for (int i = 0; i < size_of_array; i++)
{
arr = 1 + (rand()%20);
std::cout << "\t" << arr << " | ";
}
std::cout << std::endl;
std::cout << "Reversal array: ";
for (int i = 0; i < size_of_array; i++)
{
arr = Foo(arr, size_of_array, i);
std::cout << "\t" << arr << " | ";
};
std::cout << std::endl;
delete[]arr;
return 0;
}
int Foo(int massiv, int razmer_massiva, int iterator)
{
int size_of_even_arr = 0;
int size_of_odd_arr = 0;
for (int i = 0; i < razmer_massiva; i++)
{
if (massiv % 2 == 0) size_of_even_arr += 1;
else size_of_odd_arr += 1;
}
int even_arr = new int[size_of_even_arr];
int* odd_arr = new int[size_of_odd_arr];
for (int i = 0, y = 0, z = 0; i < razmer_massiva; i++)
{
if (massiv % 2 == 0)
{
even_arr[y] = massiv;
y++;
}
else
{
odd_arr[z] = massiv;
z++;
}
}
int result = 0;
if (massiv[iterator] % 2 == 0)
{
if (massiv[iterator] <= size_of_odd_arr)
{
result = odd_arr[iterator];
}
else
{
result = odd_arr[(iterator%size_of_odd_arr)];
}
}
else
{
if (massiv[iterator] <= size_of_even_arr)
{
result = even_arr[iterator];
}
else
{
result = even_arr[(iterator%size_of_even_arr)];
}
}
return result;
delete[]even_arr;
delete[]odd_arr;
};
Помогите, словом.
Начал дрочить кресты, ебусь с указателями.
Задача такова:
Объявите указатель на массив типа int и выделите память память для 12-ти элементов. Необходимо написать функцию, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов: (пик1)
Скажу сразу, я решил заполнять массивы рандомом и тут-то повсплывали всякие сложности, но отступать мне не хотелось и я выдал такой вот пахомистый код (пик2)
В чем задумка? Я создаю массив, рандомно его заполняю, затем создаю массив, где четные и нечетные числа меняются местами, для чего в заполнении массива прописываю функцию. Функция сия создает два динамических массива: один с четными числами оригинального массива, другой - с нечетными. Затем функция проверяет каждое число оригинального массива на предмет его четности или нечетности и заменяет его соответствующим по индексу числом из противоположного массива. На случай, когда один из массивов закончится я предусмотрел поместить в индекс результат остатка от деления текущего значения итератора на размер заканчивающегося массива.
Сам код:
#include <iostream>
#include <cstdlib>
#include <ctime>
int addFoo(int massiv, int razmer_massiva);
int main()
{
srand(time(NULL));
int size_of_array = 12;
int arr = new int[size_of_array];
std::cout << "Original array: ";
for (int i = 0; i < size_of_array; i++)
{
arr = 1 + (rand()%20);
std::cout << "\t" << arr << " | ";
}
std::cout << std::endl;
std::cout << "Reversal array: ";
for (int i = 0; i < size_of_array; i++)
{
arr = Foo(arr, size_of_array, i);
std::cout << "\t" << arr << " | ";
};
std::cout << std::endl;
delete[]arr;
return 0;
}
int Foo(int massiv, int razmer_massiva, int iterator)
{
int size_of_even_arr = 0;
int size_of_odd_arr = 0;
for (int i = 0; i < razmer_massiva; i++)
{
if (massiv % 2 == 0) size_of_even_arr += 1;
else size_of_odd_arr += 1;
}
int even_arr = new int[size_of_even_arr];
int* odd_arr = new int[size_of_odd_arr];
for (int i = 0, y = 0, z = 0; i < razmer_massiva; i++)
{
if (massiv % 2 == 0)
{
even_arr[y] = massiv;
y++;
}
else
{
odd_arr[z] = massiv;
z++;
}
}
int result = 0;
if (massiv[iterator] % 2 == 0)
{
if (massiv[iterator] <= size_of_odd_arr)
{
result = odd_arr[iterator];
}
else
{
result = odd_arr[(iterator%size_of_odd_arr)];
}
}
else
{
if (massiv[iterator] <= size_of_even_arr)
{
result = even_arr[iterator];
}
else
{
result = even_arr[(iterator%size_of_even_arr)];
}
}
return result;
delete[]even_arr;
delete[]odd_arr;
};
Так толсто, что даже толсто.
Как прокачать c++11 до c++14?*
Помилуй бох, я мало что понял из написанного.
Мне нужно только STL. ДАже без самописных структур. Если нет адекватного способа, то ок, я подумаю над другим
Говнокодер создатель велосипедов итт
Для поиска для вставки разные компараторы?
-DBUILD_SHARED_LIBS=OFF
Или в самом Cmake UI снимаешь галку BUILD_SHARED_LIBS
Можешь ещё build_opencv_world выставить, чтобы собралось в виде одной большой либы.
А вообще на самом сайте OpenCV есть масса ссылок для сборки под всё и вся. Пошевели свое жопой хоть немного.
Да шевелил и ставил, что ты говоришь, только потом в проекте Unresolved extensials, хотя библиотеки присоединены и все headerы тоже.
Только "build_opencv_world" не пробовал, спасибо за наводку.
Ищу именно туториал от начала до конца.
Ну так залезь в исходники OpenCV и посмотри к какой либе externals относится. Ещё ты мог проебаться с opencv_contirb. Это либы идут вместе с OCV, но они от сторонних разрабов и требуют явного указания при сборке.
-DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
Вот этого >>211543 говноеда не слушай. OCV дико модульная хуйня с кучей фич под разные платформы. Для laba.cpp конечно хватит, но в реале через стандартные пакеты её никто не ставит.
Я взял тестовый application из построенной папки через CMAKE и скопировал все "include" пути и список библиотек и сука заработало!
Спасибо, братюнь, ещё в феврале хотел использовать OpenCV, но не мог присоединить к проекту.
Когда обезьяна не знает про конфигурации и фичи вцпкг, из которых ты можешь собрать ровно то, что тебе нужно, и продолжает делать руками то, что уже автоматизировано у всех бояр.
ты еще поди в виме код пишешь, да, додик?
Devops макака, зачем ты мажешься говном в треде для разработчиков?
Объясните, как c++ компонует свои классы в портабл екзекьютабл? Под каждый класс создаёт дефолтный прототип? Где хранятся функции-члены? Где берется место для статичных переменных? Где про всё это почитать в подробностях?
"Классов" нету в бинаре, там просто месиво из байтов и функций (которые раньше были методами).
Место для статических переменных берется в .bss (https://en.wikipedia.org/wiki/.bss)
Попробуй exe открыть в IDA
Не помню как в других IDE, но если студия, то попробуй в Code Generation->Runtime Library убрать DLL. Если подключаешь статическую либу, то библиотека среды выполнения тоже должна быть статической.
В C, статично-алоковані об'єкти без явного ініціалізатора значення будуть ініціалізовані нулями (для арифметичних типів) або нульовим вказівником (для вказівних типів). В реалізації C, як правило, нульові значення і вказівники у бітовому представленні складаються лише із бітів з нульовими значеннями (хоча це не вимагається стандартом C). Таким чином, сегмент BSS як правило містить всі неініціалізовані об'єкти (змінні і константи), що оголошені в області видимості файлу (тобто, за межами будь-якої функції) а також не ініціалізовані локальні статичні змінні (локальні змінні[en] оголошені із ключовим словом static ); статичні локальні константи повинні ініціалізуватися в оголошенні, оскільки вони не мають окремого оголошення, вони як правило не розміщуються у BSS секції, хоча вони можуть явним чи неявним чином ініціалізувати в нульове значення.
Пітер ван дер Лінден[en], автор мови C і програміст, говорить, "Деякі люди люблять запам'ятовувати цей сегмент, як 'Краще залишити місце'" ("Some people like to remember it as 'Better Save Space'). Оскільки BSS сегмент містить змінні, які ще не мають будь-якого значення, не потрібно зберігати представлення цих змінних. В об'єктний файл записується розмір BSS сегмента, але BSS (на відміну від сегмента даних) не займає ніякого фактичного місця в об'єктному файлі."[3]
Понял, спасибо
Перекати.
https://youtu.be/Bym7UMqpVEY
Товсто
Ну может есть проверенная простая для подключения капча? Чтобы я не пробовал разные варианты в поисках адекватной. Ну если нет, то я конечно найду сам, но думал тут подскажут
Напиши чат сервер с шифрованием и чтобы это было максимально быстро. Чтобы миллиард человек могли пользовать этой хуйней в один момент, а прога пыхтела на твоей пентиуме и все работало
Вообще это очень странно, что у тебя за 4 года не было ни одной идеи, достойной стать дипломной работой. Так что иди нахуй, дибил.
если бы ты смог осилить информацию в скобочках, то понял бы, что идешь сходу нахуй
маневр.
но доля правды есть (
Липпман норм чел вобще, он причастен к разработке языка если чё.
Тут у тебя трудности перевода. Держи под рукой всегда английское издание. А еще на сайте паблишера всегда есть пополняемый список опечаток. Об этом всегда во введении к книге говорится и дается ссылка в интернеты.
По фактам Липпман здесь хочет подчеркнуть важное различие между ()-инициализацией и {}-инициализацией.
Липпман не может тебе изложить все и сразу, поэтому он часто прибегает к таким фигурам речи, как "по причинам, которые будут понятны в дальнейшем" и тп.
Это как запутанный клубок ниток. А C++-дрочеры - это такие няшные котики, которые любят играть с клубками пряжи.
Начинать использовать cmake
сделай проект и не еби голову
>у тебя за 4 года не было ни одной идеи, достойной стать дипломной работой
А что можно нормальное написать в качестве дипломной работы, причем такое, что твой научник согласился бы это вести?
Компилятор/Интерпретатор своего ЯП?
Аналог 3дс макса?
Realtime анализатор трафика?
>автоматизировать
Это про какую-нибудь 1С, джаву, питон, шарпик, ну язык на котором можно быстро бизнес логику написать.
На С++ особо ничего и не автоматизируешь из простых вещей.
>на них можешь че угодно создавать
И на голом си, и даже на асме можно че угодно создавать.
Другое дело, что у каждого языка своя ниша, и писать систему учету товаров на складе с микросервисами на С++ никто в здравом уме не станет.
Учёт товаров это одна задача из миллиона. Автоматизировать много чего надо.
Сделай сам какой нибудь diy датчик чего нибудь и напиши программу, которая данные с него снимает и выводит непрерывный график на компе.
>писать систему учету товаров на складе с микросервисами на С++ никто в здравом уме не станет
1с вообще то на с++ написан
кхе кхе
ля, челик
на нормальной кафедре с нормальными преподами они сами придумывают темы для дипломов а потом раздают их студентикам на выбор..
100% у них уже есть готовые статиклибы под распространенные платформы, тебе только линкануться нужно правильно будет и все..
наверняка в любых линуксах в любом менеджере пакетов opencv поставляеться вместе со статиклибами.. а под винду еще проще..
ну а если ты понимаешь opencv под какую-нибудь экзотику, то тогда респект тебе и я умываю руки
так чтож 2 варианта либо ты слишком тупой либо слишком умный..
если ты знаешь этапы компиляции и линковки си программ, знаешь структуру исполняемого файла, обладаешь теорией о построении компиляторов, то можно будет тебе объяснить здесь и некие специфичные особенности связанные с компиляцией и линковкой уже с++
если ты не знаешь вышеперечисленного, то в треде это не объяснить, ты слишком многого просто не поймешь
Раньше долго сидел в болоте НИИ, пилил всякую херню от работы с бд, до всяких визуализаторов на простом попенжл и ГИСин. Было интересно, тк ассорти задач и коллектив приятный. Но денег нихуя, да роста тоже, тк команда маленькая и варишься в своём соку. Карьеру проебал считай зависнув там.
Потом рискнул попробовать в одну фирму с графонтехнологиями, тк это единственная относительно интересная сфера в вайти, но не осилил - слишком мозг протух от НИИ. Хотя после этого из пяти собесов я получил офферы по всем, по одному даже за нарисовали на 50% выше запрошенного.
В итоге работаю в телекоме вот третий год. Уже подзаёбыает, тк задачи тоска в основном. Кодовая база большая, вменяемой доки нет, мейнтейнить и расширять это больно. Думал буду в энтерпрайзе дохуя опыт получать, но что-то в итоге оказалось, что команда перегружена и каждый пилит в основном одни и те же модули/проекты, обсуждать нечего или некогда. Из плюсов - фирма комфортная, прогеров облизывает. Поднял ЗП до человеческого уровня. Надо бы дальше сьебывать, но теперь ещё страшнее: вроде нихуя не обогатился по навыкам, а меньше получать уже не годится. Опять же, найти интересную сферу - сложна. Из интересного недавно приглашали только конторы из Маськвы. Но чисто из дома работать я не могу - эффективность низкая и начинает крыша протекать быстро из-за отсутствия пассивной социализации. Пока думаю как выкатиться на забугорного пана, тк сносный разговорный английский без дела томится.
%Спасибо, что прочитали личный бложик крестоёба. Подписывайтесь, ставьте лайк, жмите колокольчик%
Типичный сториз стареющего омежки.
Мимо выкатился из ГовНИИ в графений и трёхмерку (не гейдев) а потом в машоб/зрение и умный эмбед. Иду в ногу с прогрессом, от энтерпрайз и легаси говна ловко ускользаю, с плюсами постепенно прощаюсь. Зп продолжает расти, intel/huawei и прочие яндексы сами ищут знакомства. Так то.
Я кажется понял, у меня там компилятор MinGW, а он только *.a файлы умеет собирать, так ведь?
ты никак не слинкуешь то, что было высрано разными компиляторами.
нет, конечно можно, у кланга там есть возможности высирать в нужных форматах, да и линковать можно динамически через extern "C", но это уже не совсем новичковая тема
Найc, спасибо
https://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf
А дальше насиловать IDA, читать блоги разработчиков тулсета, смотреть как в нём устроена CRT, что и как происходит до и после main(), как устроен манглинг.
На блюдечке такой инфы нет, потому что мало кому надо, а кому надо, сам разберётся с учётом того, что хочет сделать
>яндексы сами ищут знакомства
Но ведь яндексы и так ищут знакомства со всеми подряд. Мне за ноябрь порядка 20 херочек и херов написало с предложением порещать интереснейшие задачи в Лавке
Ну а если серьёзно, то как не быть омежкой, а быть как ты? Научи, о дваче-мудрец.
Вот этого двачую.
vcpkg уже давно стал полноценным пакетным менеджером не хуже pip там или maven
В core guidelines говорят не использовать беззнаковые переменные, даже когда значение не может быть отрицательным. Бъярне сам признал обсёр с беззнаковыми индексами в STL
А он там есть? Я вообще только вчера про vcpkg узнал (что только зумеры не придумают, чтобы самим либы не собирать)
Бля чел, я спецом посмотрел есть ли такая фича, и после этого запостил. Есть, есть.
> (что только зумеры не придумают, чтобы самим либы не собирать)
Я бы сказал - что главная проблема С++ это ебаные деды с вимом, мейкфайлами и ручной сборкой всего на свете. Мы не в каменном веке живем, много где в С++ уже просто не надо ебаться.
Не буду спорить о проблемах крестов. Просто скажу, что не сильно разделяю твое мнение. Но все равно в какой-то момент нужно будет делать кастомную сборку того же opencv с выпиленные/впиленными фичами и вообще любыми их комбинациями. В vcpkg все равно нет на любой вкус собранных либ.
Само собой - уметь надо всё, но и тулинг надо использовать там, где такие лютые каштомизации не нужны.
где перекат?
>порядка 20 херочек и херов
из них 80% хуй пойми кто из "кадровых агентств"
>интереснейшие задачи в Лавке
Мне предлагают задачи для беспилотного транспорта.
>как не быть омежкой
Не соглашаться на легаси говно и энтерпрайз. Быть там, где молодёжь. Не сидеть годами в одном месте, особенно если тебя облизывают.
>люди алгоритмы придумывали новые
Ну это уже ближе к чему-то математическому. Какой-нибудь новый алгоритм придумать для быстрого верчения деревьев нужно нехило так дрочиться алгоритмами еще со школы, имхо.
>с плюсами постепенно прощаюсь
Куда перекатывашься? На раст? Или в питон, раз в зрение вкатился?
>>214175
>Иду в ногу с прогрессом, от энтерпрайз и легаси говна ловко ускользаю
Интересные задачи (не энтерпрайз и не легаси) хорошо оплачиваются у нас? Я когда-то думал вкатиться в С++ писать йоба-софт вроде компиляторов или зрения, а в итоге стал джавадебилом, который грузит джейсоны на 8 джаве в одном зеленом банке...
>Куда перекатывашься?
В сторону Python. Но c++ всё равно нужен, когда надо софт в эмбед запихивать.
>хорошо оплачиваются у нас
В российских реалиях Java/Kotlin/Enterprise в любом случае будут выгоднее по деньгам. Разрыв можно покрыть, только если работать с иностранцами.
> Куда перекатывашься?
Любой успешный программист перекатывается на повер поинт обычно. Если этого не происходит, то нужно задуматься.
Я умею дохуя всего, и именно по-этому я выбираю нужный тулинг для нужной задачи
Звучит как слоган из рекламы для домохозяек.
Я не боюсь человека, знающего тысячу тулов. Я боюсь человека, который использовал один тул тысячу раз.
Вижу модули. Прочитал коротко - думаю, .ну наконец-то что-то нормальное в язык завезли.
Потом смотрю как оно сделано в плане кодерского экспириенса. Это же пиздец какой-то. Нахуй они в таком виде-то нужны?
У меня на самом деле уже закрадывается подозрение, что это все делается спецом чтоб добить бедненький С++. Иначе я не могу понять - на кой хуй объявлять нормальные вроде как фичи, но делать их в конечном счете так, что никто абсолютно не будет ими пользоваться, ведь сделано он именно так, что пользоваться этим тупо невозможно.
Блин, да посмотрите как в ебучем JS модули сделаны. Да, там тоже есть свои хуевости, но уж получше чем плюсовские это 100%
>Как этого избежать?
Использовать вместо make файлов или проектов студии (или какой-то конкретной IDE) CMake.
>сложно ли перенести такую программу на MSVC?
Зависит от размера. А ещё от того, есть ли в программе системные вызовы POSIX/WinApi или какие-то особенности операционной системы или железа (допустим в Linux есть из коробки shared memory и через неё можно передавать данные между процессами, а в Windows - нет и надо городить свой огород).
>почему все не пересели на clang
Есть очень большое наследие, написанное без clang и никаких денег не хватит, чтобы его портировать. Ещё есть всякий эмбед и ебля с кросскомпиляцией под непопулярные железки, где не всё так однозначно.
Продолжай вести наблюдение.
> Почему некоторые программы не собираются разными компиляторами?
У каждого компилятора есть расширения и разные статусы поддержки всяких С++20. Но, оверолл - хорошо написанный код соберется и Студией, и шлангом, и гцц.
> Как этого избежать?
Писать без компиляторных расширений, и, опционально, не пользоваться фичами С++20 которые есть не везде
> И сложно ли перенести такую программу на MSVC?
По идее нет. Тут еще вопрос в билд системе. Если это симейк - то просто хачишь куски которые непортабельные и все. Если это какие-нибудь стариковские мейкфайлы - то надо поссать на лицо их автору.
> Кстати, почему все не пересели на clang
А зачем? Работает - не трогай. Да и кланг развивается все медленнее и медленнее, учитывая конфликт в комитете по слому ABI, после которого гугл как-то подостыл к С++
>после которого гугл как-то подостыл к С++
Уже 10 лет прошло, они ещё не успели перекомпилировать все бмблиотеки?
они то успели, все остальные проголосовали за ШТАБИЛЬНОСТЬ
В чем проблема, взял portfile и поменял как тебе нужно. Только вряд ли тебе нужно что-то кроме умолчаний и фич.
А то смотрю вакансии на С++: одно говно, либо НИИ, либо днищеконторы с формочками на Qt/MFC/WinAPI.
> как вкатиться
Учеба + практика
> в вакансиях одно говно
Есть такое, но и если поискать хорошо, то найдешь нормальное
графика это скорее всего геймдев
>Учеба + практика
Где учиться и где практиковаться? Учился в бакалавриате "информатика и вычислительная техника", толком ничему не учили, так для общего развития можно сказать 4 года просидел там.
И практику где брать?
Я вот смотрю вакансии на ХХ - по компиляторам если еще что-то есть и по графике тоже, то вот с базами данных нет ничего толком. Ну и хуйлоад на С++ видимо у нас только в яндексе есть.
> Где учиться
Дома за компьютером можешь
> где брать практику
Берешь свои знания и пытаешься из реализовать
я не знаю что ты хочешь услышать, тебе конкретно какой то литры покидать или что?
> По базам данных нет ничего толком
Ну так сфера достаточно небольшая, откуда там взяться большому количеству вакансий?
ну и у тебя какие то странные желания и графика, и бд, и хайлоад, не думаешь что то одно выбрать?
>тебе конкретно какой то литры покидать
Ну вообще да. Хочу сначала просто попробовать-потыкать различные отрасли, может потом найду что-то самое интересное.
Хуёво всё это закончится, братюнь. Ну разве что в гейдеве есть устойчивый спрос и сносная пайка. В остальном в год по этим направлениям постится 5-6 нормальных вакух и половина не в твоём городе без права на удалёнку.
Так вот. Я чет не вижу в стандартной библиотеке сокетов. Понимаю, что платформозависимо, но блин. Неужели придется извращаться с макросами или брать библиотеки сторонние?
в начале лета вроде было 1к
сегодня 2к что ли уже?
когда легитимные перекат уже
начального уровня вообще никто не ищет
это ты должен умолять чтобы тебя взяли
вот в яндекс чтобы попасть нада 5 лет в вузике отпахать, ездить на олимпиадки, а до этого в обычной специальной с мат уклоном школке отучиться, погрызть математику с физикой, ну еще не забывай что ты должен быть юрким челиком и понять что не достаточно просто учиться в вузике на 4-5 (иначе в 30 окажешься в петле как невостребованное говно), а на курсе 2-3 уже начать суетиться и мутить разные темы с преподами, ну или на специализированные курсы от того же яндекса ходить
и тогда тарам пам пам может быть ты попадешь в яндекс роботать программистом
и да, пожалуйста не пишите как вы в конце нулевых с пары собесов прошли в хуяндекс и свалили оттуда через 3 года на большие бабки
щас другие времена и другая конкуренция
вот
вариантов кроссплатформенных оберток беркли сокетов полно, более того сокеты сами по себе и являються межоперационным обобщением
вот
будем честны и скажем что российский геймдев большую часть прибылей генерирует с мобильного рынка и то по той причине что ниша была незанята
но скоро кризис начнет давить всех и на этот рынок выйдут динозавры
и тогда к примеру тем же жидам из плейрикса придет пиздец
ну как пиздец, бизнес у них задавят или отожмут
сами то они уже срубили бабла и себе и внукам
>щас другие времена и другая конкуренция
Не, ну ща получше чем пару лет назад. Молодняка поменьше и часть народу укатилась в питоны/вёбы/мобилки там всякие.
В qt простенький веб чатик есть в экзамплах/туториалах, не подойдёт? Консольный сервак, веб страничка клиент.
>>216388
>>216384
>>216366
Спасибо за ответы, няши.
Видимо таки придется на макросах делать.
Я же как-бы на данном этапе хотел руки размять и попробовать словить вьетнамские флешбкеи. А то в средах со сборщиком мусора и прочими асинхронностями из коробки - как-то слишком скучно. Уже пропало чувство того что я идиот, а именно это чувство в свое время мотивировало изучать больше.
По указателю обычно передают не примитивные типы, а структуры, которые не хотелось бы каждый раз копировать.
Хуя ты пиздабол, одногруппник устроился на 40 тысяч c# вообще зная только основы
Какая разница
Та хуй знает. Меня на первую работу взяли с уровнем: знает синтаксис, может отличить передачу по ссылке и по значению, знает стандартную либу, умеет по памяти сортировку пузырьком сделать.
> huawei
Работаю там. В целом в московском хуавее всегда хуй клали на кодинг. Потому что китайцы и сами могут наговнокодить (на самом деле нет). Только недавно открылось несколько лабораторий, которые занимаются софтом. Та лаба, которая рядом с моим отделом, занимается довольно низкоуровневыми вещами. Про другие не могу сказать.
По поводу "на самом деле нет", написанному выше, есть кулстори. Хуавей пару лет назад со всех концов света собирал людей на длительную работу у них в китайском офисе с целью аврального допиливания их Harmony OS. Брали всех, кто был согласен ехать и был способен кодить. Вот так оказалось, что в Китае с их бешенной конкуренцией за рабочие места не хватает кодеров.
нихуя
ни кого попали
нужен был engrish, дипломчик по специальности, опыт роботы по специальности
Вот, я не только знаю язык на начальном уровне, так ещё и кучу остальной херни полезной. Написал это всё в резюме и скинул троим, жду ответа
и чЁ? в каком седом году это было
не надо рассматривать тогда и сейчас
сейчас для вкатунов жОпа
>сейчас для вкатунов жОпа
В С++ может быть и да, так как вкатуны в кресты не особо нужны, ну кроме говноформочек на Qt.
>>216383
>вот в яндекс чтобы попасть
Нужно научиться прорешать 150-200 задачек на литкоде, преимущественно уровня медиум, вот тогда на стажировку в яндекс попасть просто. Знаю несколько людей, которые после обычных мухорсранских школ, с неоконченными говновузами и после армии, не обладая высоким интеллектом, вкатывались на стажки в яндекс, просто нарешав задачи на литкоде и найдя того, кто их сможет пореферить. Вот и все. Может, конечно, в поиск и беспилотники нужны толковые люди, но сейчас яндекс становится похожим на сбер, в который вообще чуть ли не всех подряд берут.
Если я тебя правильно понял.
Английский нужен. Высшее нужно. Опыт нужен, но можно например в мою группу без опыта через интернатуру попасть (если ответишь на вопросы на собесе). Но и я не кодер ни разу. Просто решил освежить свои плюсы. Вот пока с вами тусую.
>>216619
> Хуйвей сейчас на конпеляторы и тулчейны к ним набирает. Нв rust говно ещё. Другое дело, что это узкая специализация нахуй никому не нужная.
Конпеляторы сейчас котируются как минимум в хуйвее, самсунге, нвидии и интеле. И это только в Москве. Но специальность по конпеляторам с хорошей дискреткой ещё нужно заработать.
Ну ты чего. Сертификат понадобится, если ты будешь релоцироваться и то далеко не всегда.
Просто на собесе попросят какой-нибудь технический вопрос по-английски ответить. Китайцы тоже, знаешь, такие себе инглиш-спикеры.
>>216634
Из приличных, может быть, и как максимум. Но есть еще подсосавшиеся к госзаказу кб-шки, клепающие нейропроцы. Или лабы в институтах, загимающиеся подобными вещами.
Редкая специализация это всегда палка о двух концах. С одной стороны можно ломить цену за свои навыки и жить припеваючи. Но с другой, что делать, когда все четыре вышеперечисленных конторы перепробовал и тебе не понравилось.
>все четыре
Есть только в маськве. В питере есть только хуйвей, а в нижнем только интэл. Раньше на удалёнку они никого не брали, а сейчас готова только одна из.
> в нижнем только интэл
Хуйвей там тоже есть чуть-чуть. Но с другой стороны, чего ловить человеку с хорошим редким образованием в мухосранске?
>в мухосранске?
Российское подразделение интел появилось в мухосранске, потом переползло в мухосранск-милионник, а потом в маськву. И оно за собой перетаскивало людей с "редким образованием", которое можно получить почти во всех мухосрансках-миллионниках.
Но ты же сам понимаешь, что это исключение. Или ты лишь бы возразить все это пишешь?
>которые после обычных мухорсранских школ, с неоконченными говновузами и после армии, не обладая высоким интеллектом, вкатывались на стажки в яндекс
в каком году але? в швятые нулевые? дО крыма?
в 21 году это уже не прокатит
>Huawei uses Rust to develop a real-time OS for IoT devices, and in the StratoVirt project, a high-performance virtualization platform
хе хе
земля им пухом
те они сначала должны будут поднять те сделать всю инфраструктуру (одного компелятора недостаточно, хотя и сделать компелятор такой дрисни как раст еще хуже делать чем компеляторы швятых крестов) вокруг этого сырого говна под названием раст, а только потом уже начать пердолить свои иот операционки и виртуализаци
хехе
вот это мянямирки
ну хотя для программистов то приятненько такое писать
ну там компеляторы, инфраструктура к ним, всякие иде и отладчики, ну там всякие рантайм ос, и всякая виртуализация
одни из самых приятных занятий для программистов
и денежку платят
Исключение из чего? Конторы открывают свои представительства там, где есть мозги (нормальные вузы или нии), а не там, где кремль краше. А потом да, менеджмент перевозит головной офис туда, где удобнее вести бизнес (и жить краше). Но работяги остаются в своих Новосибирсках.
только сначала по бырому запилим компелятор ну и чутка тулзов к нему! это просто!
даже интересно есть ли вообще в природе хоть одна успешная коммерческая операционка написанная НЕ на си, хе хе, разве что мертвый сумбайн
Ты не совсем правильно представляешь, как все в хуавее устроено. Там на рисеч тратятся просто мегатонны юаней. Написать операционку на любом говне это для них рисеч-челлендж. Помимо этого отдела еще в мире в других исследовательских центрах будут отделы-компетиторы с такой же разработкой. И в самом Китае еще несколько отделов будет этим заниматься.
>>216660
То-то я вижу в каждом мухосранске технокластеры с представителями международных компаний.
https://pastebin.com/3VF7My9N
Ну так huawei и samsung прежде всего смотрели на Россию, как на рынок сбыта своей продукции. Если все крупные конторы сидят в москве - надо идти туда. Сначала открылись департаменты по работе с корпоративными клиентами, маркетингу и продажам. Потом по фану добавили "департамент разработки".
В плане организации тоже очевидно - если в москве сидят все, кроме газпрома, то и инфраструктура (кластеры-хуястеры) соответствующая. В регионах местный бизнес максимум на что способен - построить торговый центр с фонтаном. А муниципалитет - такое же говно без задач как и Сколково.
Соответственно разрабы собираются по 10-15 человек и скромно педалят код для иностранцев под вывеской "ООО ЗалупкиЛабз". Если "ООО ЗалупкиЛабз" пишет IPP, MPI или OpenCV, то он потом превращается в Intel Russia и ползёт в Москву к остальным.
Удали компилятор, ide, блокнот или всё что угодно связанное с программированием на твоём компьютере пожалуйста
Особо не вчитывался, но похоже на (странный) алгоритм Левенштейна. Почитай про алгоритм диффа и как он синхронизируется на новых строчках. Алсо, ты не инициализируешь данные в матрице и можешь читать мусор оттуда. Используй valgrind/санитайзеры для проверки кода.
Почему?
>>216784
>похоже на (странный) алгоритм Левенштейна
Я просто думал, как компактно хранить изменения, чтоб не класть полные копии файлов на каждый коммит, и вспомнил, что существует некий эффективный longest common subsequence. Загуглил, увидел фразу dynamic programming и какую-то таблицу NxM, дальше додумал сам.
>>216859
>>216695
Кстати хорошая идея, проводить code review itt. Может, попробуем развить тему? Все же любят обосрать других.
Я например вижу примерно следующее:
1. Хранить 16-битные размерности массива особо не имеет смысла (так же как и передавать их параметром)
2. Нижние подчеркивания в начале заменить на подчеркивания в конце.
3. Разберись, в чем ты хранишь размеры массива: в знаковых или беззнаковых переменных. В зависимости от этого добавь проверки допустимых границ значений.
4. main должен состоять из 3-4 строчек. Все методы должны быть внутри классов.
Но для laba1 код сойдет, конечно.
>в каком году але
2021 год, период с июня по октябрь. Как раз таки 2-3 года назад в Яндекс попасть было попасть тяжелее, у мидлов бывало по 6-7 алго интервью просто чтобы попасть на 150к. После этого к ним народ с опытом стал менее охотно идти, вот они и начали брать себе стажеров и джунов в бОльших количествах.
Ну и сам яндекс разросся и стал похож на обычную галеру. Всякая элитарность осталась только в поиске, такси и беспилотниках.
>хуйвее, самсунге, нвидии и интеле
В нвидии у нас открытых компиляторных вакансий не видел ни разу, но может анон оттуда прояснит ситуацию.
А так еще есть очевидный jetbrains с его компилятором котлина и вообще статистическими анализаторами для IDE, ЦИТМ Экспонента и конечно же МЦСТ.
Вроде бы все. Ну как бы штук 10-15 компиляторных вакансий на всю страну наверняка наскребется.
Кстати интел в москве есть, но основное место концентрации разработчиков именно в нижнем. На стажировки нанимают в первую очередь в нижний.
>>216644
>что делать, когда все четыре вышеперечисленных конторы перепробовал и тебе не понравилось
Перекатиться в другую отрасль. Ну если ты действительно стал крутым спецом в компиляторах, то наверняка не составит труда релоцироваться куда-нибудь в US/UK/Китай, там компиляторной работы наверняка гораздо больше.
Нвидия в Москве вообще как закрытый клуб. Мониторю их вакансии. Там их совсем немного всегда висит. Даже как-то сам резюме засылал их hr'у (далеко не на джунскую позицию). Вообще ничего не ответили, собаки.
>>216996
> Кстати интел в москве есть, но основное место концентрации разработчиков именно в нижнем.
Сейчас они вводят полную удаленку и нанимают со всей страны. Вот сейчас к ним в несколько отделов собеседуюсь.
> Перекатиться в другую отрасль.
Верно, конечно.
Да, слышал инсайды, что они там настолько в своем познании преисполнились, что хуярят с нуля вообще весь тулчейн включая собственную ide.
Как и эппл. У них же, насколько я знаю, куча секретных тулзов внутри компании для разработки, и сами не сидят на ссаном xcode.
Они ебанулись давать с++ в 10 классе?
А так, тебе хотя бы в каком стиле надо писать? ООП или функции?
Ну тебе нужно написать функцию
[code]
int fibonachiResolve(int N)
{
//Тут будет лежать решение твоей задачи
return solve
}
[/code]
Для самого решения тебе понадобится ещё 3 переменных и цикл while в котором ты будешь вычислять следующее число, зная 2 предыдущих, добавлять его к сумме и обновлять последнее и предпоследние число.
[code]
int fibonachiCount = 1; //Тут мы храним сумму цифр фибоначи
int fibonachiFirst = 0; //Тут у нас будет последние полученное число фибоначи
int fibonachiSecond = 1; //Тут у нас будет предпоследние полученное число фибоначи
...
while(lastFibonachi < N)
{
...
}
[/code]
Аригато, анон
короче я по образованию робототехник и у меня опыт работы только в робототехнике: всякие SLAM немного cv. Короче алгоритмы
Вот, и недавно в силу бэкграунда и прочего ощутил комплекс неполноценности нехватку базовых знаний комплюктер саенс: как работает сеть (ну основы понимаю), криптография, да даже те же плюсы у нас используются не то что бы по полной - не юзаются прелести мув семантики и тд. Короче чисто как быдлан пишу
Посоветуйте плиз, каким бы проектиком можно заняться дома для себя. А то из-за низкой осведомленности могу придумать задачу, например, по зрению, но вот чтобы все это охватывало те знания о которых я написал, то вообще идей нет. Да и хочется отдохнуть от всей это роботохуйни и написать СВОЙ МЕССЕНДЖЕР. Короче хочу чуть вширь прокачаться, помоги плез советом
дура блядь
пока есть время ебашь математику с физикой чтобы баллов на еге набрать и не обосраться дальше с вузиком и жизнью
Купи малинку/пердуинку и подключи к ней камеру или привод какой-нибудь и запили управление пердуинкой со своего компа или мобилки. Сразу выйдешь за пределы своего уютненького.
буэшь через 5ть лет в красной безрукавке тогда раскладывать товар по полочкам в магните
а пока сьеби из треда
в шапке написано: лабы идут нахуй
Человек же сказал, что его подзаебали cv и робототехника. Что посоветовать не знаю.
Я купил себе стереопару realsense d435i с инерциальным модулем и сначала решил написать свой слам, но потом передумал и пишу фильтр Калмана с автокалибровкой ковариационных матриц. При этом основной проблемой все равно является непонимание того, как надо правильно, а не чтобы просто работало.
Ну так в чём проблема то? Мобилки не робототехника, управление железкой - сети, фронтенд, бекенд и ещё вёб сервак допустим сверху. Всё это не про зрение и не про роботов. На жалезку можно накатить какой-то базовый софт коих овердохуя из коробки есть. Для него это будет самый быстрый старт от того, что он и так умеет.
>непонимание того, как надо правильно, а не чтобы просто работало
Потому что у самурая нет цели, только путь.
Это я наскоро набросал мейновую программулину, чтоб глянуть, какой получится дифф. Разумеется, архитектура моей системы контроля версий будет безупречной, и после релиза tit 1.0 весь исходный код мигрирует из git репозитория в tit репозиторий. С этого момента ни одному нормальному кодеру профессиональная честь не позволит контрибьютить сюда https://github.com/git/git, ведь, в отличие от tit, там ни один коммит не проходил предварительное код-ревью двача. Таким образом, разработка всех серьезных программных продуктов рано или поздно перейдет на tit.
https://ru.wikipedia.org/Венгерская_нотация
начал изучать вин апи, наткнулся на это.
до этого использовал с++ только для лаб, для своих проектов и работы использовал более высокоуровневые япы, потому практически любой нейминг в коде на поюсах кажется мне чрезмерно оптимизированным и максимально неочевидным
Ну тут нарушается абстракция данных и, если тип объекта меняется в будущем (допустим при переносе на новую платформу), то придётся больше кода педалить и больше ошибок ловить после этого.
А вообще, когда ты приходишь на проект, то пишешь так, как заведено на проекте. Поэтому просто забей.
А, вот почему winapi выглядит как такое говно, не знал. Полная хуйня эти нотации
>Ну тут нарушается абстракция данных и, если тип объекта меняется в будущем
Венгерская нотация это не обязательно про типы.
Мы вам перезвоним.
С DirectShow не получилось. Другие варианты есть?
Из 2007 перезвоните?
Почему так я должен проебывать время, нахуй? Чтоб обойтись стандартный istream_iterator, надо делать свой locale, в котором ничего кроме \n не является whitespace, или я не так понял?
По идее можешь посмотреть, как ffplay устроен. Там как раз SDL и есть полноэкранный режим.
Наткнулся на эту статью. Это кликбейт? В C++ будут удалены указатели? Нахуя? Кому не надо их не используют, но если вдруг захотелось побайтойобить, то в чем проблема?
Я думаю, что дата 1 апреля говорит сама за себя и отвечает на твой вопрос.
А, понял. Надо было мне повнимательнее читать. Ну, я думаю, компилятор сможет оптимизировать нормально, если ты просто условие поменяешь, типа
return std::ranges::size(matched) == 1 ? opt : nullopt;
В любом случае, такой вариант гораздо оптимальнее твоего, потому что новый список не создаёт.
А если ещё маленько подумать, то скорее всего не оптимизируется так, что идти будет до второго матча. Это можно провернуть, если руками напишешь что-то вроде std::views::filter, но скорее всего это перебор. Оставь так, чтобы читалось нормально, потом при необходимости наговнякаешь чего-нибудь.
Ну вот в этом и писечка, чтобы на уровне компилятора было разумное решение, и в стандарте.
О, я, кажется, придумал. Хорошо будет, если от matches откусить std::views::take(1), и потом проверить хвост на пустоту.
Да щас набросаю, падажжи.
Чаепитие с кошкодевочками -- это просто прекрасно.
Единственное, не знаю, откуда компилятор пойдёт считать !xs.empty(), с самого начала списка или ему чудом удастся переиспользовать x.empty(). Но, если это важно, я думаю, можно изъебнуться. Но мне уже лень.
В общем, вдруг тут есть те кто разрабатывали скада-системы.
Поясните, вот на работе коллега старший говорит что для поддержания соединения с устройством - нужно на каждое устройство поток выделять.
Я - не занимался скадами, но не понимаю зачем. Разве нельзя это обычной асинхронщиной делать? Ну, типа устройства же не без остановки будут слать нам сообщения, будет какая-то IO-задержка связанная с сетью, так на кой хуй нам целый поток выделять, чтоб тот ждал пока к нему кто-то обратиться, если можно его переиспользовать для других задач.
Или я что-то не понимаю и я просто тупой?
Ну в целом да, на каждый клиент/устройство заводить поток не стоит. Достаточно одного (или пула из нескольких), который будет слушать порты и через future/promise/async выдавать результат в основной поток.
Хочу в це++ вкатиться, чё надо для этого? Книги какие-нибудь, желательно курсы?
В шапку залез, книжки. В другом треде рекомендовали Стивена Прата. Достойный ли?
Хочу много зарабатывать чтобы ездить на машине и есть свои любимые макароны каждый день.
Удачи, анон. Я в тебя верю.
мимо устроился C++ разработчиком 5 месяцев назад и уже приобрел желтенький Москвич, а отказывать себе в любимой еде из-за денег и подавно не приходится
> макароны каждый день
макароны "каждый день" - невкусная хуйня, но если ты их так любишь, то достаточно устроиться грузаном в пятерочку и тебе будет хватать зп как раз на то чтобы употреблять их каждый день
зачем тебе изучать такой эзотерический вымирающий язык программирования как с++ вообще не понятно тогда
вот если бы ты был наследником двух, а еще лучше трех квартир, то тогда было бы другое дело, в одной квартире ты бы чилил, а вторую сдавал, свободное же время как раз и можно было бы посвятить изучению тонкостей метапрограммированя на шаблонах для кодогенерации в рантайме либо экспериментам над обобщенными функциями применяемыми к универсальным контейнерам
Чтобы избежать дорогостоящего копирования передают const&. Это самое очевидное.
Я видел sljit в pcre. Как развидеть?
короче пилю курсач в унике: нужно из сырых картинок заебашить видос (кодировка h2640, в каждом кадре которого помимо самих картинок будут еще и данные (если говорить конкретнее - время кодирования). Сначала думал сделать это сырым ffmpeg-ом, но он такое не может. Сел за плюсовую libav - там, вроде, есть такая хуйня как AVPacket и вот в нем есть side_data. Казалось бы, проблема решена, но нихуя ничего в файл с видосом не записывается. Вопрос: был ли у кого-нибдуь подобный опыт или кто-нибудь хотя бы знает куда копать? А то почему-то в гугле с этим все архихуево - пару неотвеченных вопросов на стэк оверфлоу и 0 туториалов. Такое ощуещение, что я единственный в мире, кто решил в видос записать еще и данные к кадру
В общем, бомбит уже, спасибо
мне нужно точно знать, когда кадр был закодирован.
Этот модуль будет частью еба боба системы видеоанализа ебал на росе, которую прошлые студенты написали. А рос, как я понял, так устроен, что он кидает по сокетам сообщения, в которых есть timestamp.
В данной реализации там кидается стандартное росовское сообщение: сырая картинка + стэмп. Прикол в том, что записывать сырые картинки дико разъебывает по размеру лог - у нас он вести порядка 100гб, хотя видоса секунд 20, что пиздецки
Ну и появилась идея все это кодировать в видос, чтобы весил меньше. Все идет окейно, но как записать timestamp в видос - мне не очень понятно.
точнее можно сделать отдельный стрим, там, либо записывать в отдельный файл. Но я не хочу ебаться с синхронизацией стримов, потому что вот, мне приходит сообщение, я его кодирую и хочу вот прям тут взять и записать время к кадру и заебашить его в файл.
Идейно вот зачем
Хочу вкатиться в android NDK. Насколько похож на win32? Быстро разберусь, имея опыт в win32? Нужно ли джаву знать или можно чисто на С++ писать?
>Насколько похож на win32? Быстро разберусь, имея опыт в win32?
Перечел и понял, что хуйню сморозил. Хочу приложуху портировать на ведроид вот и все дело. Последний вопрос не отменяю.
поток субтитров - это отдельный поток. Есть функционал добавления именно к пакету - add_side_data . Но он нихуя не работает. Не пойму почему. Может эта side data вообще для чего-то другого?
да впринципе не особо важно, только не сильно связанное с веб. Как опыт будет определюсь точнее
В любой книге про C++.
Иди в Java. Там денег больше платят - беспроигрышная мотивация. А с твоим "не знаю чего хочу" закатишься в НИИ или эмбед и там утонешь.
Тут важно понимать, что каждое из полей применения плюсов нуждается в своих знаниях. Не получится, как в питоне, знать scipy, pytorch/flask, django , чтобы покрыть 99 процентов ваканский
Я в плюсах около года и, насколько успел понять, остались они только в эмбедед, HFT, всякие деплои нейросеток (как правило, деплои сеток CV) и в некоторых проектах на них пишут критичные к скорости ядра. А ну и еще Яндекс на плюсах разрабатывает ВСЕ
Наверное, знания того, как работать с сетью + многопоточность и углубленное знание плюсов покроет процентов 60 вакансий, но есть вероятность, что другие 40 требуют совершенно иных знаний: opencv, pointcloud и тд
Бля пишу пьяный и сумбурно, сорян
Короче учи сети и углубляйся в плюсы, пока не понимаешь чего хочешь
Говоришь, что просил проект а не сферу знаний куда углубляться? Так вот проект не ебу
Торрент свой напиши, хуй его
Это конченный язык чтоб он сдох блять. Мне хватило его после майнкрафта.
После пары лет вката выкачусь и буду делать системы, эмуляторы ещё что посложнее, профит
rlyyea
Последний раз, когда это тыкал, команды для этого не было. Надо было ручками зайти в каталог vcpkg с этим пакетом, и там где-то сохранялся этот лог.
Ты тред то читал? На "системы, эмуляторы" и прочее обычно есть 2.5 вакансии по каждому направлению. Хорошее знание с++ там только 50% от условий для вката.
Если ты от жавы сгорел, то в плюсах тебе пизда
Ненависть к языку и средствам разработки тут это твое стандартное состояние
>Они ебанулись давать с++ в 10 классе?
Двачую, полная деградация. Надо в плюсы вкатываться в 5м
Если есть можете пожалуйста подсказать.
Ну серьёзно. Я сейчас лекции для баколовриата от мужика из мфти слушаю. Там куча мест где можно прострелить себе колено.
И где ебучий перекат?
>Я в плюсах около года и, насколько успел понять, остались они только в эмбедед, HFT, всякие деплои нейросеток (как правило, деплои сеток CV) и в некоторых проектах на них пишут критичные к скорости ядра. А ну и еще Яндекс на плюсах разрабатывает ВСЕ
А игры? На чем игры-то делают? Я думал, учить плюсы с прицелом на игры, это самое оно.
Из конструкторов и блюпринтов ляпают, на unity + c#, на java под мобилки, на python пишут логику и только движки и критичные по производительности куски пилится на c++.
А как же Unreal Engine
Следует ли из этого, что на плюсах с вакансиями дела обстоят так себе, особенно для новичков?
А по каким критериям тогда отбор вести? Кто первый прислал резюме, того и нанимаем?
Кресты ничего не знают про принтеры, про них знает система. На Винде например типа этого https://stackoverflow.com/questions/33998227/print-a-pdf-file-with-mfc
спасибо за ответ
>Нвидия в Москве вообще как закрытый клуб. Мониторю их вакансии. Там их совсем немного всегда висит. Даже как-то сам резюме засылал их hr'у (далеко не на джунскую позицию). Вообще ничего не ответили, собаки.
Такого быть не может, у нас адовый пиздец с народом, и эйчары работают
Вакансии надо на воркдее смотреть, и подаваться тоже на воркдее хотя на HH закинулся в свое время
https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/
Когда ты не очень умный
Я так понимаю дело в том, что вектор потом должен будет вызвать деструктор, но мне так делать не придется. Можно ли вектору запретить вызывать деструкторы?
.reserve()
Это очень плохая идея. Потому как деструктор необходим для чистки твоей памяти которую зарезервировал конструктор. Более того, если хочешь наследоваться от абстрактного класса деструктор должен быть виртуальным. А иначе перед удалением указателя родителя, тебе нужно будет проверять и приводить каждый указатель к соответствующему классу.
Господа мы скоро получим срыв стека и UB. Думаю срочно нужно перекатываться.
>Где ещё поискать работу для джюниора кроме hh в Москве?
Напрямую подаваться в Яндекс, Хуавей, Самсунг, Интел, МЦСТ и прочие относительно крупные конторы, где нужен С++.
Если никто не ответит, ну или никто не возьмет джуном, то поздравляю, рыночек С++ для тебя будет закрыть, тогда смело начинай учить js/python/php
В Яндексе дохера вакансий, там же должны разные ХР сидеть, то есть есть смысл в несколько подавать?
Ещё есть стажёр с какими то непонятными пунктами, типа что вы изучали в институте, какие самые интересные ваши проекты, впринципе это и можно придумать, но там ещё и покажите портфолио, а с этим трудно
Ты не можешь, можно только сделать указатель того же типа, что и базовый класс, ему присваивать адреса наследников.
Обязательно на наследника?
Если нет, то просто делаешь указатель на сам базовый класс
а вобще так делать лучше не стоит
Он вообще лютые ошибки пишет.
Ну тогда ты делаешь что то убер костыльное, соответственно и пользуйся анологичными вещами
Войд звёздочка ну или стд эни звёздочка
Может попробовать перед родительским классом написать
class b;
Но подумай тебе точно это надо?
int main(int argc, char argv[]) {
if (argc > 1) {
std::istringstream iss(argv[1]);
int a = 0, b = 0;
iss >> a >> b;
std::cout << a + b;
}
return 0;
}
int main(int argc, char argv[]) {
std::cout << std::stoi(argv[1]) + std::stoi(argv[2]);
return 0;
}
А забейте, всё работает
>>224720
Ошибся. Тебе же наоборот нужно?
Есть и в другую сторону
https://en.cppreference.com/w/cpp/utility/from_chars
В швятой штудии 22 поигрался немножко. Ну, работает, все охуенно.
Жду, пока решарпер под них допилят (Обещают в середине 22) и на работу все проекты перевезу на 22 студию, и будем новый код писать с модулями (и мб старый тоже, если будут большие бусты по времени компиляции).
Я так и не понял че там с 2022 студией? Она вышла? А то я инсталлер открыл, ниче нет. Или мне другой надо скачивать?
А имеет смысл вообще или нет? Есть там че то прикольное? А модули разве в 19 не завезут?
Модули в 19 - компилируются только из КОНСОЛЬКИ ручками с кучей багов. А тут полноценная поддержка в IDE в том числе.
Понял. Спасибо
Предположим, есть яблоки, все нумерованы. Я яблоки всячески сортирую, что-то выкидываю, распихиваю в разные ведра, в шестом ведре яблоки помыл. А потом приходит Вася, ищет и откусывает яблоко четыре.
Как это всё лучше хранить? Инб4 копипастой. Я использовал карту в глобальном хранилище, а корзины уже хранили std::const_reference<Apple>, средне удобно, да ещё бесит пиздец в лямбдах из карты .second аргумент всегда брать, плохо зделоли.
Сейчас использую std::list и его замечательное свойство splice, которым удобнейше сортировать и разбрасывать яблоки по корзинам. Зато поиск так себе, чтобы взять яблоко 6, придется все корзины перерыть.
Может быть стоит использовать shared_ptr? У меня с ним опыта мало, плохо чувствую его работу.
Что ещё за модули?
Шизоид?
double bild_matr(doubleA, int n)
{
int i, j, k, l;
double B;
B=new double[n];
for(i=0;i<n;i++)
B=new double[n];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
B[j]=A[j];
for(k=0; k<=i; k++)
for(l=j-i+k;l<=j+i-k;l++)
B[j]=A[k][l];
}
return B;
}
>В Яндексе дохера вакансий, там же должны разные ХР сидеть, то есть есть смысл в несколько подавать?
В яшке вакансий не так уж и много для джунов-стажеров, попробуй податься к ним на стажку, а дальше у тебя будет несколько алгоинтервью, после чего интервью с командами, может и возьмут куда.
где рабочие аналоги пипа и градла?
чисел). Описать функцию, которая меняет местами два
элемента, положение которых задается координатами во
втором классе, как дружественную. Предусмотреть проверку
соответствия координат и размерности матрицы. Вот тут мои наработки: https://pastebin.com/BiaczWFK
Смотри в сторону vcpkg
Инвестиции в фундаментальные разработки кто-то пробовал вести?
100 человекочасов Анеку доверите?
Это копия, сохраненная 22 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.