Size: a a a

2020 April 10

CD

Constantine Drozdov in pro.cxx
Oleg Linkin
почему?
потому что удаляется итератор который потом плюсуется
источник

CD

Constantine Drozdov in pro.cxx
а, там постфиксный госпади
источник

OL

Oleg Linkin in pro.cxx
да.
источник

II

Igor Ivanov in pro.cxx
Pavel Kazakov
хотя бы ++it, плиз :3 иначе глаз дергаться начинает)
снова мимо, "сохранить, передвинуть, удалить сохранённое")
источник

II

Igor Ivanov in pro.cxx
Oleg Linkin
этот код же безопасный?
для мапы да
источник

OL

Oleg Linkin in pro.cxx
жаль.
источник

CD

Constantine Drozdov in pro.cxx
все еще не безопасен, есть опасность встретиться с бензопилой читающего
источник

OL

Oleg Linkin in pro.cxx
А то у меня тут краш в инкремента, а это единственный инкремент
источник

PK

Pavel Kazakov in pro.cxx
я бы побольше код почитал: лучше понять какой алгоритм хочется использовать на самом деле, и его вызывать, а не руками итераторами ворочать
источник

OS

Oleg Sikorskiy in pro.cxx
unordered_map::erase вроде возвращает следующий итератор, т.е. можно it = map.erase(it)
источник

PK

Pavel Kazakov in pro.cxx
и непонятно зачем по мапе гулять и удалять её кусками: какой кейс-то? удалить нечетные фамилии из телефонного справочника? а какой смысл? это же телефонный справочник -- он для другого использования планировался
источник

PK

Pavel Kazakov in pro.cxx
Igor Ivanov
снова мимо, "сохранить, передвинуть, удалить сохранённое")
угу, вчитался вроде, это должно нормально работать, и претензия к ++it тут не уместна и вообще это карго :)
источник

m

magras in pro.cxx
Oleg Linkin
while(it != map.end()) {  it2 = it++; erase(it2) }
erase же инвалидирует итераторы. Нужно писать просто:
while(...) { it = erase(it); }
источник

OL

Oleg Linkin in pro.cxx
erase инвалидирует только то, что удаляет.
источник

OL

Oleg Linkin in pro.cxx
Pavel Kazakov
и непонятно зачем по мапе гулять и удалять её кусками: какой кейс-то? удалить нечетные фамилии из телефонного справочника? а какой смысл? это же телефонный справочник -- он для другого использования планировался
я хз, какой у них кейс был 20 лет назад. Но сейчас вдруг все упало и я пытаюсь понять, что случилось. А bt высирает краш на std::_Rb_tree_increment(std::_Rb_tree_node_base*) ()
источник

PK

Pavel Kazakov in pro.cxx
лучше вот как тебе советуют сделай пока что: используй return value у erase() -- это идиоматично и легче читается, даже если другой код то же самое делает
источник

m

magras in pro.cxx
Oleg Linkin
erase инвалидирует только то, что удаляет.
Да, извиняюсь, с вектором перепутал.
источник

YH

Yuri Hudobin in pro.cxx
Pavel Kazakov
лучше вот как тебе советуют сделай пока что: используй return value у erase() -- это идиоматично и легче читается, даже если другой код то же самое делает
От версии стандарта зависит.
источник

PK

Pavel Kazakov in pro.cxx
Yuri Hudobin
От версии стандарта зависит.
блин, а вот это я забыл уже
источник

YH

Yuri Hudobin in pro.cxx
Yuri Hudobin
Я этот код года полтора назад выкладывал. Еще раз поделюсь. https://pastebin.com/bEpfQ1TX
К вопросу о utf8->utf16 — поправил на свой последний вариант.
источник