Это копия, сохраненная 22 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
• >>157673 (OP)
В градациях серого максимум можно выжать 256 оттенков. А в RGB?
Есть код, который надо компилить и собирать на разных операционных системах, допустим это дистрибутивы линукса.
В общем, я хочу чтоб у меня код лежал на основной машине, а компилировался в чём-то ещё.
Как это лучше всего достигнуть? Vagrant?
Тв хочешь запускать программу на разных системах или крутить ее в виртуалке (контейнере)?
std::vector<int> list[V];
Надо обойти все вершины и записать в вектор путь, при этом чтобы не ходить кругами и это не работало оче долго на 200-300 вершинах.
Да мне не принципиально. Мне нужно проверять собираемось и работу на разных системах.
DFS (поиск в глубину).
Схуяли я этого четырехглазого головастика второй тред подряд должен лицезреть? Хуевый перекат, переделывай
Ты че ты че сука!
Если еще устроят
Все рассказывай. Сколько длилось собеседование, какие вопросы задавали ( с примерами ), кто вел интервью, как он вел интервью итд.
HR дала тесты, все вопросы кроме последнего видимо для отсеивания совсем унтеров, в последнем надо было отрефакторить код и прокомментировать.
В целом код был не сложный. Хорошо, что я когда-то прочитал пару глав параллельного погромирования на С++, иначе я бы сразу слился на слове мьютекс
А вот ожидаемых мною move семантики и перфект форвардинга не было, даже ни одной rvalue ссылки. Да и вообще много чего не было, что я бы засунул, если бы делал тесты для джунов
>>599345
>Все рассказывай
Уважаемый сотрудник компании *, перелогиньтесь пожалуйста
Ну а на личном что? Кому интересны эти тесты от эйчарш, они для того чтобы совсем ебланов отсеять и нужны. Нормальный собес всегда лично проводят.
Рассказывал о проектах всяких, обсуждали последнюю задачу из теста, где я проебался, что не учел. Вынес следующее, пользоваться git'ом - значит не только уметь писать пуш и коммит (ну и мердж). В прикладных технологиях по факту я не разбираюсь, так как не имел целью до этого изучать что-то кроме чистых языков и алгоритмов с матаном. Считаю их тем, что можно наверстать за пару недель, но вот не наверстал. привет qt
Пойду учить техналогии крч, а так хотелось сикп дочитать
Типо того
Вы приняты. Проходите, присаживайтесь, угощайтесь.
std::find(arr.begin(), arr.end(), abc)
Почему нельзя просто без begin и end вот так бы: find(arr, abc), как в других языках? Ведь std::vector и другие контейнеры и так знают где их конец. Нет ли такого шаблона?
Потому что с итераторами в таком виде можно творить много разной интересной хуйни.
Для работы в том виде как ты хочешь в 20 стандарте добавили рейнджи, если не завезли в твой компилятор можешь пользовать ranges-v3 на которой стандарт и основан.
Так-то да. В нашем проекте перешли на цпп20 ещё в ноябре. И никого кроме статического анализатора даже насмерть не уебало.
Если ты имеешь в виду карту высот в качестве текстуры в игре, по которой генерируется геометрия/ландшафт. То в основном используют однуканальную 16-битовую текстуру. То есть она черно-белая с 65536 отенками, потому что 216
Аноны, а правда, что после 45 я не смогу в программирование как мог в 20-30? Якобы мой мозг начнёт тупеть и т. д. и тп
А как же куча дедов из cs, хотя бы тот, что в оп посте?
https://ideone.com/0QuA5N
Если всю жизнь много думать и напрягать мозг, поддерживая его в тонусе, как те деды, то вероятность развития деменции намного меньше. А смирившись с рутиной и не развиваясь, и в 30 стать маразматиком недалеко.
Ренжи же валяются на гитхабе чертову кучу лет, и даже отдельный вариант для мсвц.
std::string_view
отвечать на кучу вопросов в треде и просвящать народ в метапрограммировании?
Как мне её в линупсе запустить?
>>1598426 →
Уже 20 год, календарь проверь.
Сделай функцию обертку. В чем проблема?
Сын свиньи!
vim это детектор того, что ты профнепригодный дебил для командной разработки
>>599776
В общем-то удалось кастрировать std:: tuple_cat
[code]
template <class Tuple, class...>
struct tuple_concat_helper
{
using type = Tuple
};
template <class... T1, class... T2, class ... Rest>
struct tuple_concat_helper<std::tuple<T1...>, std::tuple<T2...>, Rest...> :
tuple_concat_helper<std::tuple<T1..., T2...>, Rest...>
{};
template <class... Tuples>
using tuple_concat_t = typename tuple_concat_helper<Tuples...>::type;
[/code]
Сеньор-помидор из нвидии, сидящий здесь. Полистай прошлые треды, найдёшь. Да и здесь скоро объявится, если не уже.
Мне нравится size_t, заебись, придумано сразу для дела, чтобы блядь не придумывать unsigned int, или может unsigned long long будет массивчик твой.
Короче сейчас я везде пишу typename T в любой функции/классе, а константы собственно пишу как T(2), или T(M_PI). Не нравится правда то, что шаблонная магия подгружает очень визуальную студию, и работает она хуево.
Алсо, видел конструкции типа auto res = foo.typename func<Type1>(); Нахуя такое страшное явное указание типа, есть от него польза?
>Анон, нахуя мне, в 2к20, делить понятия float и double?
Видюхи считают float в несколько раз медленнее. Музыкальной софт считает во флоат, потому что точности не нужны, экономия по памяти в два раза. Вообще #define double float это простой способ проверить алгоритм на численную устойчивость
>А где triple, где пониженная точность?
На современных видюхах есть float16. Triple нету, а вот класс четверной точности ты можешь найти или написать сам, вооружившись Кнутом
>Почему не изобретут уже какое-то общий тип и политику точности
Потому что это оверинжиниринг. Или, говоря более простым языком, синдром вахтера, когда любая месящая говно маня воображает из себя существо охуенной важности
>Короче сейчас я везде пишу typename T в любой функции/классе
И это оверинжиниринг. Покури травы, попустись, и пиши нормальный код
>Видюхи считают float в несколько раз медленнее.
Наоборот они float быстрее чем double считают.
Написал неправильно, спать пора уже
Представь себе что у тебя есть матрица 10000х10000 и тебе с ней нужно что-нибудь сделать. Ну там определитель посчитать.
Если использовать float, то это будет сильно быстрее и потребует вдвое меньше памяти. А точности может и хватить.
>>599880
>>599904
>>599941
>>599975
Я прекрасно знаю типы и ассемблер. Я говорю про то, что с++ не си, в нем много абстракций, не супер приветствуются касты разных типов (даже про это Страуструп глворил). А ворох целых типов напрямую отсылает нас к архитектуре проца. А дробные вообще пиздос конечно, какое-то распутье между точностью. Зачем мне это знать на высоком уровне, когда тебе похуй, на старом ГПУ будет просчет, или на цп?
Типы с разрядностью никуда не уйдут, они как минимум связывают нас с максимальной разрядностью числа (хотя это повлияет только в инверсии и сложении с переполнением, битовым операциям похуй на длину), а вот наличие short, long, double в современном языке мне не понятно вообще, это сишный архаизм.
>Зачем мне это знать на высоком уровне
Затем, что если писать код с учетом особенностей железа, то он будет выполняться быстрее. А ты со своим "высокоуровневым языком" отправишься круды сосать.
>>600044
А вы мимо си и асмы, деды. Чеж вы блядь тогда сами память не аллоцируете, если так хочется с байтами поебаться?
Короче, я ожидаю в крестах типы, близкие к алгебре, а не к архитектуре проца. Чтобы был например целый тип, дробный, булев, иррациональный там и проч., и оперировать на этом уровне. И у этих типов, при необходимости, задавать всякие политики по точности, разрядности и всякое такое.
Мне кажется, что язык именно туда и развивается, сейчас в современном коде все меньше встретишь явно указанных скалярных типов в пользу шаблонов и всяких авто.
Так ебашь в матлабе/вольфраме/итд
>Зачем мне это знать на высоком уровне, когда тебе похуй, на старом ГПУ будет просчет, или на цп?
Нет не похуй, байтоебство один из плюсов C++. Ты походу не тот язык выбрал.
> я ожидаю крестах типы, приближенные к алгебре
Тогда тебе нужны не кресты, а фортран. Или питонячий sagemath.
Плюсы предоставляют выбор - ебаться или нет, а ты на этот выбор жалуешься. Левак чтоли?
cpp.sh/6zlgm
Это функция расшифровки текста (RSA), при имеющихся данных, на выходе должно получаться 111111. Пишу по примеру на пике
ЧЯДНТ??
Unsigned int, а сколько там бит решает компилятор.
Меня все устраивает, но я ничего кроме ВС и не пробовал на самом деле. Только DevC++ лет эдак дохуя назад трогал, когда вообще только узнал про программирование.
long long вмещает ~20 десятичных цифр.
pow (4051753, 61)
= 11 647 177 754 002 222 607 592 206 347 827 694 020 583 955 739 413 592 628 453 274 536 545 962 544 437 086 473 675 703 004 405 621 170 904 519 721 648 296 205 067 379 162 333 154 029 165 878 621 624 636 465 230 741 055 278 330 205 268 522 465 475 225 031 948 679 262 727 651 894 346 645 090 382 814 771 613 262 404 834 259 091 710 231 996 015 580 572 990 920 081 302 429 892 218 002 991 056 042 524 888 839 188 599 134 324 190 673 145 411 791 017 147 744 840 122 837 675 865 704 173 639 758 437 311 534 559 191 821 910 270 748 802 681 353
А ты хочешь возвести не в 61, а в 6111579 ...
За что ты его так прикладываешь, лол?
>>600101
Там даже в тексте ниже написано, что основную проблему вызывает вычисление степени с модулем и потому дальше идёт ссылка на статью:
https://ru.wikipedia.org/wiki/Алгоритмы_быстрого_возведения_в_степень
Мог бы и перечитать на вторые сутки. И дальше ещё идёт ссылка на "Китайскую теорема об остатках".
Я же не прикладывал, а только подсказал, думал он сам догадается что следующий шаг - совместить возведение с остатком.
Тут вообще всё просто
int x = 4051753
int y = 6111579
int n = 9173503
int res = 111111;
cout << x << '^' << y << "mod(" << n << ") = " << res;
Я так тесты пишу.
VS Code против VS 2019, это как петушок против дракона. А вообще смотря что пишешь. Вот тут туториал есть, как настроить конфиг в VS Code для C++ https://code.visualstudio.com/docs/languages/cpp
Qt
Все так, да.
Добро пожаловать в волшебный мир поиска работы.
Надеюсь, что ты запомнил все вопросы, и выдрочил каждый из них так, чтобы отлетало от зубов.
На третью-четвертую попытку все получится.
Кем лучше работать, программистом или шлюхой на трассе?
Летом будет практика, нужно искать место.
Начал мониторить вакансии джунов, отсылать резюме, но меня везде динамят, иногда даже не отвечая.
Только одна компания выслала тестовое задание, от которого я ахуел.
Это было совсем не то, чего я ожидал,после рассказов про написание стека на собеседовании и т. д.
Кое как сделал, скинул.
Через два дня приходил ответ, что я не реализовал корректный ввод данных просто запутался в одном месте, думал, что данные даны сразу и их вводить не нужно и то, что у меня слабый исходный код.
Как вообще можно стать джуном студенту?
Где искать места, если почти все сразу шлют отказ даже без ТЗ или собеседования?
>>600536
Блин, не особо хочется такую инфу говорить,уж извините.
Тестовое задание - есть тарифы стоимостей, есть список действий, нужно минимизировать стоимость.
Решилне до конца, небольшие ошибки были, но это из-за того, что не разобрался с предметной областью задачи, а спрашивать у HR по эмейлу не хотелось с помощью динамического программирования, но получил бан за то, что не предусмотрел ввод тарифов с файла (а у тарифа (sic!) словесное описание блжад).
> Я прекрасно знаю типы и ассемблер
Ну так ты современные наборы инструкций видел вообще? Зачем тогда тупые вопросы задаешь? Дабл и флоат это разные типы использующие разные наборы инструкций и регистры, а ты их объединить собрался.
> Тестовое задание - есть тарифы стоимостей, есть список действий, нужно минимизировать стоимость.
Звучит не сложно.
> Блин, не особо хочется такую инфу говорить,уж извините.
Тебя ведь не взяли по какой-то надуманной причине, поделись хоть названием конторы, чтобы Минский анон я не тратил своё время в будущем
Ну я пока не особо расстраиваюсь, раз уж меня позвали на техсобес, то мое тестовое не слишком говном оказалось.
Тарифы могут быть вообще не похожими друг на друга
А-ля "100р за сигну" на уровне "300к/ннск за вдох", не понимаю, про какой ввод тарифов может идти речь
Его не взяли потому что он не понял задание и написал плохой код, что ты тут фантазируешь.
Такое в бложеке хорошо писать, а ирл это не работает и никогда не будет работать.
Задание было понятно, предметная область не до конца понял
Само решение работает
Хотя спорить не буду, видимо, не справился с написанием кода
У тебя все впереди.
Возможно контракты помогут.
Т.е. будешь писать что то вроде
myInt x; [[expects: x>= INT_MIN && x <= INT_MAX]]
Я тоже недавно искал место для практики, наткнулся на контору которая якобы набирает на стажировку. Отписал им, скинули тестовое, решил в тот же день, отправил, сказали что отправили на проверку и тупо неделя игнора. Потом я им повторно отписал мол, ну как там мое задание? Мне ответили, что чето ваш файл в письме не открывается))0. Закинул на файлообменник, отправил, сказали что через 3 дня ответят. В итоге через 2 недели написали, что не подхожу(без объяснений почему). Хотя я там все по красоте сделал, с auto, лямбдами, юзая только std.
Лол, какие тогда требования к джуну в 2020 году на C++?
Я не понимаю, даже брат с Польши, овердохуя успешный программист, сказал, что они ебанулись такое студентам давать
Как, кстати, закончились поиски?
>Как, кстати, закончились поиски?
Никак, в итоге пошел проходить практику куда вуз направил(веб макакой).
Бля, пиздец
У тебя ещё хоть вуз, видимо, не такой плохой как мой
Если сам не найду, то прямая дорога на завод
>>600506
Вот кстати то тестовое с моим решением если кому интересно https://ideone.com/dPlnQC. В ideone С++17 нет, поэтому не компилит
Анонасы выручайте, есть класс комплексное число. Как сделать гетер на весь класс? Т.е.
getComplex(float re, float im)
{
return ???
}
Да уж.
Смотрю на твой вывод массива, на сплит строки и на чтение файла построчно и охуеваю. Потому тебя и не взяли, лол.
>Вывод массива
Ну давай, расскажи как его надо было правильно выводить
>Чтение файла построчно
Это не олимпиадная задача и пара миллисекунд тут некритичны. Я предпочел простоту и краткость кода перед производительностью.
Выдает что можно использовать только в нестатической функции-члена.
Вообще в .h выглядит так getComplex(float &re, float &im);
взято из примера препода, по этому лучше так и делать
А как реализовать в .cpp?
Если можно загрузи на pastebin решение.
Мне достаточно было пробежаться глазами, чтобы понять, что это не жулик, а ты его просто на минималку разводишь.
Тип в примере препода не указан у этого метода, просто getComplex(float &re, float &im);
Вот это тоже не понял почему так, толи опечатка и там какой нить float должен стоять, либо еще что то. При том студия выдает ошибку, что без типа.
>getComplex(float &re, float &im);
>float &
У "&" в с++ какое-то другое значение? Что вообще обозначает конструкция "float &"?
мимо из с
Ещё её можно передать в функцию. Работает как указатель, но разыменовывать не нужно.
Пошел на хуй.
Ещё нельзя возвращать ссылку на объект, чей срок жизни ограничен функцией. Объекту пиздарики, а ссылка останется.
И ещё есть типа исключение, когда ссылка инициализируется временным объектом (результатом функции). Тогда срок жизни временного объекта продлевается до срока жизни ссылки.
Этот термин из других языков пришёл. Но ссылки в плюсах отличаются от ссылок в других языках тем, что после инициализации заставить ссылку указывать на другой объект нельзя. Как константный указатель.
> Ну давай, расскажи как его надо было правильно выводить
std::istream_iterator + std::copy
> Это не олимпиадная задача и пара миллисекунд тут некритичны. Я предпочел простоту и краткость кода перед производительностью.
Это не краткий код. Краткий код - std::ifstream::read.
У тебя цикл с постоянными реаллокациями строки, хотя ты мог считать сразу весь файл одним обращением к диску в строку, так как размер через std:: filesystem::file_size тебе заранее известен.
Да и сплит строки можно было бы сделать проще через std::stringstream + способ из первого пункта.
Действительно. Парень знает про 17 стандарт откуда-то, а пишет код уровня laba03.cpp. Может, лучше ему сразу указать на ошибку, а не "сыночка, ты у меня самый красивый и умный, не слушай их"?
Я сам писал такой же хуевый код, когда делал диплом, потому что никаких книжек не читал и не интересовался.
Да, я проебался.
Возвращай true.
я просто не вкупаю, что и зачем.
Если брать за референс std::complex - там 2 геттера на каждое поле.
Если тебе надо копировать - сделай оператор\конструктор.
Если ты ебанутый, сделай
Complex getComplex() { return ЗВЕЗДОЧКА this; }
>>600812
https://pastebin.com/06vZWkC9
Вот анонасики. 2 геттера на отдельно вещественную и мнимую сделал, но надо сделать геттер на весь класс.
Я даже не представляю, проебланил в свое время, теперь пытаюсь нагнать, в примере у нее так написано.
getComplex(float &re, float &im);
Думаю это гетер на весь complex.
Я очень сильно сомневаюсь в этом, но могу предположить, что от анона хотят фабричный метод.
>Да и сплит строки можно было бы сделать проще через std::stringstream + способ из первого пункта.
Не понял чем тебе не понравился сплит. Он работает в 1 проход по строке без каких либо аллокаций. Как его еще можно улучшить?
>std::istream_iterator + std::copy
Эта хуйня генерирует точно такой же код если что. Так что тут уже ты обосрался со своим лишним переусложнением кода. Верхняя часть скрина это std::copy(A.begin(), A.end(), std::ostream_iterator<int>(std::cout, " ")); нижняя через цикл. Как видно и то и то генерирует по 2 вызова вывода.
Да рукописный, не из библиотеки std или еще откуда. Задача реализовать класс комплексное число. Скинул же в pastebin что да как.
я думаю, что челик сам не понимает, что он делает. Ему написали и геттер уже, и хуеттер.
30 строк с какими-то условиями вместо одного оператора >> в цикле, действительно.
Мы говорим о переусложнении кода, генерируемого компилятором или кода, написанного программистом?
Ебашь тогда ассемблерный код, хули.
Цикл поймет любой чел который даже не знает С++, а эту залупу с istream_iterator нет. Я лично до твоего поста про него не знал и пришлось гуглить что и как он делает .
Ахуеть. Какой пиздец. И это на джуна надо знать? Какие то кривые Безье, сортировки. Нахуя блять!?
Это не на джуна, а на неоплачиваему стажировку на неполный рабочий день))0
Блядь, ну ты и речи задвигаешь.
Зачем тогда ты 17 стандарт используешь, пиши на C++99, а то не все поймут, придется читать документацию к языку, охуеть.
>Без аллокаций
operator+= для std::string в коде - и без реаллокаций.
А ты хорош мы вам перезвоним.
Без понятия. Это надо у нвидия-куна спрашивать.
Где ты там видишь += для строк? Там есть 2 выделения памяти под вектор для строк и собственно самой подстроки.
Заядлый плюсовик посмотрит на твою залупу и перепишет так как деды писали 10 лет назад.
Да, проебался, += в другом задании, но можно было бы избежать, заменив getline на read.
А в сплите реаллокации есть, смотри второй пикрил.
Можно тогда лист заюзать и не будет реаллокаций. А про чтение файла, да можно хуево и не оптимизированно (зато просто и понятно), но нахуя потеть над этим в тестовом задании?
Сука, какой потеть, блядь
Узнать размер файла, резервнуть строку нужного размера, считать ее одним read, блядь, ты о чем?
Еще тогда вопросик. В .h у нас описание методов, в .cpp реализация. А что в данном случае делать? Т.е. вот берем из примера сеттер Re.
В .h:
float setRe(float re);
в .cpp реализуем это метод:
void Complex::setRe(float re)
{
Re = re;
}
А как тут разделить? Или если не делиться, то куда его запихнуть? Ну и последнее, зачем const?
> А как тут разделить?
У тебя и так всё разделено же.
> зачем const
Не нужен, я забыл его снести, когда сначала написал одну версию кода, а затем передумал и переписал.
Ну хуй знает, что проще, в 3 строки через getline или идти гуглить как же мне получить размер файла когда у fstream ПОЧЕМУТО такого метода нет. В итоге видишь, что для этого надо заюзать tellg, пиздец это что такое? Сказать букву г или что?
Никогда не понимал этих уебков из стандарта, почему я должен вот такую хуйню писать вместо того чтобы просто написать file.ReadAsString() как в любом другом языке? Так же и со сплитом, где сука метод Split в классе string? Почему я должен сам его реализовывать когда в других языках это из коробки?
>У тебя и так всё разделено же.
Если ты имеешь ввиду, что в .h:
getComplex(float& re, float& im);
А в .cpp:
Complex &getComplex(float re, float im)
{
return *this;
}
То не работает это, куча ошибок.
Так у тебя прототип отличается от реализации. Ты рекламируешь квадратные окна, а продаёшь круглые.
Мы вам перезвоним. read может вернуть не всю строку, а выставить бит фейла, так что тебе придется крутить цикл или молиться что файл не изменили в промежутке как ты узнавал его размер, а кстати чем? filesystem у нас только c++17, ты уверен что его разрешат тащить?
Так а как должно то быть анонче? Не могу понять. И желательно конечно чтобы в .h описание так и осталось. но не обязательно
Все очень просто.
В .h return_type func_name(parameters)
В .cpp return_type ClassName::func_name(parameters)
Ты даже в этом посте void с float напутал.
const гарантирует что геттер не поменяет ничего при вызове.
Прототип в .h должен показывать, как использовать функцию, даже если ты не знаешь, что там внутри .cpp. Показывать, какие аргументы ей подавать, и что она выдаст в ответ.
>резервнуть строку нужного размера,
В тз размер строки неограничен, программа должна работать с терабайтными инпутами, на этом и ты и он проебались.
мимо
>В .h return_type func_name(parameters)
Т.е. это опечатка, что в примере у меня просто getComplex(), без типа?
>>600954
Так я и не понимаю, что должен вернуть это геттер. т.е. если делать самому
Раз вы понимаете, м.б. просто напишите
.h:
код
.cpp:
код
Потому что как тут сделать
>В .h return_type func_name(parameters)
В .cpp return_type ClassName::func_name(parameters)
т.е. даже как тип возращаемых значения, а уж тем более реализацию в .cpp не понимаю/не осилю.
В том же файле например в .cpp:
void Complex:: setComplex(float re, float im)
{
///реализация
}
Т.е. в .h д.б:
void getComplex(float re, float im)
Но тогда как сделать реализацию? Выручайте анонасы, для вам раз плюнуть, а меня спасете.
>В .h return_type func_name(parameters)
Т.е. это опечатка, что в примере у меня просто getComplex(), без типа?
>>600954
Так я и не понимаю, что должен вернуть это геттер. т.е. если делать самому
Раз вы понимаете, м.б. просто напишите
.h:
код
.cpp:
код
Потому что как тут сделать
>В .h return_type func_name(parameters)
В .cpp return_type ClassName::func_name(parameters)
т.е. даже как тип возращаемых значения, а уж тем более реализацию в .cpp не понимаю/не осилю.
В том же файле например в .cpp:
void Complex:: setComplex(float re, float im)
{
///реализация
}
Т.е. в .h д.б:
void getComplex(float re, float im)
Но тогда как сделать реализацию? Выручайте анонасы, для вам раз плюнуть, а меня спасете.
>В том же файле например в .cpp:
>void Complex:: setComplex(float re, float im)
Не понятно почему в том же файле в .h:
void getComplex(float &re, float &im)
re и im уже по ссылкам, они же должны совпадать вроде.
>>600506
>Как вообще можно стать джуном студенту?
Вкатился пол года назад на джуна по плюсам. тоже 3 курса. Развивай гидхаб, делай проекты. Я например, делал проекты по конкретным тематикам: патерны ООП, OpenGL, QT, DX, базовые нейронки, свои велосипеды дефолтных конструкций языка по типу своей стрингии т.д. Проектами закрепляешь теорию и создаешь себе витрину, главное не в тупую переписывать проекты из интернета, а быть способным пояснить за каждую свою строчку в коде. Думаю, когда на собесе показывал свои проекты с гидхаба, много вопросов сразу отпало.
Вопросы и тестовые могут быть от хэллоу ворда до хай лвл инженерии, тут никогда не угадать. на первом собесе был дроч с указателями ссылками и массивам указателей на char, расписывал форвард лист на листочке, деревья, решение задачи с использованием комбинаций из контейнеров STL'a, устройство вектора, справился ~80%, через час так уже заеблся что сам начал запутываться в банальных вещах не перезвонили офк.
Пару раз решал тестовое. Одно из самых ебанутых было задание написать API для построения в 3х-мерном пространстве различных 3D фигур и кривых, пришлось полистать пару дней учебник по начертательной геометрии. После того как я отправил, пару недель вообще никто не отвечал, не помню уже, но вроде сам фидбек просил, ответ был дефолтный по типу "Качества кода ниже ожидаемого, реализация не удовлетворяет требованием в задании", по факту - пиздеж полнейший, каждый пункт был выполнен, даже не обязательные, фигуры били геометрически правильные, я все проверял перед отправкой. Разве что я не стал замарачиваться с графической визуализации 3д, так как в задании не было указано, и у одной из кривых не смог посчитать производную вдоль кривой, но глобально это хуйня.
Ну и самый ебанутый вопрос, точно не помню, на интервью вроде было еще замороченей написано, что то типу: какой будет аутпут arr:
char arr[] = {'1','2','3','4','5','6','7','8','9'};
int ptr = (int )arr+1;
ptr[0]='0';
>>600506 - кун
Развиваю гитхаб как-могу.
Даже есть пару интересный проектов (автоматический бекапер с пересылкой файлов на сервер на Qt, TCP, многопоточность, etc и облачный проигрыватель под ведроид), ну и просто решение интересных задач.
С тех пор, как начал откликаться на вакансии, один раз какой-то репозиторий посмотрели и все, лол
Чаще всего просто получаю отказы без объяснений, ну или просто отклики висят, а на них не отвечают
'0' и '\0' отличаются по коду символа. Если потом этот массив в printf закинуть то выведет до терминального ноля 12340
А если ещё и порядок битов другой... Ух бля
> один раз какой-то репозиторий посмотрели и все, лол
Там отклики hr'ы чекают, им твой гидхаб не сильно интересен. Светить гидхабом стоит только на очных сабесах, когда есть типы шарющие, что у тебя там вообще происходит на экране.
В сеттер передают по значению. И они присваиваются полям.
А в геттер передают ссылки на переменные. Поэтому он сам может ничего не возврашать. Его можно использовать так
float r, i;
someComplex.getComplex(&r, &i)
Соответственно, ты можешь сделать
void getComplex(Complex &c) { ... }
Содержимое догадаешься как сделать?
Чтобы можно было использовать
Complex c;
someComplex..getComplex(&c)
ну и так ответил, только не додумался что изменится больше 1 значения. Чел сказал, что этот метод широко используется для оптимизаций в коде гугла, лол конечно
Ну, мне до собеседования, оказывается, еще далеко.
Я про x86 конечно... Про расположение в памяти, в массив число пойдет раньше нулей же.
>у fstream ПОЧЕМУТО такого метода нет
А почему он должен быть? Какой размер у /dev/zero?
Всю жизнь размер файла доставали fstat, но недавно завезли std::filesystem::file_size
http://insanecoding.blogspot.com/2011/11/how-to-read-in-file-in-c.html - 6 способок, включая в одну строчку
Потому что во всех остальных языках высокого уровня такие методы есть. В том же c# хочешь прочитать файл как строку? Пожалуйста File.ReadAllText. Хочешь как массив байтов. Хорошо, вот тебе File.ReadAllBytes. И только в плюсах для этого надо юзать кучу функций с неинформативными названиями.
Что мешало добавить это в качестве метода fstream, и если вызвать его на на невалидном файле(типо твоего дев/Зиро) просто кидать исключение? Почему он вообще в абсолютно другом хедере?
Ага. Ты мне зубы тут не заговаривай. File и FileStream разные вещи хоть в C#, хоть в джаве, хоть в плюсах.
Зачем мне исключения в прошивке без исключений, которая читает файл до нулевого байта, и не хранит нигде размер файла?
Ротируйся в гейшлюхи не раздумывая.
Тогда тебе в C#/Kotlin тред, если тебе нужны такие методы из коробки.
>>600950
Берешь и открываешь в rw режиме.
Если не дадут использовать 17 стандарт - то <dirent.h> в помощь. Или способ через tellg.
>>600959
В ТЗ такое условие скорее для того, чтобы соискатель не сделал char buf[MAX], чем для очень больших файлов.
Причем тут rw режим? read просто не обязан возвращать столько символов, столько ты запросил. Нормальную обработку ошибок пилить там целый экран уйдет.
>Содержимое догадаешься как сделать?
Лучше, чтобы ты помог. В любом случае всем спасибо ща помощь!
Тимлид, который меня собеседовал, ты?
Анон, свеженькая обновленная студия очень хуево парсит синтаксис некоторых файлов, где шаблонные классы и вяские вложенные типы. Периодически вылетает ошибка какого-то сервиса VS, что он завршился с ошибкой. Директорию .vs удалял.
Щто делать, может как-то более явно расписывать шаблоны?
Предположу, что rw для того чтобы файл никто не смог изменить пока ты его не закроешь.
Спасибо, помогло
Эта хуйня тоже хуево парсит, сложные макросы не раскрывает, тогда как интелисенс норм работает.
Потому что в 2020 сука году до сих пор нет никакого стандартного способа пробежаться по метаданным класса. Т.е. любая сериализация вынуждает пилить костыли из макросов.
Анончики, как вы думаете, оправданно ли C++ такой overly complicated, позволяет ли это с минимальными затратами использовать блага высоких абстракциий и ООП, или же это просто построенная на легаси говне залупа, и тот же раст проигрывает только по причине того, что бизнес на нем исторически так крепко не завязан?
Ну да, если это структура с парой числовых полей то можно и так сделать, а если это сложный класс с кучей полей разных типов и динамической аллокацией?
Как можно заметить, правильно писать справа, потому что читается справа налево.
int const const const - конст. указатель на конст. указатель на конст. инт.
А здесь получается что все справа, а самый умный слева написал.
const int const const
Чет призадумался, а получается, что реально, если все справа писать, то будет логично читаться, без исключений, то есть сначала то к чему, а потом что
Чтобы не путаться с const, мне помогало делить в голове выражение на две половины -- всё до звёздочки, и всё после. "До" относится к типу, на который указываем, а "после" относится к самому указателю. Ну а дальше уже без разницы, "const int" там, или "int const", и куда звёздочка прижата -- к типу, или к переменной, всё это пофиг.
Тут кому то может быть неочевидно, почему спираль, если все слева. Так это потому, что справа будут скобочки )))
А что, rust не overly complicated что ли? Имхо это какое-то фундаментальное свойство вселенной, начиная с какого-то количества фишек все равно наступает комбинаторный взрыв сочетаний фич, хоть на лиспе пиши, хоть на плюсах.
Oh yeah, I got a hard boner!
Актуальны из-за exception safety и микрооптимизации шаред поинтеров
>>601555
https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice
make функции всегда и везде актуальны.
Кому нужно это сишное говно?
using proc = function<void()>;
using procs =vector<proc>;
и все понятно.
UINT StartSlot,
UINT NumBuffers,
ID3D11Buffer *const *ppConstantBuffers
);
А вот этот параметр как понять? Указатель на константный указатель на ID3D11Buffer? То есть аргумент должен быть адрес константого указателя.
ID3D11Buffer *buffer;
VSSetConstantBuffers(0, 1, &buffer);
Тогда почему оно так работает, ведь буффер у меня не конст?
Типо гарантия того что buffee у тебя не изменится. Если до этого buffer = &zalupa то и после вызова он будет содержать адрес залупы.
>*
А добавьте символ в следующую шапку что ли. Регулярно тут эта проблема возникает в треде с разметкой.
>А вот этот параметр как понять?
Просто перепиши мусорку через using, если сразу не понятно. Сразу станет всё понятно.
https://ideone.com/iY8iOm
Если ты хорошо освоил жс/питон, то шанс есть.
Раз есть опыт на чём-то, вкатишься даже быстрее.
make_ тебе сконструирует сразу умный указатель с нужным содержимым, а если делать auto sp = std::shared_pointer<int>{new int{42}}, то сначала выделится память под инт, а потом переместится в участок памяти, который выделится под умный указатель, вроде так.
Геттер - это метод, возвращающий поле класса, как правило, без аргументов, например getImage() или getReal() в твоём случае.
То, что ты пытаешься сделать скорее ближе к конструктору, но он возвращать ничего не должен.
все, о чем пишет Скотт Майерс в своих книгах.
Сколько раз задавал этот вопрос итт, никто не отвечает. Я уже блять начинаю думать, что шутки про джуна плюсовка это нихуя не шутки и их реально не существует.
Я существую, правда безработный
Ну так здесь одни пидоры сидят, которые реально всё знают, но никогда ничего не рассказывают. Поэтому приходится выяснять всё самому.
ну так у разных контор разные понимания о джуне.
Так то спектр знаний простой, в неопределенном порядке:
Стандартные контейнеры + итераторы. Понимание реаллокций, инвалидаций итераторов, всяких там сложностей операций, знание категорий итераторов.
Понимание лоулевел пердолинга памяти, арифметика указателей, касты между типами указателями, выравнивание, и прочее.
Классы как таковые - перегрузки операторов, конструкторы\деструкторы\хуюторы. Что такое this. Public\Private.
3 кита ООП, перекрытие виртуальных функций, зачем ваще нужно. Зачем нужна инкапсуляция. Наследование без виртуальных функций, порядок вызова конструкторов\деструкторов. Почему в конструкторе надо внимательно думать перед вызовом виртуального метода. Что такое Protected.
RAII - чтобы от зубов отлетало понимание, а не как у шизиков, которые считают его не нужным.
Эксепшены - как кидать, как ловить, кто кидает в стандартной библиотеке, почему их никто не использует, как их использовать. Нюансы кидания эксепшенов из конструкторов\деструкторов\мув конструкторов(операторов).
Как происходит компиляция и линковка, что такое #include, что такое ODR, дефинишен\декларейшен. Почему статик переменные в хедере это совсем не то, чего ожидаешь. Extern "C"
static_cast\dynamic_cast\reinterpet_cast\const_cast\сишный каст, который всё сразу.
Опционально: системное си-говно, opaque указатели(handle, FILE), всякие говномакросы, побитовая дрисня.
Опционально: Работа с файлами. fopen\fstream. Бинарные файлы против текстовых файлов.
C
ООП
STL
выведение типов
деструкторы, конструкторы и прочая поебота
множественное наследование
виртуальные классы
параллелизм
метапрограммирование на шаблонах
умные ссылки, weak ptr
move семантика
perfect forwarding
rvalue, lvalue
вызываемые объекты
лямбда
> ШЕФ ПОСМОТРИ ПОЧЕМУ У МЕНЯ UNRESOLVED REFERENCE
> В ТРУДОВУЮ СЕБЕ ПОСМОТРИ, ТАМ НЕПРОШЕДШИЙ ИСПЫТАТЕЛЬНЫЙ СРОК
То есть по фасту устроить карьеру на С++ не выдет, надо дрочить по полной и потом не факт что примут?
Если тебе надо по фасту - то веб обезьяной.
UNRESOLVED REFERENCE значит не находит функцию/глобальную переменную и это легко фиксится. Если это изза либы то достаточно в студии ссылку на либу добавить или pragma comment( lib, "libname.lib" ) и все работает само. Так зачем мне знать как оно там работает?
А в идеале нужно знать, что это такое и когда применять? Ну то есть я могу за 3-4 предложения объяснить каждый из пунктов, но целую лекцию не проведу
Чтоб такая хуйня в своем коде вылезла это надо с extern где-то обосратся ну или глобальную переменную не inline объявить.
>>601925
>>601921
Для ньюфагов (обощение того, что вам надо знать, чтобы стать программистами):
https://sharpc.livejournal.com/67583.html
__dllexport/import
У меня в 600к мухосрани на весь город 2 вакансии по плюсам, на которых МАКСИМУМ для архитектора/тех.руководителя 70-120к. При том что там пиздец работенка, анализ изображений, анализ видео, короче софт для камер.
И это не говоря о предметной области
Как по мне это все бред и формальности. Джун должен знать:
1. Английский
2. Уметь читать документацию
3. Уметь гуглить
4. Базу в виде пары книжек по С/C++
5. Базу по архитектуре ОС
Это начало кроличьей норы
Пригласишь на собес?
>Базу по архитектуре ОС
Есть рекомендации, как подтянуть вот это вот? Навернуть Танненбаума и поковырять немного винапи в качестве практики достаточно?
а после нее таненбаум
Вот крепкая база под винду.
Windows via C/C++
Windows 10 System Programming
Windows Internals
Курс на степике по осям
Любой курс на ютубе по осям
проиграл от студента
>Эксепшены
>почему их никто не использует
Кстати, а почему? Во всех книгах по крестам пишут, что эксепшены охуенно гибкие, мощные и удобные, не то что сишные возвращаемые коды ошибок.
Вот и выросло поколение.
Исключения это
1. Медленно
2. Сложно работать в многопоточной среде
Те каждая контора сама решает, в каком стиле писать, но обычно придерживаются подхода ошибка-как-значение.
А как ты собираешься работать? Просто нажимать магическую кнопочку МАГИЯ? Или все таки писать всякие cmake
Остальные забудь, это чисто для формальной теории, чтобы не запутаться, тебе они не понадобятся
Если упрощенно,
glvalue это то, что слева, чему можно присвоить, переменная.
prvalue это то, что справа, некий объект или значение.
xvalue это сорт оф временный объект.
rvalue и lvalue это устаревшая хуйня.
На джуна книжек 4-5 и столько же пет проектов от двух килострок
Один ты безработный :(
Уф, сложнааа (((
Вроде, прочитал Страуструпа, но всё равно каждый раз, когда захожу в этот тред, узнаю много нового.
Так Страуструп сам признался, что современные кресты не полностью знает.
Я то откуда знаю? Мне это вообще не нужно.
А где брать практику по сабжу?
https://ideone.com/b7pssu
при попытке заменить
Shape::createShape(T);
на
Shape a; и a.createShape(T);
компилятор выдаёт ошибку? В обратном случае то же самое. Я так и не нашёл нормального объяснения того, какую конкретно роль выполняет ::, и что может быть эквивалентом :: в моём случает.
Это разве ещё актуально?
Медленно оно, наверное, только в каком-нибудь микроконтроллере, но там и new сделать лишний раз медленно.
А для многопоточки добавили возможность сохранять исключения, и перебрасывать в другой поток.
У класса Shape:: есть метод createShape. Он возвращает указатель на Shape.
Очень много кода течет как говно, потому-что RAII не используют. Где не используют RAII - эксепшены противопоказаны. Это, собстно, причина почему гугл их не использует.
Эксепшены дают скрытый контрол флоу, что часто не ясно вообще. По хорошему нужны аннотации, что функция кидает\не кидает. Они есть (ноэксепт) но этим никто не пользуется кроме девелоперов СТЛ\Буста.
Ну и люди часто не понимают, что они делают в коде вместо обработки ошибок, recoverable ошибка или нет, много нюансов короче.
Я для своих новых проектов вообще везде использую эксепшены. На работе пишу без них. Вот как-то так
Зачем вообще писать на C++, если не использовать RAII? С тем же успехом можно и чистом C писать.
ну и да, если уж на то пошло, то
if (auto v = Raii(); v) {
...
}
https://www.tutorialspoint.com/cplusplus17-if-statement-with-initializer
Ну типо почему в 1 варианте компилятор сразу же вызывает деструктор, а во втором работает как надо?
Чето тем дальше, тем пиздецовее
Переменная v живет до конца ифа, а в первом случае rvalue уничтожается сразу после скобок.
>Пиздец, даже такое есть
С разморозкой!
Это хорошо работает с structured bulding кстати, типа:
if (auto [success, x, y] = do_something(); success)
{
/ work with x & y/
}
Вы си тредом промахнулись.
>This was the largest C++ committee meeting ever - 252 people attended!
Норм такой комитет, чо.
Почему там так мало тяночек и чёрнокожих? Почему того чёрнокожего рядомсидящая белая сука не держит за ручку и не прижимается к нему?! Куда смотрел фотограф?!!!
Какое же говнище.
Лол, что это за подвал. Выглядит как будто только полчаса назад со стен пентаграммы стерли.
Напомнило Рим из Джона Уика 2.
Ты специально сидел и считал, угнетатель?
Тян не могут прогать на плюсах. Слишком сложно. Я еще не видел ни одну сеньор С++ тян.
Ой бля, сейчас опять начнётся.
11 сестер всего. Кажется, хуемрази оборзели и им требуется живительная инъекция пересмотра CoC и квот на URM.
99% кунов тоже.
Root-ковская еще.
Слева Guy J Davidson (@hatcat01)
Справа Евгений Петросян
Найдите Страуструпа на фотке.
Потому что операция записи на собес обёрнута мьютексом?
static cast ёбни
знаю как минимум 4 тни могущих в плюсы.
3 из них шарят в MIPS'овом ассемблере и разрабатывали под embedded.
4-я знает все сорта асма, использующиеся на винде, тк читает корки её ядра чаще, чем ты просто читаешь хоть что-нибудь
так то там всего два сорта, но из-за солянки в calling convention, без веществ это не прочитаешь
так что выковыряй подзалупный творожок, помойся, постригись и выйди из комнаты уже наконец. может увидишь, что твой манямир и реальный мир значительно различаются
просто адекватные люди, которым есть чем заняться по жизни, на такие сборища не ходят
нахуй не надо
>манямир и реальный мир значительно различаются
Дружок, посмотри на эту фотографию. Видишь ли ты тут девушку, или женщину? Нет? Посмотри внимательнее, приглядись. Да, вот так, молодец, ну что, увидел? Увидел? А теперь внимательно её рассмотри. Можешь ли ты представить себе, как какой-то мужчина плачет и набирает дрожащими пальцами телефон этой бляди, чтобы рассказать о своих чувствах к ней? Веет ли от нее молодостью, романтизмом, свежа ли она и красива?
> 4-я знает все сорта асма, использующиеся на винде, тк читает корки её ядра чаще, чем ты просто читаешь хоть что-нибудь
Вот здесь ты обосрался.
Зарепортил.
Няшные?
Шафутинский и Петросян
Я так-то наоборот.
Что блять? На фото комитет, который разрабатывает стандарт C++. У них по три раза в год такие встречи. Как по-твоему блять обсуждать новые фичи, проводить голосования, подводить итоги? В конфе в дискорде?
для большей части этих людей - комитет это хобби и тусовка с друзьями.
https://ideone.com/7sdRm3
Находит наибольшую общую подпоследовательность
lcs( "abcdef", "abc" ) => "abc"
lcs( "abcdef", "acf" ) => "acf"
lcs( "132535365", "123456789" ) => "12356"
lcs( "abcdefghijklmnopq", "apcdefghijklmnobq" ) => "acdefghijklmnoq"
По дефолту они получаются пиздецового качества
>typedef
>if (x.length() == 0 || y.length() == 0)
> vvs (n + 1, vs (m + 1, ""));
>return ""
>int n = x.length()
Ухх ёбана, снимай штаны, буду жопу бить
string::empty()
Я охуел, когда узнал, что через шаблоны можно наследовать класс от типа-параметра.
template <typename T>
class Derived : public T { };
Держу в курсе.
Задание : Найти максимальный элемент в массиве ai (i=1, , n), используя соотношение (деления пополам) max(a1,, an) = max[max(a1,, an/2), max(an/2+1, , an)].
Обычная и рекурсивная функция.
Мне типо надо постоянно делить массив? Или просто разбить его на 2 части и в каждой найти мксимальное?
Ну смотри, у тебя есть массив [1, 6, 8, 2, 0, -1], обозначу его "mass".
1) Делим пополам
max(mass) =
max( max([1, 6, 8]), max([2, 0, -1])) =
max( max (max([1, 6]), max([8])), max( max([2, 0]), max([-1])) )
Дальше сам
>>604247
Освятил тред
(define (max array)
(define (slice i j array)
(cond ((= i j) nil)
((> i 0) (slice (- i 1) (- j 1) (cdr array)))
(else (cons (car array) (slice i (- j 1) (cdr array))))))
(define (first-half array)
(slice 0 (floor (/ (length array) 2)) array))
(define (second-half array)
(slice (floor (/ (length array) 2)) (length array) array))
(if (= (length array) 1)
(car array)
(let ((a (max (first-half array)))
(b (max (second-half array))))
(if (> a b) a b))))
Иными словами, чтобы вместо пика у меня в одной строке была только >>, куда пользователь что-то вводит, а если вводит что-то не то, то строка просто очищается и ввод продолжается в эту строку.
Как такое можно сделать? Я ещё совсем зелёный, не бейте.
conio.h - перехватывать нажатие энтера, не выводя на экран
Чтобы очистить строку, можно напечатать символ возврата каретки \r, вывести несколько пробелов и опять \r.
max( max (max([1, 6]), max([8])), max( max([2, 0]), max([-1])) )
А зачем эта строчка? Я не могу просто из 3 максимальное найти? Или это обязательное условие?
А нах усложнять? Тебе нах не надо ничего оптимизировать, тебе нужно реализовать алгоритм в чистом виде, то есть он тупой. У него одно действие - рекурсивное деление пополам и когда зайдет оч глубоко и у него останется одно (или два, как хочешь) числа он просто их возвращает и рекурсия схлопывается
Хряпнул пивка, накатаю портянку.
В 25 лет я грустил сидя в своем кабинете. Я только что пришел из цеха и руки мои были по локоть в блядском масле и техническом говне. Не смотря на то, что работаю инженером, когда что-угодно перестает работать нужно идти и разъебываться. Тогда меня че-то переклинило и я решил, что хватит уже заниматься этой хуйней. Я начал учить(повторять) математику и физику с 7ого класса. После изучения школьной программы я подумал, а почему бы не поступить в универ?
Я поглядывал на айти курсы, но они все на тот момент стоили 120к++ (сейчас не знаю), а заочный универчик стоит че-то в районе 250к за 4 года(но деньги из меня он сосет порционно, а не все сразу). Плюс может быть бумажку дадут, а может и на работу пристроят. Кароче, сейчас я успешная второкурсота, помимо этого я зашарил, что на курсере можно просить мат. помощь и на халяву проходить курсы. Прошел пару с++ курсов.
Сейчас я чувствую, что за полтора года меня все эти учебные задания аля : “ Создайте шаблонный класс с публичным методом пизда и приватным методом хуй” начинают подзаебывать. Подскажи анонче, чего бы такого запилить на крестах красивого и не сильно сложного.
Проблема в том, что я вообще не хуя не понимаю, что писать на крестах.
Джавапетухи делают приложения, питонодети вобще всем чем угодно занимаются, Сишарперы игрули делают, 1сники бухам кнопки рисуют. А на крестах то че сделать, за что зацепиться?)
В универчике лабы на с/c++ говно, но я сюда и не за языком пришел, а за мат.частью.
Думаю запилить гуи считающий интегралы, не сильно интересно, но хоть что-то уже осязаемое.
double r1 = maxs(a, n / 2);
double r2 = maxs(a + n / 2 + 1, n-1);
if (r1 >= r2) { return r1; }
else { return r2; }
Вот так?
Спиздил с киберфорума чтоль?
какая-то ебанистическая пикча приклеилась.
На плюсах можно сделать все. Игру, игровой движок. Парсер сайтов. Сами сайты через емскриптен. Какую нибудь системную утилиту, драйвер, кликалку мышью например.
roll
roll
roll
рол
Двач формат похерил, так то это нормально читается, даже проще плюсов
уже сильно читаемее, но все равно пиздец какой-то.
Просто представь себе что это такой специфический JSON.
test
Слишком мыльно получается
Только позёры считают с нуля.
Как эффективно реализовать листенер (без библиотек)? Цикл, который срабатывает n наносекунд - единственный способ?
Нужно не в качестве паттерна программирования.
Эффективно? Средствами ос. Чтобы инит слушал, а твоя программа только обрабатывала.
Поподробнее. Название функции?
Думаешь, ОС будет детектировать это, как-то курируя изменения в памяти?
В идеале так выглядит: я даю винапи указатель на адрес и на мой каллбек (да, не линуксы), он его зовёт при наличии изменений.
>Как эффективно реализовать листенер (без библиотек)? Цикл, который срабатывает n наносекунд - единственный способ?
На прерывание повесить, иди в асм тред.
>Цикл, который срабатывает n наносекунд
А расскажи как это сделать, а? Очень нужно. Точности в микросекунду будет достаточно, впрочем.
Элементарно.
https://stackoverflow.com/questions/158585/how-do-you-add-a-timed-delay-to-a-c-program
По софтварным прерываниям инфа так не гуглится. Знаю эту фичу ещё по дурачеству в ollydbg, но как самому сделать в обычном main.c (пусть даже инлайном ассемблера) - хз.
Есть еще один вариант. Если ты знаешь какая функция пишет в память, ты можешь хукнуть эту функцию, вставив трамплин, грубо говоря заменить часть инструкций в программе на прыжок в твою функцию, а в ней анализировать.
>Sleep
Я до микросекунд просил.
Пока что использую бесконечный цикл с asm("nop;nop;nop;nop;nop;nop;... ) в потоке с приоритетом реального времени, где проверяю счётчик тактов и мне это всё очень не нравится.
насколько я помню из когда то прочитаного windows internals в винде есть таки некие расширения реального времени, возможно придется написать драйвер, в котором и будет происходить настолько быстрая обработка по таймеру без запаздывания
но я не знаю точно, просто смутные воспоминания
Все таки пейджфолты сильно ударят по производительности. Мне кажется вариант через debug register быстрее будет.
https://www.codeproject.com/Articles/28071/Toggle-hardware-data-read-execute-breakpoints-prog
Если напишешь программу, вычисляющую любые интегралы, то можешь сразу в гугл на сеньора стучаться.
Ну хз, мы обычно ставим интервалзеровский RTX, он крутится паралельно винде на своих процессорных ядрах. На нем риал тайм, на винде интерфейс.
Опиши поподробнее как стучаться? Вот мой гитхаб с одним проектом, возьмите к себе?
double integral(double a, double b, int n){
double step = (b - a) / n; // width of each small rectangle
double area = 0.0; // signed area
for (int i = 0; i < n; i ++) {
area += exp(cos(a + (i + 0.5) step)) step; // sum up each small rectangle
}
return area;
}
А теперь на лиспе
Тогда уж guard page, именно так стэк и работает, кстати. Лучшим способом будет установка железячного бряка через отладочный регистр, контроля больше, нет проблем синхронизации.
А мы тут вашего залетного КУЗЬМИЧА в кружок отпепетушили, принимайте пополнениезабирайте назад.
>>1605269 →
>>1605259 →
>>1605243 →
Искал инфу по одному конкретному вопросу и наткнулся на это. Стоит проходить для закрепления после Майерса и т.д.? Всегда плевался в сторону подобного, но тут вроде содержание действительно неплохое.
вот-вот джун
Если ты "почти джун" - то смысла нет. Лучше иди еще наверни Херба Саттера, или там Александреску какого
С регистром есть проблема в том, что он ставится на конкретный поток, а если программа постоянно срет новые потоки то что делать?
https://rentry.co/2r75g
cout << fixed << setprecision(1) << pi <<" "<<npi<<endl;
Сука, что это за хуйня? Почему нельзя pi.setprecision(1)? Мне всего-то нужно безопасно версии проверять.
Стоп, тупанул. Разница будет только если два куска кода на разных архитектурах запустятся.
Так удобнее. Я читаю чужую версию, возврат в строке, проще конвертить во флоат, чем свою интовую нотацию сочинять.
Нельзя, на си вообще нет такого.
...а если не конвертится, ловим invalid_argument и продолжаем работать. Очень удобно.
>>605482
Например, перехват NtCreateThread/Ex, устанавливаешь флаг suspended, выполняешь системный вызов, далее устанавливаешь контекст и возобновляешь поток. Или другой способ, на мой взгляд более правильный в теории, сам я не пробовал так делать, перехват LdrInitializeThunk, вызывается в контексте созданного потока, 1 или 2 аргументом будет указатель на структуру CONTEXT, редачишь отладочные регистры и передаешь управление загрузчику, который установит начальный контекст потока сразу с твоими брекпоинтами.
Блокнот? Свою маленькую игру закодить? Калькулятор? Сажусь за компьютер и ничего не решаюсь сделать. Есть ли какой-то список задач для практики? И чтобы была сложность разная, на подобии: определение разряда числа<калькулятор<вселенная?
Есть конечно идея для приложения: приложение для лиги легенд, которое на стадии пика, будет искать профили игроков в op.gg и выводить их статистику, сыгранные матчи, кого мейнят и тд., ибо самого заёбывает каждый раз ctrlC + ctrlV делать. Подходит ли c++ для этой задачи?
добра
Бля, анон, дико извиняюсь за свою слепоту, я тред не читал даже. Большое спасибо
>>605951
Так нет, я видел уже такие программы, просто они показывают статистику уже когда игра загружается, а не когда ты выбираешь персонажа. Да и как бота распознать нельзя, ибо какой тут бот? Я просто смотрю статистику игроков, тем более беру статистику не с riot games, а с op.gg/
>Да и как бота распознать нельзя, ибо какой тут бот?
Ты будешь как то взаимодействовать с игрой, чтобы прочитать с экрана ник игрока. А современные игры это такие вишмастеры, которые палят все процессы запущенные.
Потому что альфа хуйня, качай математику. Или http://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/integration/integral.html
Если приложуху от всяких твичей хукаться, ничё не будет, мамой клянус.
Охуеешь искать хдми-ин за адекватные деньги. Тебе обязательно вместо одного порта продадут целый компьютер за соответствующий прайс.
Во-первых, это всё равно целый компьютер, который уже обработанное и пережатое видео по юсб 3.0 выплёвывает. Во-вторых, он относительно дешёвый, потому что ограничен возможностями hdmi 2002 года. Представь себе, если бы тебе видеокарту 2002 года пытались продать или даже монитор.
>ограничен возможностями hdmi 2002 года. Представь себе, если бы тебе видеокарту 2002 года пытались продать или даже монитор.
Ебанутый? Ебанутый.
М? В 2006 году (14 лет назад) вышел hdmi 1.3, который уже мог 1440@75 или 1080@144.
>относительно дешёвый
Ну и да, это только относительно других карт захвата, потому что столько же стоит и видеокарточка, и монитор, которые, на секундочку, изображение умеют формировать и отображать, а не только принимать в один порт и выплёвывать в другой.
Еще проще загрузить свою дллку и там обрабатываешь создание нового потока через DLL_THREAD_ATTACH.
Да, точно, я про это совсем забыл, LdrInitializeThunk как раз и проводит инициализацию потока с оповещением библиотек. Можно тогда без длл, через TLS THREAD_ATTACH эвент обрабатывать.
У меня есть многопоточный сервер. Как мне получить адрес сокета в функции хендлере?
Т.е. как можно получить SOCKADDR имея в наличии только сам SOCKET?
Я не особо понимаю вопрос
У сокета нет никаких функций
В многопоточный хендлер я отправляю сокет, sockaddr отправлять не могу по логике программы
Из типа socket можно получить адрес сокета?
Отправляй структуру, содержащую сокет и sockaddr.
Хватит ли его для работы на c/c++? (Смогу ли я на нем написать и протестировать свою ось?) Если да, то какой линупс ставить? Если нет, то чего не хватает?
getsockname/getpeername
Могли бы хоть разрешение подтянуть такой эффективной и современной книжке.
Потому что тебя спросили, пьёшь ли ты, и умеешь ли метлой работать, а не про с++.
А понял
Это просто кто-то уже написал за тебя вращение в несколько строчек, а ты теперь его используешь. Она ж не магически вращается. На си вон тоже написали, назвали питоном, вообще в 6 символов делается.
Путь к файлу подходящий, т.к. при других он выбрасывает ошибку, что файл не найден.
Но вот size и seek выдает отрицательные, что за магия.
ошибку можно дернуть, если файл не открылся, а это просто размер структуры уже открытого файла и указатель на позицию в нем
>Use this function to retrieve a message about the last error that occurred.
https://wiki.libsdl.org/SDL_GetError
Только про не открывшийся файл?
Странно конечно, но видимо в твоем C-поделии, о котором ты почему то спрашиваешь в c++ треде, не реализовали seek для ассетов в апк. Читай его как обычный поток, пока не закончится.
>в твоем C-поделии, о котором ты почему то спрашиваешь в c++ треде
Я-то думаю, что так легко читается
Поделие не мое, просто дали старое как говно мамонта легаси и сказали переводить это по копроративному стандарту на новые рельсы.
Новых ошибок он не кидает, там только старые прошлых мест кода.
Терри также под поезд прыгнул.
последняя 2.0.10
да хоть в какой версии, можно просто пример считывания текстового файла из assets готового apk
Обычный байтоебский while(len=read(...)>0) полагаю
https://discourse.libsdl.org/t/reading-files-on-android/18437/6
ну так я бы и сделал обычный байтоебский, только вот length нету
а в этом примере они не из apk и assets берут, а из хранилища для приложения
Ты не понял. Там не определяют длину, а просто читают по 1 байту, пока поток не кончится
size = SDL_RWread(oldFile, &c, 1, 1);
Алсо там читают из assets, а записывают в хранилище.
Я бы не нанял велосипедостроителя за 120к.
list in {0, 1, 2, 3, 4 ,5};
list out { in.rbegin(), in.rend() };
Ну это называется уже доёбался
1. Сохрани в переменную что вернула RWread. Она возвращает длину реально считанного.
2. После самого RWread проверяй GetError
3. Смотри содержимое массива отладчиком.
4. Ты на чем вообще проверяешь? Эмулятор, реальное устройство? Смотри Logcat
Я бы тебе помог но сегодня в пути, без компа буду.
>>607916
Я забыл иницилизировать указатель nullptr, а потом вдобавок забыл выделить память с помощью new прежде чем использовать указатель.
https://pastebin.com/GLFVbfw8
Лучше сразу учи QString, обыным std::string'ом уже никто не пользуется он концептуально устарел
не надо так тонко с новичками
Вот ты написал, а я и задумался, что хз какими строками пользоваться сейчас. ICU вроде неплохо, но там устаревший api...
Можешь попробовать вернуть адрес вызова метода
Из чужогор класса - выводит ошибку компиляции.
Функция из библиотеки требовала обычную строку
сука глаза
Почитай книжки, там все описано. И пожалуйста, не используй никакой текст, кроме английского в коде
>не используй никакой текст, кроме английского
Тебя забыл спросить. В коде написанном только для себя, который по моей задумке никто другой в глаза видеть не должен, я могу писать хоть арабской вязью.
Как мило.
Ты действительно забыл спросить хоть 1 профессионального программиста. Вот первый спрошенный тебе и указал, что это полный пиздец.
Так я ж не спецом для двача его писал.
Я последние несколько лет делаю это Решарпером++. А вообще, они вроде год+ назад впилили такие рефакторинги в саму студию, но не уверен.
Надеюсь, её набутылили за ложную тревогу и отсутствие школьного образования?
Опять же для первого раза, наверное, пойдет.
Но подумай над тем, что это все очень избыточно.
Например, ты видишь что везде день==1
Значит, это можно вынести во внешний if
И получится что-то вроде пикрил.
А в реальной работе лучше посмотреть в сторону std::chrono
Будет ненамного больше IFов, да ещё и более запутанно код станет выглядеть. Я уже пробовал, как ты предложил.
Более запутанно чем портянка в 12 строк сложно представить. Особенно весело потом искать опечатки.
Просто поделился, не посылайте нахуй, спасибо.
int days[] = {31, ..., 31};
day = day - 1;
month = month - 1;
if (day == 0) {
month = (month == 0)? 12 : month;
day = days[month - 1];
}
Исправил
Блять, я обосрался
String это дотнетовский класс вроде как.
Логические ошибки? Ну-ну.
Это копия, сохраненная 22 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.