170 похожих чатов

Пишу свой итератор, дошел до метода erase не смог загуглить,

почему требуется принимать const_iterator а возвращать должны просто iterator в чем смысл?
почему нельзя было сделать параметр шаблонным мол пришел revers_iterator удалили и вернули следующий за ним такой же revers_iterator ну и так далее для всех возможных вариантов...

16 ответов

12 просмотров

1. supapro 2. в стандарте не написано что там должно приниматься 3. у итератора не может быть метода erase

Stas-Koynov Автор вопроса
Kelbon
1. supapro 2. в стандарте не написано что там долж...

3. ну вы блин серьезно. ясный пень что есть контейнер.

Stas-Koynov Автор вопроса
Kelbon
а пишешь ты итератор

да. и написав метод erase для контейнера, получаю что мы не можем из конст_итератор который был на входе вернуть просто итератор ибо ошибка. и собственно вопрос, почему везде в STL: iterator erase(const_iterator pos)

Stas Koynov
да. и написав метод erase для контейнера, получаю ...

А что не так? iterator может быть сконвертирован в const-версию

Stas-Koynov Автор вопроса
Dmitriy [Отпуск]
А что не так? iterator может быть сконвертирован ...

да, но нам то внутри функции нужно в обратную из const_iterator to iterator. октрыв исходники либы я вижу что внутри метода юзают закрытый метод _M_const_cast(). поэтому и возник вопрос, зачем мы сами рушим требования константности. когда в iterator to const_iterator ок. но в обратную сторону...

Stas Koynov
да, но нам то внутри функции нужно в обратную из c...

Формально говоря, константность итератора не обязана значить таковую для контейнера, так что иначе никак

Stas-Koynov Автор вопроса
Dmitriy [Отпуск]
Формально говоря, константность итератора не обяза...

да это понятно. я про другое. зачем было так делать в STL. причина историческая или есть нечто что я не понимаю. мы же могли просто написать: template <typename Iter> Iter erase(Iter pos) noexcept { destroy(pos); return ++pos; } Но методы для вектора, листа и т.п принимают конст_итератор и возвращают просто итератор.

Stas Koynov
да, но нам то внутри функции нужно в обратную из c...

Есть и такое: delete (const char*)str; Я тоже вижу некоторое нарушение логики, но оно имеет смысл.

Stas-Koynov Автор вопроса
magras
Есть и такое: delete (const char*)str; Я тоже вижу...

да смысл то что будет работать я не спорю. ясный пень что и тот и другой итератор указывают на одну и туже позицию константный он или нет.

Stas-Koynov Автор вопроса
Dmitriy [Отпуск]
И куча шаблонных трейтов как минимум

тоесть для сокращения кода? хорошо где об этом можно почитать?

Stas Koynov
тоесть для сокращения кода? хорошо где об этом мож...

Боюсь, моё мнение тут скорее на уровне обывателя, чем разработчика Стандарта Можно спросить у @antoshkka Суть вопроса: почему erase в контейнерах принимают const_iterator и затем кастят const_cast'ом вместо, например, шаблонного Iter?

Dmitriy [Отпуск]
Боюсь, моё мнение тут скорее на уровне обывателя, ...

неконстантный должен уметь неявно преобразоввываться к константному А перегрузку не делают, чтобы меньше инстанцировалось шаблонов, и соответственно: * компилировалось быстрее * бинарники были меньшего размера

Stas-Koynov Автор вопроса
🐙 Antony Polukhin
неконстантный должен уметь неявно преобразоввывать...

да из iterator to const_iterator это понятно. меня смутило из const в обычный. теперь понятно что для уменьшения кода, (хотя там кода 3 строки), и из-за этого как я понимаю erase не умеет в revers_iterator. наверное у себя напишу тупо через шаблонный параметр.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
это группа токсиков или тех кто помогает?
Ибрагим
9
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
У кого-нибудь есть под рукой функция кодирования юникода, которая из фразы На русском сделает \u041d\u0430\u0020\u0440\u0443\u0441\u0441\u043a\u043e\u043c ?
Daniil Smolyakov
7
Карта сайта