1. C++ / Говнокод #24680

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    #include <set>
    #include <algorithm>
    
    bool overlap(const std::set<int>& s1, const std::set<int>& s2)
    {
        for( const auto& i : s1) {
            if(std::binary_search(s2.begin(), s2.end(), i))
                return true;
        }
        return false;
    }

    я зделял

    https://stackoverflow.com/a/29421606/1683138
    -- https://en.cppreference.com/w/cpp/container/set
    iterator Constant BidirectionalIterator

    Запостил: roman-kashitsyn, 28 Августа 2018

    Комментарии (69) RSS

    • #so #algorithms #big-o-is-useless
      Ответить
      • O(n1*n2*log(n2))?
        Ответить
      • З.Ы. Забавно, что автор умудрился сделать асимптотику хуже чем у линейного поиска...
        Ответить
        • А, нет, просто O(n1*n2). std::binary_search всё-таки может фоллбекнуться на линейный поиск.
          Ответить
    • показать все, что скрытоvanished
      Ответить
    • Вот к чему плюсоблядские абстракции приводят.
      Таким товарищам надо дать обычную сишку и сказать чтоб реализовали на ней аналог std::set через красно-черное дерево с итератором и std::binary_search работающий через итератор. Тогда такой хуйни не будет.
      Ответить
      • > Тогда такой хуйни не будет.

        Разумеется не будет. Он тебя сразу нахер пошлёт и пойдёт юзать линейный поиск с двумя массивами.
        Ты сам-то КР-дерево когда последний раз писал?
        Ответить
        • > КР-дерево

          Коричнево-розовое
          Ответить
        • > Разумеется не будет. Он тебя сразу нахер пошлёт и пойдёт юзать линейный поиск с двумя массивами.

          А его посылания нахуй никто не будет слушать. Отправят просто на принудительными работы по реализации этих структур на си (или даже на ассемблере, для особо провинившихся)

          Проблема в том, что люди, подобные тому кто этот код на стековерфлоу написал, вообще не понимаю что за хуйню они используют. Для них всякие там std::map, std::set и так далее это просто какое-то волшебное ключевое слово, которое как-то там внутри что-то делает и предоставляет какое-то api.


          > Ты сам-то КР-дерево когда последний раз писал?

          Хрен знает, возможно я его вообще не реализовывал. Но свои реализации всяких структур данных, я иногда пишу по фану. http://govnokod.ru/23275
          Ответить
          • http://stolyarov.info/books/programming_intro/about.html

            > Учителям такой категории вообще, судя по всему, всё до лампочки: в C++ используется библиотека STL, а значит, надо рассказать ученикам STL; разумеется, дальше vector'а и list'а обучение никогда не заходит (при этом эти два контейнера, пожалуй, самые бесполезные из всего STL), но самое интересное, что ученики, разумеется, так и не понимают, о чём идёт речь. В самом деле, как можно объяснить разницу между vector и list человеку, который никогда в жизни не видел ни динамических массивов, ни списков и вообще не понимает, что такое указатель? Для такого ученика list отличается от vector тем, что в нём нет удобной операции индексирования (почему её там нет? ну, нам что-то объясняли, но я ничего не понял), так что вообще-то всегда надо использовать vector, ведь он гораздо удобнее. Что? Добавление в начало и в середину? Так оно и для вектора есть, какие проблемы. Ну да, нам говорили, что это «неэффективно», но ведь работает же! Переучить такого ученика практически нереально: попытки заставить его создать односвязный список вручную обречены на провал, ведь есть же list, а тут столько ненужного геморроя! Собственно говоря, всё: если нашему обучаемому дали в руки STL раньше, чем он освоил динамические структуры данных, то знать он их уже не будет никогда; путь в серьёзное программирование ему, таким образом, закрыт.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • >нужно использовать те, в которых никаких "STL", vector'ов и list'ов нет.

                Не думаю что это поможет.
                Сейчас в качестве уебных языков используют и явы, и питоны и сищарпы.

                Впрочем в яве Vector и List есть. Но означают они совсем другое.
                Ответить
                • Он про "PHP" с его универсальным "массивом".
                  Ответить
                  • Кресты не такой уж и плохой язык для обучения.

                    Человек сходу поймёт как жесток мир, может даже бросит программирование навсегда.
                    Ответить
                    • Да не, почему-то кресты не пугают начинающих. Видимо весь пиздец можно разглядеть только через пару лет, когда уже поздно.
                      Ответить
                      • Видел ли ты, какой пиздец потом получается от этих начинающих?
                        Я вот видел. Человек, который типа знает C++, который успешно сдает всякие лабы и сессии на этих плюсах и умеет жонглировать этой плюсовой стдлибой, но который нихера не понимает указателей, адресной арифметики. Он например нихрена не напишет вам массив из указателей на функции, принимающие int и возвращающие int. Он вообще даже не поймет что от него хотят. Он не будет знать про то что можно сделать функцию, принимающую указатель на функцию, которая потом по этому указателю что-то делает.

                        Я когда-то одному студенту делал лабу на ассемблере под дос на турбопацкале для вуза (он при этом был уже работающим программистом на шарпе) и там в коде я сделал как раз такую "функцию" которая указатель на код принимает и объяснил что это callback. Он еще такой "а че, в ассемблере бывает такое?"
                        Ответить
    • Я минуснул, за пижжонство.
      Роман Кашицын хорошо выучил С++ и теперь тралирует своих малограмотных коллег.
      Ответить
    • А вот щас какой-нибудь умный задрот возьмёт, да и специализирует binary_search для set.
      Ответить
    • Дай дураку STL крестяный...
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Не проще поискать элементы из меньшего множества в большем?
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • STL интуитивно прост и понятен
          // https://ideone.com/nawyWP
          struct flag {
            bool set = false;
            template <class T> void operator=(const T&) { set = true; }
            flag& operator++() { return *this; }
            flag& operator*()  { return *this; }
          };
          
          template <class CLeft, class CRight>
          bool intersects(const CLeft& lhs, const CRight& rhs) {
            flag f;
            return std::set_intersection(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), f).set;
          }
          Ответить
    • Даже не заметил, что это мой юбилейный, сотый говнокод.
      Ответить
      • > Никто даже не заметил…

        /fxd
        Ответить
        • > Никто даже не заметил…

          Это звучит как "никто кроме меня".
          Даже если взять "никто" в логическом смысле: всем (кроме меня) должно быть абсолютно на это насрать, поэтому удивителен лишь факт, что я сам не сразу заметил.
          Ответить
          • Я сочиняю роман, рома-рома-роман,
            мущина всей моей жизни.
            Ответить
            • Господи, как же ты уныл и предсказуем.
              https://youtu.be/PBi6cu5aTzs?t=27s
              Ответить
              • http://www.lisperati.com/lisplogo_fancy_256.png == https://www.b17.ru/foto/uploaded/upl_1484464006_135067.jpg
                https://youtu.be/oUk8uXYk_6A?t=85

                Гомоиконность!
                Ответить
                • Там в конце функциональщик в адидасах взорвал мозг лиспера теорией категорий.
                  Ответить

    Добавить комментарий