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

    +1001

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    QStringList list;
    QStringList::iterator i, j;
    //...
    i = qLowerBound(list.begin(), list.end(), value);
    j = qUpperBound(list.begin(), list.end(), value);
    while (i != j) {
    	processItem(*i);
    	++i;
    }

    Пахучее пятнышко из брошюры "Qt 4's Generic Algorithms"

    Запостил: Xom94ok, 27 Ноября 2011

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

    • подумаешь, всего то 2 раза сложность возросла
      если в processItem кутэшный разбор xml, то вообще никто и не заметит на общем фоне
      Ответить
    • Весьма декларативненько. Возрастание сложности в константу 2 (с О(n) до 2О(n)) не считается большой проблемой (про сложность цикла я не говорил, если что). Хотя, конечно, лучше было использовать std::equal_range, взамен 2х кьют-функций. Тогда возрастания сложности бы такого не было. Но я лично знаю 2х кьютешников, которым религия не позволяет использовать std::*, просто потому что это не из qt.
      Ответить
      • Само собой напрашивается подставить i первым параметром qUpperBound. Экономия от этого не бог весть какая, но раз это в брошюре про алгоритмы, то надо держать марку.
        Ответить
        • Я полностью согласен. Только это может и не помочь, если поиск в реализации qUpperBound с конца идёт. Я подробностей тамошней реализации, не знаю.
          Ответить
          • Нетрудно догадаться, что qLowerBound и qUpperBound — это бинарный поиск.
            Ответить
            • Все верно, я лажанулся в последнем посте.
              Ответить
            • ну я пока не поленился и не полез в эту вашу кутешную справку, думал что *List - это какбе связный список со всеми вытекающими
              а это вовсе вариация на тему deque, отличный выбор названия для контейнера
              Ответить
              • Ну вот такой он многозначный, английский язык. Во многих языках программирования списком называют основной (притом индексируемый) контейнер.
                Ответить
                • индексируемый список?
                  Ответить
                  • Индексируемый - прилагательное применяемое для описания другой характеристики доступа к данным.
                    Это скорее список с индексным доступом или нумерованный список.
                    Ответить
                  • видимо, имелось в виду random access list
                    Ответить
                    • показать все, что скрытоDoubleLinkedList тоже random access, если знаешь нужный для доступа node.
                      Ответить
                      • херню несёшь и не краснеешь.
                        Ответить
                        • за него цифра краснеет :)
                          Ответить
                        • Аргументируй.
                          Ответить
                          • Раз ты, roman-kashitsyn, аргументировать ещё не научился, то это сделаю я.

                            Ну смотри. У меня есть ссылки на все ноды и хранятся они в HashMap или TreeMap или в массиве (не важно). И тут сразу оказывается, что DoubleLinkedList предоставляет, surprise... , random access. Я могу получить доступ к произвольному элементу DoubleLinkedList. Если ты не можешь, то это пробел в твоих знаниях.
                            Ответить
                            • У меня, как видишь есть random access к DoubleLinkedList.
                              ЧЯДНТ?
                              Ответить
                            • Опять херню несёшь.
                              Random Access List подразумевает, что имеется random access через интерфейс списка. Фейл.
                              По TreeMap random access по ключу не получишь. Фейл.
                              Иди подучись, школота. А ещё на ФП имеешь смелость замахиваться.
                              Ответить
                              • >По TreeMap random access по ключу не получишь.

                                Чего? По моему это тебе нужно подучиться.
                                Ответить
                                • Random Access подразумевает константное время доступа. У TreeMap - логарифмическое.
                                  You can not into data structures.
                                  Ответить
                                  • показать все, что скрыто>Random Access - константное время доступа.

                                    Random Access - произвольный доступ к данным и время доступа не специфицируется. Иначе пруф?
                                    Ответить
                                    • http://en.wikipedia.org/wiki/Random_access
                                      > random access (sometimes called direct access) is the ability to access an element at an arbitrary position in a sequence in equal time, independent of sequence size.

                                      EPIC FAIL
                                      Ответить
                                    • Это уже слишком даже для *Govno.
                                      Ответить
                                    • ну следуя твоей логике, я могу и к std::list докрутить operator [](size_t), подумаешь, каждый раз с начала/конца идти, ведь никто ничего не ограничивает ;)
                                      random access как раз подразумевает O(1) время доступа к a[i], где i - произвольное
                                      на тебе пруф http://en.wikipedia.org/wiki/Random_access

                                      но молодец, что оживил ветку, а то скучно
                                      Ответить
                                      • странно, что lucidfoxGovno не сказал, что random access - это значит, либо есть доступ, либо нет.
                                        Ответить
                                        • Упс, промахнулся. +1
                                          Ответить
                                          • Я поправил, но нужен ещё один человек.
                                            Ответить
                                          • >Упс, промахнулся. +1
                                            2 в уме :)
                                            Ответить
                                          • >Упс, промахнулся. +1
                                            привычка...

                                            Свенсон играл в гольф.
                                            - Черт побери! Опять промахнулся! - чертыхался он, когда ему не
                                            везло.
                                            - Нельзя так выражаться. Господь услышит и поразит вас молнией
                                            небесной! - назидательно произнес случившийся рядом пастор. И
                                            впрямь сверкнула молния и поразила... пастора.
                                            - Черт побери! Промахнулся! - раздалось с небес...
                                            Ответить
                  • Почему-то общий для связных списков и расширяемых линейных массивов интерфейс в Java (и в C# что-то подобное) называется List и содержит операции доступа по номеру. В Tcl, Python, Perl, PHP список — совсем не то же, что в Lisp. Что ещё осталось из мейнстримовых языков?
                    Ответить
                    • >Что ещё осталось из мейнстримовых языков?
                      C++:
                      std::list - DoubleLinkedList
                      Ответить
                      • Да, Степанов читал Вирта и Кнута. Кто ещё?
                        Ответить
                        • nobody cares
                          в ынтырпрайзе проще докупить памяти в сервер или добавить ноду, чем заставлять программиста думать головой и выбирать наиболее подходящий контейнер для задачи, дороже обойдется
                          Ответить
                          • +1
                            sad but true
                            Ответить
                          • хе-хе. кстати пару лет назад был такой случай, когда таки заставили переписать.

                            >добавить ноду
                            дело в том, что не все сервера одинаково хорошо масштабируются горизонтально.
                            (sql-ники , например)
                            Ответить
                            • в том смысле, что нагибали базу кучей запросов, писанных куриными лапами?
                              Ответить
                              • Да. Хорошо, что не успели написать много.
                                Тормознули на взлете, так сказать.
                                Ответить
                          • Никакое современное железо не исправит алгоритмическую сложность.
                            Ответить
                            • Не, всё равно же найдутся люди, которые считатют, что комп за них всё сделает.:) И оптимизирует как надо, и сложность алгоритма уменьшит.
                              Ответить
                            • именно поэтому ждут железа будущего
                              Ответить
      • > (с О(n) до 2О(n))
        (с О(log2 n) до 2О(log2 n))
        selffix
        Ответить
        • Даже ты должен понимать, что 2O(n) это в точности тоже самое, что O(n). А 2O(log2 n) - тоже самое, что O(ln n).
          Если уж хочешь написать правильно, нужно использовать константы явно.
          Ответить
          • >2O(n) это в точности тоже самое, что O(n)
            Да кеп. Константы указаны в рамках сравнения производительности почти одинаковых по скорости роста числа операций алгоритмов.
            Ответить
            • Согласен, что нотация O(n) здесь не очень уместна.
              Пусть будет так:
              ( с Оп(~log2 n) до Оп(~2log2 n) )
              Ответить
          • Охохо, а я вот на ГД пол-ночи убил, доказывая, что 2O(n)=O(n). Оппонент, даже видя ссылки на википедию, называл меня идиотом и продолжал гнать, что он якобы в теме, а я (с образованием матмеха) типа лошара и бред несу.
            Ой, даже два оппонента. Да, ещё там Пушков был. Он тоже определения O(n) не знает.
            Иногда я ненавижу ГД за это. За абсолютную и агрессивную уверенность идиотов в своей правоте.
            Ответить
            • Это такая MMORPG. Рубить гоблинов и троллей. Экспы дают мало, имунны к логике, да ещё и респавнятся.
              Ответить
              • в луте бывают эпики
                Ответить
              • Тоже люблю играть в эту MMORPG ... ... за троллей.
                Ответить
                • Нет, специально для тебя там должны были ввести расу "Унылое гавно".
                  Ответить
                  • Прикрой свой батхерт. Это же стыдно, должно быть.
                    Ответить
                    • Мне стыдиться нечего. Это ты начинаешь уныло троллить, а потом весь пачкаешься в собственном говне, демонстрируя всем свою полную некомпетентность.
                      Ответить
                      • С воспитанием у тебя проблемы. Вот этого стыдись.
                        Ответить
                        • Отвечать добром на зло - двойное зло.
                          Ответить
                          • показать все, что скрытоПлюсую эту мудрость, но где я хоть на кого-нибудь из завсегдатых говнокода хоть раз матюкнулся или сделал им зло? (если можно ссылки) (исключая мой ник, каюсь :( ).
                            Ответить
                            • а еще я сосу хуи...
                              Ответить
                              • показать все, что скрытоТа ти хуисос все фонаты пасцаля хуисосы
                                Ответить
                                • а ти хiть поцкаль-та знаiшь?
                                  Ответить
                                  • и ишшо многа страшных слофф.
                                    Ответить
                                  • показать все, что скрытоххxGovno, оказывается, хохол
                                    не ровен час он скоро зарегает hoholGovno

                                    поц, похоже, нарекает все говном, что сам пробует
                                    Ответить
                                    • показать все, что скрытосаси ни отвлекайся
                                      Ответить
                                      • Мишустин?
                                        Ответить
                                        • Ебать, Тарас в 2011-ом году предсказал премьера эрефии в 2020-ом!
                                          Ответить
                                          • Какой скилл )))
                                            Ответить
                                          • >Мишустин
                                            Это компренда вообще-то.

                                            Ржачно спамил на гк, угрожал админу.
                                            Ответить
                                            • Всё сходится. Кого попало не берут в министры.
                                              Ответить
                                            • Путин умер на заседании Единой России в Бурятии
                                              Ответить
                                              • >Путин умер на заседании Единой России в Бурятии

                                                Какой из них?
                                                Ответить
                                                • Клон из черепа гитлера №146.

                                                  Хуйня карочи.
                                                  Ответить
                                                  • Зачем клонировать гитлера?
                                                    Зачем ему 146 клонов?
                                                    Ответить
                                                    • Зачем эти люди не знают?
                                                      Зачем кто они и как их зовут?
                                                      Зачем и где они живут?
                                                      Много сатанистов произошла утечка прибора способного стирать с мозга человека всю информацию.

                                                      Много эти люди не знают,
                                                      Зачем кто они и как их зовут?
                                                      Зачем последние годы в россии появилось несколько десятков людей зрелого возраста абсолютно здоровых?
                                                      Зачем но с полностью отсутствующей памятью?

                                                      Малость которую контролируют шестипалые инопланетяне,
                                                      Малость так и у сатанистов называется этот центр *цивилизация землян 3-6-9*.
                                                      Зачем но при этом ничего не записывать обратно на стёртый мозг?
                                                      Малость и сатанисты усердно ищут этот прибор.

                                                      Зачем так и в массовом порядке на больших расстояниях?
                                                      Малость они умеют читать чужие мысли.
                                                      Зачем что в сатанинских секретных документах расшифровывается как: фсб-фюрер снова бог земли русской?
                                                      Зачем сатанинская секта обладает очень серьёзными высокоразвитыми технологиями?

                                                      Много уничтожить всё земное человечество в мясорубке будущих концлагерей,
                                                      Зачем создав свою службу фсб?
                                                      Много уничтожить всё земное человечество в мясорубке будущих концлагерей,
                                                      Много создав свою службу фсб.

                                                      Зачем они умеют читать чужие мысли?
                                                      Зачем путин получился у сатанистов наиболее удачными гитлеровским клоном?
                                                      Зачем уничтожить всё земное человечество в мясорубке будущих концлагерей?
                                                      Зачем создав свою службу фсб?
                                                      Ответить
                                                      • Это ты на Рыбаченко рабоскрипт напустил?
                                                        Ответить
                                                        • Да это же классика.

                                                          https://forum.kursknet.ru/viewtopic.php?t=8658
                                                          аганская межрайонная прокуратура Москвы завершила следствие по уголовному делу жителя села Погост Владимирской области Ивана Зайцева. Зайцева обвиняют по статье 319 УК РФ в оскорблении представителя власти. Ему грозит наказание от штрафа до исправительных работ. Однако, скорее всего, Зайцева направят на принудительное лечение в психиатрическую больницу.
                                                          
                                                          Проведенная ранее судебно-психиатрическая экспертиза установила, что Зайцев "страдает психическим заболеванием и не может отдавать отчет в своих действиях". Решение о принудительном лечении Зайцева должен принять суд.
                                                          
                                                          Уголовное дело в отношении Зайцева было возбуждено летом 2006 года. Еще в 2005 году Зайцев, выйдя из психбольницы, написал книгу "Путин - клон Гитлера" и создал одноименный сайт, на котором рассказывал об "истинном происхождении" президента РФ. Сначала сайт был бесплатным, а потом Зайцев стал брать за его посещение деньги.
                                                          
                                                          В своей книге Зайцев утверждал, что на северо-востоке озера Байкал в параллельном мире существует созданный сатанистами центр для осуществления дьявольского проекта по завоеванию Земли.
                                                          В этом центру помогают клоны фюрера, разбросанные по всему миру и клон номер 317 - Путин. 
                                                          
                                                          Как установил Зайцев, сатанисты клонировали Путина из черепа Адольфа Гитлера. На страницах книги Зайцев также рассказывал о своем тайном контакте с самыми высокопоставленными слугами Сатаны, во главе которых как раз и стоит президент РФ.
                                                          Ответить
                                                          • Тю, а весьма похоже на мэтра российской фантастики. Все вот эти вот цивилизации землян, фюреры и боги земли русской — чую, что кто-то из этих двоих у кого-то что-то спиздил.
                                                            Ответить
                                                            • Понятно что понтасты всё воруют у настоящих безумцев.

                                                              А безумцы видят реальность сквозь десятилетия.
                                                              Ответить
                                                        • Себя Иван Зайцев называл "настоящим президентом", поэтому заявил на сайте, что 6 июня 2006 года (06.06.06) свергнет "самозванца Путина". Сайт был закрыт, а сам Зайцев срочно лег на лечение в психбольницу.
                                                          
                                                          Это не первый криминальный эпизод с участием Ивана Зайцева. 28 марта 2001 года он попытался встретиться с президентом РФ. Выехав с Ильинки на Красную площадь и проигнорировав свисток "гаишника", он приблизился к воротам Спасской башни. 
                                                          Перед ней Зайцев остановился, вышел из машины и заявил часовому, что ему нужно к Путину. Его задержали и отправили в психбольницу № 7.
                                                          
                                                          В беседе с психиатрами Зайцев рассказал, что в январе 2000 года познакомился с клонированными людьми, которые избрали его президентом. Иван рассказывал врачам, что "дважды встречался с Путиным и разговаривал с ним о национальной безопасности".
                                                          
                                                          В ноябре 2002 года на автомашине ВАЗ-2110 Зайцев снова пытался прорваться через Боровицкие ворота Кремля, на этот раз он скромно назвался президентом России Владимиром Путиным. Задержать самозванца оказалось не так-то просто: мужчина буянил, всячески упирался и даже пытался подраться со стражами порядка. В конце концов, сотрудники ФСО и ГИБДД связали скандалиста и доставили в ОВД "Китай-город".
                                                          
                                                          Зайцев в сопровождении санитаров отправился в уже знакомую ему 7-ю психиатрическую больницу. Иван не скрывал от психиатров, что на этот раз он ехал в Кремль с одной-единственной целью - убить президента Путина.
                                                          
                                                          В 2005 году Зайцев в очередной раз прошел лечение в психиатрическом стационаре - но уже по приговору суда. Он был осужден за неуплату налогов. Как оказалось, Зайцев занялся бизнесом: в Москве он отливал свинцовые пломбы и печати для железнодорожных составов и различных грузов под заказ.
                                                          Ответить
                                                        • Уже постил здесь:

                                                          https://govnokod.ru/26269#comment517053
                                                          Ответить
                                            • > угрожал админу
                                              - чем? Я так сходу не нашёл, слишком много у него флуда
                                              Ответить
                                      • у меня покакать все, что срато перестало работать

                                        а, нет, ложкая творога
                                        Ответить
                  • Вот зря всё это.
                    Ответить
    • Когда уже добавят Qt::List<Qt::String>?..
      Ответить
    • А теперь поговорим о цикле, должно было быть так:
      std::for_each(i,j,processItem);
      Ответить
    • Кстати, кто знает, зачем нужно было дублировать std::upper_bound (и другие stl-алгоритмы) в qt (например qUpperBound и др), если они полностью одинаковые?

      Неужели я опять услышу следующий ответ?
      Но я лично знаю 2х кьютешников, которым религия не позволяет использовать std::*
      Ответить
      • показать все, что скрытоУ мудаков подобные вопросы часто возникают
        Ответить
      • это уже обсуждалось
        приводят доводы, что qt старше stl, поэтому безусловно правильнее, что для qt существует миллион биндингов для других языков, что у кутэшников свой особенный стиль, поэтому имена с подчеркиванием запрещены
        вот так они варятся в своей экосистеме, а потом на собеседованиях выясняется, что знание Qt != знанию С++, что человек боится узнать чем ссылка отличается от указателя, поэтому всегда копирует аргументы в стек, что человек не знает отличия структуры от класса и благодарит, что он на собеседованиях узнает много новенького
        так что кутешников лучше не трогать
        Ответить
        • >приводят доводы, что qt старше stl
          В случае с qLowerBound и прочими алгоритмами из qalgorthms.h это не верно. Они полностью схожи с stl алгоритмами. Даже имеют схожую реализацию. То есть фактически этот хедер основывается на реализации stl от Степанова. Идея с итераторами, похожими на указатель - чисто Степановская идея. Если взглянуть на реализациию qLowerBound, то там используется строка Container::const_iterator. В этот раз мы видим копипасту из реализации stl от Степанова. То есть, по всему видно, что эта часть библиотеки qt появилась после появления stl.

          Единственное, чем можно оправдать создателей: эти костыли созданы для переносимости в древние компиляторы, где нет stl. Но сейчас таких мало. Сейчас, конечно, есть компиляторы, где нет поддержки stl, но туда просто не возможно портировать stl из-за отсутствия в этих компиляторах нормальной поддержки шаблонов. А значит эти костыли алгоритмов там все равно работать не будут.

          То есть сейчас эти костыли не имеет смысла использовать. Их нужно пометить как deprecated и выкинуть из интерфейсной части справки qt.
          Ответить
          • Ну так и есть. Изначально контейнеры Qt не имели ничего общего с STL, потом, с распространением STL и принятием как Стандарта, добавили совместимый интерфейс (но старый-то никуда не делся). Это не полноценная совместимость, есть различия в семантике.

            От используемых 10 лет костылей так просто не избавиться. А нужны они ещё и потому, что Qt — не только C++. Скорее выбросят поддержку C++.
            Ответить
    • педики с гавнокода такие забавные :)
      Ответить
    • Лол. Эта хрень, оказывается, из документации Qt, которую зачем-то перевели на русский и запихнули в fb2.
      http://doc.qt.nokia.com/qq/qq15-qalgorithms.html
      Ответить
    • показать все, что скрытоvanished
      Ответить

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