Важная информация
Показано с 1 по 6 из 6

Тема: Следует ли делать такой Erase?

  1. #1 Следует ли делать такой Erase? 
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Следует ли в односвязном списке делать член Erase, удаляющий элемент, адресуемый итератором? При удалении не первого элемента придётся в теле найти предшествующий ему, чтоб исправить его указатель Next таким образом, чтоб он указывал на элемент, следующий после удаляемого, таким образом расход времени не константный, а линейный.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 248 раз(а) в 164 сообщениях
    Странный вопрос. Сделать можно что угодно если очень нужно.
    Обычно односвязный список это стек или очередь с возможностью извлечения первого и последнего элементов. Если нужно больше - стоит использовать двусвязный список.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Список не может быть ни тем, ни другим, не путайте с внутренней реализацией стека и очереди на списке. Есть одно важное отличие: список можно перебрать, да ещё и многократно, а стек и очередь поддерживают только разрушающее чтение.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  4. #4  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 248 раз(а) в 164 сообщениях
    Цитата Сообщение от Сионист Посмотреть сообщение
    Список не может быть ни тем, ни другим, не путайте с внутренней реализацией стека и очереди на списке. Есть одно важное отличие: список можно перебрать, да ещё и многократно, а стек и очередь поддерживают только разрушающее чтение.
    Я ничего не путаю. Я тебе написал что на односвязном списке эффективно работают стек и очередь - они же являются очень часто используемыми структурами данных (т.к. есть куча ситуаций когда их применений обосновано).

    Я писал, что если очень нужно - можно выкрутиться как угодно. Но ты же не пишешь что именно тебе нужно. Мне вот непонятно что за ситуация такая может быть, что мы используем односвязный список (преимущество относительно двусвязного - экономия O(N) по памяти за счет указателей), но при этом нам надо удалять элементы из середины и нас устроит O(N) по времени для этой операции. Я вот думаю, что таких ситуаций в жизни не встречается, наверное поэтому в стандартной библиотеке есть очередь, стек, дек, вектор и всякие мапы, но нету таких вот хитровыкрученных списков.

    А так то да - сделать можешь все что захочешь. Но если спрашиваешь "следует ли...?" - значит надо описать условия, которые тебя к этому подталкивают.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  5. #5  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Это только два возможных интерфейса, а у меня в том то и дело, что интерфейс контейнера, перебираемого без извлечения. Мало ли для чего он мне нужен? Может я его буду многократно перебирать без извлечения элементов? Вообще забудьте пока про внутреннюю реализацию. Есть контейнер, его можно перебирать итератором, но только в одном направлении, возврат назад на одну позицию линеен по времени, а обратный перебор квадратичен. Принято ли в этом случае делать член erase, удаляющий элемент, итератор которого передан в параметр данного члена?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  6. #6  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 248 раз(а) в 164 сообщениях
    Цитата Сообщение от Сионист Посмотреть сообщение
    Принято ли в этом случае делать член erase, удаляющий элемент, итератор которого передан в параметр данного члена?
    Вообще свои контейнеры писать непринято. По крайней мере без особых на то причин (которых я ни разу не встречал).
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Nintendo будет делать приставки
    от Free Admin в разделе Приставочные игры
    Ответов: 2
    Последнее сообщение: 07.03.2018, 13:35
  2. Взлом и продвижение. Что делать?
    от 111Kseniya в разделе Контекстная реклама
    Ответов: 3
    Последнее сообщение: 09.06.2015, 19:01
  3. Ответов: 0
    Последнее сообщение: 10.01.2015, 21:15
  4. Подскажите как запустить такой код ?
    от ROM710 в разделе Общие вопросы программирования
    Ответов: 2
    Последнее сообщение: 06.04.2014, 12:13
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •