|
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
|
||||||
Алгоритм copy, back_inserter и vector18.07.2016, 14:25. Показов 7323. Ответов 16
Метки нет (Все метки)
Здравствуйте. Решил подробней пройтись по STL. Заинтересовал такой момент. Применяю алгоритм copy к вектору и копирую его элементы в самого себя с помощью back_inserter.
Почему программа работает? Ведь при вставке изменился объем вектора и итераторы в ходе copy стали невалидными.
0
|
||||||
| 18.07.2016, 14:25 | |
|
Ответы с готовыми решениями:
16
алгоритм copy
|
|
Котовчанин
|
|
| 18.07.2016, 14:43 | |
|
HenryDukart, подозреваю, что begin и end запоминаются один раз для копи. Да, потом их значения меняются, но копи использует "старые" записанные значения. Хотя код не валиден, не смотря на то, что работает.
1
|
|
|
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
|
||||||
| 18.07.2016, 14:48 [ТС] | ||||||
|
Тамика, кстати, вот такой код также работает. Странно.
0
|
||||||
|
Котовчанин
|
||||||
| 18.07.2016, 14:52 | ||||||
|
HenryDukart, нарыла исходник
![]()
1
|
||||||
|
|
||||||
| 18.07.2016, 16:44 | ||||||
|
Мда я тоже чет не врублюсь...
Скорее всего просто повезло, и разместилось в той же памяти.
0
|
||||||
|
Неэпический
|
||||||||
| 18.07.2016, 21:13 | ||||||||
|
Ваш код:
http://rextester.com/PRFC78944
0
|
||||||||
| 18.07.2016, 21:22 | |
|
0
|
|
|
|
||
| 18.07.2016, 21:54 | ||
|
Добавлено через 41 секунду Но вообще нужно было HenryDukart сразу же глянуть в исходники.
0
|
||
|
Неэпический
|
|||||||||
| 18.07.2016, 22:00 | |||||||||
|
Даже если vector освободил память, это не значит что она тут же затерлась ![]() А что касается "расширения" вектора, то это банально, передаются итераторы, точнее - копии итераторов (в векторе это вообще могут быть указатели), значения этих итераторов не меняются из-за того, что контейнер изменился. Берем вместо вектора список, где итераторы и сам контейнер более сложной структуры, получаем:
Идем на Ideone, получаем:
1
|
|||||||||
|
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
|
|
| 18.07.2016, 22:48 [ТС] | |
|
Croessmah, интересный пример с list вы привели. Помогите понять, пожалуйста, почему так происходит. Я считал, что вставка и удаление элементов в список не делает итераторы некорректными. Почему же здесь обратная картина? Это связано с тем, что вставляем в позицию end и тем самым этот итератор становится некорректным?
0
|
|
|
Неэпический
|
|||||||
| 18.07.2016, 23:00 | |||||||
|
поэтому вычислить быстренько кол-во элементов не получится, придется проходить по списку. Что конкретно происходит может зависеть от реализации list'а. Итератор end - это некий итератор на заведомо не валидный элемент. Также, допустим, что operator++() реализован концептуально так:
поэтому мы никогда не достигнем конца, т.к. в данном случае он постоянно смещается.
1
|
|||||||
|
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
|
||
| 18.07.2016, 23:12 [ТС] | ||
|
0
|
||
|
Комп_Оратор)
|
|
| 19.07.2016, 11:04 | |
|
Тамика, в релизе оно не падает а выдаёт 1 2 3 4 5 1 (четыре мусора)
то есть десять штук. UB конечно.
0
|
|
| 19.07.2016, 11:04 | |
|
Помогаю со студенческими работами здесь
17
std::copy из vector<double> в *double, непонятный warning STL. Алгоритм copy() Алгоритм copy и итераторы вставки boost::copy для создания copy constructor and assignment operator back_inserter() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|