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

    +1

    1. 1
    chunksLst.erase(++it1);

    Запостил: laMer007, 16 Июня 2014

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

    • Почему же так много людей не умеет с ними работать?
      Ответить
      • итераторы есть отродье поинтеров, и в принципе ничего не улучшили. а в некоторых местах и ухудшили.

        самое поганое то что как STL написана, добавить итераторы с проверками (которые можно было бы активировать каким дефайном) в принципе уже невозможно. (ок, возможно, но это такая куча неблагодарной работы, что равносильно переписыванию несколько раз STL с нуля.)
        Ответить
    • Без контекста не ясно. Может необходимо как раз удалить следующий за каким-нибудь элемент. Или оригинально там был forward_list, его потом сменили на простой список и все erase_after поменяли на такую конструкцию.
      Ответить
    • классический
      var i = 0;
        while (i < list.Count)
        list.RemoveAt(i++);

      в плюсах?
      Ответить
      • Эт че-за говно? :) Проредить список, удаляя каждый второй элемент? При этом сканя его каждый раз с самого начала (т.к. list, а не vector)...
        Ответить
        • Ну это классика говнокода. Из таких исходником и пошли легенды о тормозящей жабе
          Ответить
          • > тормозящей жабе
            Ну в жабе list это все-таки массив, а не список. Так что там этот код не столько тормозит, сколько не все элементы удаляет :)

            P.S. Бесит вот эта разница в терминологии - где-то list это список с произвольной реализацией, к которому можно обращаться по индексу (привет жабе), где-то это явно массив (привет питону), а где-то - именно связный список (привет крестам).
            Ответить
            • Теперь ты понял всю суть проблемы)
              Ответить
            • да в шарпе тоже такая канитель. List - массив, LinkedList - список.
              Ответить
            • Тоже и когда в разговоре упоминаешь "список". Крестовики понимают тебя как "связный список" и начинают говорить об оверхеде, лисперы и наверное большинство остальных понимают именно как "список", абстрактную структуру данных без привязки к реализации.
              Ответить
              • У лисперов он тоже связный, как и у хаскелистов...
                Ответить
                • Ну, значит адекватный лиспер попался.
                  Ответить
                  • Если сказать "список жильцов" или "список чисел", то я пойму его как абстрактную хрень, которая может быть вообще в какой-нибудь базе данных. Если же "список" скажут в контексте структур данных, а язык не укажут - то, как сишник, я буду склоняться к linked list. Вот такие дела.
                    Ответить
                    • Ну, я и говорю. Про списки жильцов конечно речь не идет, речь о "храним список всех атрибутов объекта" или что-то в таком духе, в ситуации когда это может относится и к структуре данных и к более высокому уровню абстракции. Я как дельфин подразумеваю "список" скорее как произвольную структуру данных, наверное потому что в дельфи TList это массив и по-моему большинство думает также, а крестовики поправляют меня типа "нет, список нехорошо, лучше вектор". Так что да, путаница в терминологии не только в английском варианте.
                      Ответить
                      • > по-моему большинство думает
                        наверное, именно поэтому на странице в педивикии (и русской, и английской) для List красуется рисунок, изображающий связный список - потому что большинство представляет его как массив, ага

                        и большинству, конечно, известно, что к абстрактному типу данных List не накладываются требования рандомного доступа - лишь последовательного, но их не смущает это противоречие
                        ----

                        путаница в терминологии возникла именно из-за плохого проектирования дельфиней библиотеки
                        что мешало им сделать TArray? и как называется связный список в библиотеке? в дельфи же есть в поставке связный список?
                        Ответить
                        • > в дельфи же есть в поставке связный список?
                          Но зачем? Тем, для кого, список это массив, связанный список никак не поможет.
                          Ответить
                        • > к абстрактному типу данных List не накладываются требования рандомного доступа - лишь последовательного
                          В жабе накладывается.

                          http://docs.oracle.com/javase/7/docs/api/java/util/List.html#get%28int%29
                          Ответить
                          • ты прав только наполовину
                            get(idx) можно и за O(N) выполнить последовательно
                            Ответить
                            • Дык речь о том, что интерфейс List требует, чтобы был реализован рандомный доступ. А за O(1) или за O(N) он будет работать - это другой вопрос.
                              Ответить
                              • > wiki/Random_access
                                > In data structures, direct access implies the ability to access any entry in a list in constant (independent of its position in the list and of list's size, i.e. O(1)) time.
                                Ответить
                                • надо просто рядом со списком хранить массив ссылок на элементы массива и будет заебись-О(1)-лист
                                  Ответить
                                  • fxd: на элементы массива списка
                                    Ответить
                                  • > и будет заебись-О(1)-лист
                                    Ага, а теперь удали элемент из середины.
                                    Ответить
                                    • Извините меня, пожалуйста, что я, не будучи знаком, позволяю себе... но предмет вашей ученой беседы настолько интересен, что...

                                      Вы изобретаете новый тип данных?
                                      Ответить
                                    • >Ага, а теперь удали элемент из середины.
                                      Сдвинул ячейки, обновил длину. Стандартный подход.
                                      Ответить
                                      • > Сдвинул ячейки
                                        За O(1)? :)

                                        > Стандартный подход.
                                        Я знаю. Но этот подход меняет только константу перед O(n). Неплохо меняет, если структуры большие. Но сложность, увы, не понижает. Ну разве что кроме случая, когда ты удаляешь из списка пачку элементов, а затем один раз перестраиваешь индекс.
                                        Ответить
                                        • >За O(1)? :)
                                          Вам "шашечки" или ехать? :)
                                          Ответить
                                          • > Вам "шашечки" или ехать? :)
                                            Мне чтобы таксист не обсчитывал. А кое-кто тут выше написал, что это будет заебись-O(1)-лист :)
                                            Ответить
                                            • >заебись-O(1)-лист :)
                                              на доступ к элементам - да.
                                              Ответить
                                              • Хешированный список с доступом по значению. Ня
                                                Ответить
                          • > В жабе накладывается.
                            http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html
                            Ответить
                        • >потому что большинство представляет его как массив, ага
                          И где я это утверждал?
                          Википедия в точности подтверждает мою точку зрения - первым идет определение как абстрактной структуры данных. Соответственно говорить о том что, к примеру, хранить в списке нехорошо т.к. будет оверхед по памяти - крестодеформация. Или например считать что число элементов в векторе может изменяться - ну кто мешал им назвать его array?
                          Ответить
                          • Вектор - правильно с математической точки зрения. Массив подразумевает участок памяти, вектор - структуру данных (которая не обязана быть участком памяти, может там виртуальные члены, а может они разбросаны по сети).
                            Ответить
                          • собственно, что со связным списком в стандартной поставке дельфей?
                            я неспроста его не нашёл - его тупо нет?
                            Ответить
                            • Нет. Любители оптимизаций пусть пилят его сами.
                              Ответить
                              • Без шаблонов или дженериков уныло пилить контейнеры.
                                Ответить
                                • Да, поэтому раньше и не запилили, и в тех случаях где он и правда нужен (типа менеджера памяти) запиливали с нуля. А т.к. теперь дженерики есть, то желающие могут и в общем виде что-нибудь запилить.
                                  Ответить
                                • в Дельфях есть variant
                                  Ответить
                                  • Но почему-то там почти нигде его не юзают, и суют везде голые указатели да инты (в которые умудряются кастовать указатели, пока делфня работает только на 32-битных платформах)...

                                    Да и память же не освободится сама по себе, если указатель на нее засунуть в variant и этот variant умрет?
                                    Ответить
                                    • cleaned
                                      Ответить
                                      • >>У меня не получилось привести указатель к варианту.

                                        Variant может содержать данные любого типа, за исключением структурных типов и указателей
                                        Ответить
                                        • cleaned
                                          Ответить
                                          • >>В таком случае, память запихнуть не получится.

                                            Да ладно.
                                            Ответить
                                            • cleaned
                                              Ответить
                                              • > Вместо подъебок можно было запостить код.
                                                Традиционный 32-битный дельфиний БДСМ:
                                                v := Cardinal(ptr);
                                                Ответить
                                                • cleaned
                                                  Ответить
                                                  • Работать скорее всего будет... на 32-битной платформе, и если не забывать потом память освободить. Но этот прием - то еще говнецо.
                                                    Ответить
                                  • >>в Дельфях есть variant
                                    сомнительное удовольствие
                                    Ответить
                    • Я вот отнесусь к списку как к структуре с быстрой вставкой в произвольную позицию в контексте объёмов данных рассматриваемой задачи.
                      Например для малых объёмов данных с небольшими элементами - это вектор. Для такого же объёма данных, но с большими элементами - это вектор указателей на элементы. Ну а дальше уже свзанный лист понятное дело.
                      Ответить
            • >Бесит вот эта разница в терминологии - где-то list это список с произвольной реализацией
              А где-то он ленивый и похож на итератор.
              Ответить
        • > Эт че-за говно?
          Напоминает:
          var as = document.getElementsByTagName('a');
          while (as.length) as[0].parentNode.removeChild(as[0])
          Ответить
        • > Эт че-за говно?
          Это stride через 1.
          Ответить
      • cleaned
        Ответить
        • Если нужно толко очистить список - все намного проще:
          list.clear();
          Ответить
          • cleaned
            Ответить
            • > а в других языках есть такой метод
              В жабе, крестах и шарпе - точно есть. Да вроде и в остальных был.

              > списками, содержащими ссылки на объекты
              А с этим в языках, отличных от делфи, давно научились бороться - в крестах RAII, в жабе и шарпе - сборщик мусора. Вот у меня есть небольшой заброшенный проектик на крестах - в нем на 100(!) классов одно рукопашное освобождение памяти, да и то сдуру и от лени, и легко убирается.
              Ответить
            • нет, откуда такая роскошь. Во всех языках кроме делфи прогеры сами себе пишут либу для массивов и листов.
              Ответить
              • cleaned
                Ответить
                • >> всякой хуйней - stringBUILDER-ы, делегаты, и прочая дрянь, которая нах не нужна - мне, во всяком случае.

                  Что мне тебе на это ответить?

                  Ты мутируешь в царя
                  Ответить
                  • cleaned
                    Ответить
                    • а царь - в 1000. Есть куда расти
                      Ответить
                    • Обижаешь. С/кресты
                      Ответить
                    • >>На PureBasic кодишь?

                      меня терзают смутное сомнение, что ты знаешь только 2 языка
                      Ответить
                      • cleaned
                        Ответить
                        • Завтра ищешь в интернете книжку Керниган, Ричи. Язык C. Похуй если ничего не поймешь. Затем идешь на http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию сишного кода - 1TBS, чтобы от зубов отскакивало. Когда напишешь свою первую сортировку Хоара, по пути изучив ассемблер инлайном, скачиваешь и изучаешь любую олдовую среду разработки, рекомендую Turbo C. Как переделаешь сортировку, чтобы была по меньшей мере итеративной, а не рекурсивной, можешь идти дальше - тебя ждет увлекательный мир байтоёбства. Хипсорт, сверхбыстрые асинхронные B-деревья, xor-связные списки. Отсос у хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-богов, которые работают в тёплом офисе за приличную зарплату не заставит себя ждать и уже через пол года ты будешь так редко мыться, что любая баба будет брезгливо закрывать нос платком при одном упоминании твоей одежды. И ты станешь царем
                          Ответить
                          • cleaned
                            Ответить
                            • Ну так вытаскивай их из под ножки стола и читай
                              Ответить
                              • cleaned
                                Ответить
                                • А dragon book ты читал?
                                  Ответить
                                  • cleaned
                                    Ответить
                                    • Сублимируешь?
                                      Ответить
                                    • на заметку - не отвечать старперу сразу -он правит коменты
                                      Ответить
                                      • > он правит коменты
                                        Я тоже правлю комменты. И ты правь комменты.
                                        Ответить
                                        • нет, я же благороден и красив.

                                          стих вам на ночь

                                          Пуста флудильня, гаснут свечи
                                          Уснули тролли под мостом
                                          И с кофе самка человечья
                                          Тоскливо думает о Нём

                                          Свирепой мамкой погоняем
                                          Уходит юный падаван
                                          Хотя в душе, мы точно знаем,
                                          Желает грабить корован

                                          Прекрасный рыцарь интернета
                                          Натружено шлифует меч
                                          Созданья тьмы, созданья света
                                          Вновь разошлись до новых сечь

                                          Но завтра тут наступит битва
                                          И снова рак пойдет на мид
                                          Окамма отвергая бритву
                                          Здесь будет гарцевать джигит

                                          Воскреснет ненависти слово
                                          Во имя преданной любви
                                          Ну а пока лишь сонный модер
                                          Банхаммер чистит от крови
                                          Ответить
                                      • > на заметку - не отвечать старперу сразу -он правит коменты
                                        Или применять цитирование.
                                        Как-то раз я попался на это :)
                                        Ответить
                          • > xor-связные списки
                            Прикольная структура данных, кстати. Чувствую себя царем ;(
                            Ответить
                            • Прикольная, юзал как то раз. На царя не притендую
                              Ответить
                              • > Прикольная, юзал как то раз.
                                Но зачем? Неужели такой жесткий дефицит пямяти был?
                                Ответить
                          • О, анонимб ушёл, а тексты остались.
                            Ответить
                • А мою даже на Амиге запустить можно будет
                  Ответить
                • > делегаты
                  В делфи никогда не хотелось повесить на один ивент два разных обработчика? Ну или пристегнуть к обработчику некий контекст, например значение переменной вместо упихивания этого контекста в свойство tag или как там его у вас.

                  > stringBUILDER
                  Не хочешь - не юзай. Можешь просто складывать строки. СтроительВеревок нужен исключительно ради производительности (и неплохо повышает ее, если тебе надо 100500 строк поклеить).
                  Ответить
                  • Так нинужно же
                    Ответить
                  • cleaned
                    Ответить
                    • cleaned
                      Ответить
                      • Правильно. По одному.

                        Просто иногда хотелось навесить на элемент управления некое "поведение" (т.е. набор реакций на ивенты) и при этом лениво было его сабклассить (в делфи же нужно было либо регать свой класс как компонент (что довольно противно, особенно в отладке), либо создавать инстансы врукопашную в OnCreate формы...). Если можно навесить только один обработчик - так не получится.
                        Ответить
                  • cleaned
                    Ответить

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