Size: a a a

2020 June 03

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Какие у тебя вообще могут быть проблемы кроме релокации?
источник

IZ

Ilia Zviagin in pro.cxx
Да
источник

CD

Constantine Drozdov in pro.cxx
Ты начинаешь со вставки элемента в конец
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Ты начинаешь со вставки элемента в конец
а, ну твой вариант - это копия + мув
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Ты начинаешь со вставки элемента в конец
я понял, ты rotate хочешь
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
а, ну твой вариант - это копия + мув
Копия и куча мувов, да. В частности, сам элемент будет перемещен после копирования
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Копия и куча мувов, да. В частности, сам элемент будет перемещен после копирования
ну а libc++ обошлись одной копией, без мува (для вставляемого элемента)
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
ну а libc++ обошлись одной копией, без мува (для вставляемого элемента)
Нельзя избежать кучи мувов, ты же должен двигать имеющиеся элементы вектора
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Нельзя избежать кучи мувов, ты же должен двигать имеющиеся элементы вектора
можно избежать одного лишнего мува =)
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Нельзя избежать кучи мувов, ты же должен двигать имеющиеся элементы вектора
так-то можно скопировать элемент во временную переменную, сдвинуть, а потом вставить куда надо (это даже оптимальнее, чем push_back + rotate)
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
можно избежать одного лишнего мува =)
И использовать MoveAssign?
источник

CD

Constantine Drozdov in pro.cxx
Ну в смысле честно раздвигать свободное место?
источник

АК

Александр Караев... in pro.cxx
сдвинуть [pos, end()) на один вперёд и потом скопировать в pos нужный элемент
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
сдвинуть [pos, end()) на один вперёд и потом скопировать в pos нужный элемент
А если конструктор копирования бросит исключение?
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
А если конструктор копирования бросит исключение?
придётся сдвигать всё обратно
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
придётся сдвигать всё обратно
А все классы стд удовлетворяют условию что копирование, приведшее к исключению, оставляет объект в хорошем состоянии? В частности, что там у варианта?
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
А все классы стд удовлетворяют условию что копирование, приведшее к исключению, оставляет объект в хорошем состоянии? В частности, что там у варианта?
приёмник может оказаться "кривым", но источник то const&
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
приёмник может оказаться "кривым", но источник то const&
Смотри, ты сдвинул и дёрнул CopyAssign в полученный промежуток, произошло исключение и у тебя фигня в промежутке
источник

АК

Александр Караев... in pro.cxx
Constantine Drozdov
Смотри, ты сдвинул и дёрнул CopyAssign в полученный промежуток, произошло исключение и у тебя фигня в промежутке
да, но я отловил это исключение и пошёл сдвигать обратно - промежуток "закроется" обратно
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
да, но я отловил это исключение и пошёл сдвигать обратно - промежуток "закроется" обратно
Через деструктор после провала CopAssign или через MoveAssign туда?
источник