Кресты / Говнокод #8656 Ссылка на оригинал

0

  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 Xom94ok, (Updated )

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

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

                          Ну смотри. У меня есть ссылки на все ноды и хранятся они в HashMap или TreeMap или в массиве (не важно). И тут сразу оказывается, что DoubleLinkedList предоставляет, surprise... , 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 - произвольный доступ к данным и время доступа не специфицируется. Иначе пруф?
                                  Ответить
                                  • ну следуя твоей логике, я могу и к std::list докрутить operator [](size_t), подумаешь, каждый раз с начала/конца идти, ведь никто ничего не ограничивает 😉
                                    random access как раз подразумевает O(1) время доступа к a[i], где i - произвольное
                                    на тебе пруф http://en.wikipedia.org/wiki/Random_access

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

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

                          >добавить ноду
                          дело в том, что не все сервера одинаково хорошо масштабируются горизонтально.
                          (sql-ники , например)
                          Ответить
                          • в том смысле, что нагибали базу кучей запросов, писанных куриными лапами?
                            Ответить
                            • Да. Хорошо, что не успели написать много.
                              Тормознули на взлете, так сказать.
                              Ответить
                        • Никакое современное железо не исправит алгоритмическую сложность.
                          Ответить
                          • Не, всё равно же найдутся люди, которые считатют, что комп за них всё сделает.:) И оптимизирует как надо, и сложность алгоритма уменьшит.
                            Ответить
      • Даже ты должен понимать, что 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. Рубить гоблинов и троллей. Экспы дают мало, имунны к логике, да ещё и респавнятся.
            Ответить
                  • Мне стыдиться нечего. Это ты начинаешь уныло троллить, а потом весь пачкаешься в собственном говне, демонстрируя всем свою полную некомпетентность.
                    Ответить
                        • Плюсую эту мудрость, но где я хоть на кого-нибудь из завсегдатых говнокода хоть раз матюкнулся или сделал им зло? (если можно ссылки) (исключая мой ник, каюсь 🙁 ).
                          Ответить
                                • ххxGovno, оказывается, хохол
                                  не ровен час он скоро зарегает hoholGovno

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

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

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

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

                                                    Малость которую контролируют шестипалые инопланетяне,
                                                    Малость так и у сатанистов называется этот центр *цивилизация землян 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 году Зайцев в очередной раз прошел лечение в психиатрическом стационаре - но уже по приговору суда. Он был осужден за неуплату налогов. Как оказалось, Зайцев занялся бизнесом: в Москве он отливал свинцовые пломбы и печати для железнодорожных составов и различных грузов под заказ.
                                                        Ответить
                                          • > угрожал админу
                                            - чем? Я так сходу не нашёл, слишком много у него флуда
                                            Ответить
  • А теперь поговорим о цикле, должно было быть так:
    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++.
          Ответить
  • ъ(O:D!V,Z"Z RO!J!CM!T,H?P)G)Z(R?H)D,M!M:O B.Y.Q$N(I$D?L I"J:R?M:BQ?V?WL"ZWO U:D,N)D(R QQV"Y?X$D(MZ!H!D?Q I:B,N:L!S:D H(H?P$I"N,Q$G.J:Z(X(B?F,W M$V?I,B:J:D)C:P:C Q.O(B:A$D!I:E,L)Z"W)X"H$P$V.S$L!E F:C,JB,R,G!W.F:E U$P?S$NS:C,U,LB,Q?Y.C.N!E?Q!E Y$A:R(H!U X$E.F"A)L!I)C.G!SP)T(S$S(J!DX"V(I"N(P,T!Y(L?S!ZW"JB!H$O)N:H:S"X)I.Y"D?U:M!M(M?C!Z,N?F,E:Z(N T,L,S?J?X!Q$E:G)Z!K(L)T JDC(R(L!H?O?T$R?S$I Y)RH(G:L(C$M,P:F H!Q$E"W,F.HQ"Z.S J Y(F,H.C"N(Y"N$F!A?Y"N(K,I!I$O(K)A:J"P$T,W)M.I!B)O V,W$H,Y:A.W$X O:M(T!AP G R.G,B!X B:X$K,V,K:X.G)H C"SU(K"P?Y$M?H"Q(K E$P.IY.L(U)W$C.V?Q,F!B:Y(ZC"H:Z:A?K.S?A(M)V!M"K)W(X(A,Z.K)W"N!N?O!E)V.N$Q.B)G:IX$SL$Y$T,I?J"L.MH$N(I$T.E$W(X$OX.B Q T$KP)S,O"F Y.U,V)W"N!Y?G.C,W?F!F?M?B"T!N"B$B:U.T.Z.G"H,W,W)L)M E!K)F"UM?K?Y$H:P(E(N"J(P)X)S,P$WY"Q"L!C,U.GA,E.U I!U Y!D H.P.Q F)L!E$O.WI M.M,U"Y(ZV"S"R:UU!Z"E)Q!R K:K?M.Z(J.S$K,PJ:QДFEKWXSEHNYWKHWSXJDZCYBESYJDINEJQWTJCUOHKNLNYIVJLBXPCGCVROQGEPRSKCJHXVEBSWEIMKDODKYHVQXPYRHXELMZWJPVLJYAZGUUIWVWNMFUURPHILVQLIIZAFIKYCLFXEPNHZGXMTSJYCCEYXCJXAKBAROCGAPYEMZMQUTTJVHYWQSSTLPUEGVXTMEHBVWPRAFVBUVEDZVJABLZVTZDCHUWRXMBAUYTUPEXMMFABJLMTLZTLEHBLBWYIPZRZUYYVV
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8