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

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

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

16 ответов

26 просмотров

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. наверное у себя напишу тупо через шаблонный параметр.

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта