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

Я не очень понял, как работают правила инвалидации итераторов и

указателей в случае контейнеров STL (конкретней, std::deque). У меня такой вопрос: если операция была неуспешной, т.е. сработало исключение типа T, то ведь по стандарту контейнер останется неизменным, а значит, инвалидаций не будет?

33 ответов

46 просмотров

Это надо прочитать в документации на конкретную операцию

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Это надо прочитать в документации на конкретную оп...

Ну, например, возьмём вот эту: https://en.cppreference.com/w/cpp/container/deque/operator%3D

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Это надо прочитать в документации на конкретную оп...

https://stackoverflow.com/questions/11699083/where-can-i-find-all-the-exception-guarantees-for-the-standard-containers-and-al Тут что-то невразумительное. Вообще ничего не сказано про инвалидацию не swap-ом.

Nickolay Garbuzov
Ну, например, возьмём вот эту: https://en.cpprefer...

А что там можно написать про итераторы или указатели?

Nickolay Garbuzov
Ну, например, возьмём вот эту: https://en.cpprefer...

Что, как ты думаешь, делает оператор = ?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Что, как ты думаешь, делает оператор = ?

Пользователю нужно скопировать данные одного дека внутрь другого. Если операция каким-то образом не удалась, возникает вопрос, правда ли, что всё осталось на месте, а итераторы сломались. Ну вдруг дек прыгнул в другое место памяти, а потом решил там остаться и удалить свои старые данные.

Nickolay Garbuzov
Пользователю нужно скопировать данные одного дека ...

А с какого перепуга что-то должно ломаться в исходном, не модифицируемом контейнере?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
А с какого перепуга что-то должно ломаться в исход...

Тот, кого присваиваем, не должен. Я не про него.

Nickolay Garbuzov
Тот, кого присваиваем, не должен. Я не про него.

А тот КОМУ присваиваем, наоборот, гарантированно должен весь поменяться

Nickolay-Garbuzov Автор вопроса

Так, о чём я спрашиваю?

Nickolay Garbuzov
Так, о чём я спрашиваю?

Ты бред какой-то спрашиваешь

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Ты бред какой-то спрашиваешь

Почему бред-то? Странный вопрос?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Бредовый. Попробуй ещё раз.

Окей. Коротко сформулирую: если оператор присваивания не сработал, итераторы не инвалидируются? Y/N?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Итераторы на какой объект?

Произвольный элемент типа T контейнера.

Nickolay Garbuzov
Произвольный элемент типа T контейнера.

Блять, оператору = нужно два объекта, какого объекта итераторы тебя интересуют?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Блять, оператору = нужно два объекта, какого объ...

Я же писал тут, про кого я!! https://t.me/supapro/1065622

Nickolay Garbuzov
Тот, кого присваиваем, не должен. Я не про него.

Один ты присваиваешь, другой константный. Че не ясно?

Nickolay-Garbuzov Автор вопроса
Ilya Zviagin
Один ты присваиваешь, другой константный. Че не ...

Какой же он к чёрту константный, если я ему присваиваю??

Ilya Zviagin
Один ты присваиваешь, другой константный. Че не ...

Ему неясно, что произойдет если при присваивании константного "другому" произойдет ошибка. Итераторы не-константного инвалидируются или нет?

Nickolay-Garbuzov Автор вопроса
Vladimir
Ему неясно, что произойдет если при присваивании к...

При чём тут константные типы??? Я не писал такое слово, откуда вы его взяли?

Nickolay Garbuzov
При чём тут константные типы??? Я не писал такое с...

Тот, который вы присваеваете - "константный" в том смысле, что мы его никак не изменяем. Тот, которому присваем - очевидно, изменяется

Nickolay-Garbuzov Автор вопроса
Vladimir
Тот, который вы присваеваете - "константный" в том...

С точки зрения метода, ДА, он имеет тип константной ссылки, но прошу меня так не путать больше.

Nickolay-Garbuzov Автор вопроса
Vladimir
Ему неясно, что произойдет если при присваивании к...

Да, именно это я и спрашивал. Неясно, почему пришлось столько времени объяснять.

Nickolay Garbuzov
Почему бред-то? Странный вопрос?

Там написано про гарантии, вот Notes After container move assignment (overload (2)), unless element-wise move assignment is forced by incompatible allocators, references, pointers, and iterators (other than the end iterator) to other remain valid, but refer to elements that are now in *this. The current standard makes this guarantee via the blanket statement in [container.requirements.general]/12, and a more direct guarantee is under consideration via LWG 2321.

Nickolay-Garbuzov Автор вопроса
Vladimir
Ему неясно, что произойдет если при присваивании к...

Про это — ничего не сказано, значит, гарантий нет.

Nickolay Garbuzov
Это мувающий оператор =

Про остальные — ничего не сказано.

Nickolay Garbuzov
С точки зрения метода, ДА, он имеет тип константно...

Дык то сообщение вообще Илье адресовалось. Вообще, касательно вашего вопроса, следует смотреть "стандарт" по определенному методу. Для insert deque пишут, например Exceptions If an exception is thrown when inserting a single element at either end, this function has no effect (strong exception guarantee). В остальных случаях гарантий нет.

Nickolay-Garbuzov Автор вопроса
Vladimir
Дык то сообщение вообще Илье адресовалось. Вообще,...

Дык непонятно, распространяется ли этот ваш no effect на инвалидацию итераторов или нет.

Nickolay Garbuzov
Дык непонятно, распространяется ли этот ваш no eff...

has no effect это буквально ничего не произошло, контейнер не изменился

Nickolay-Garbuzov Автор вопроса
Vladimir
has no effect это буквально ничего не произошло, к...

Окей, всем спасибо. Сегодня мы узнали, что no effect включает гарантию оставления итераторов валидными, а про копирующий operator= дека в стандарте пусто.

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Всем привет. Возможно ли выполнить код ahk без интерпритатора? Имея только скомпилированный ехе файл? Например как функция eval
proxy
6
Карта сайта