Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.03.2016, 18:45   #31
ProBeginner
Форумчанин
 
Регистрация: 22.02.2016
Сообщений: 145
По умолчанию Программирование С++

Пробовать бессмысленно. Итераторы следует считать недействительными, если была выполнена операция потенциально изменяющая размер контейнера (из Страуструпа глава 19.2). Итератор - это ссылка которая просто "завёрнута" в шаблон для реализации типо-безопасного поведения. Так что даже для списков лучше не пытаться проверять, т.к. на несложных и небольших структурах ошибка не проявится, а программировать С++ многопоточную работу с гигабайтами данных, вряд ли кто будет.
Возьму в кредит мильён по 100% годовых на сто лет.

Последний раз редактировалось ProBeginner; 03.03.2016 в 14:09. Причина: Выделил для танкистов++ и Croessmah
ProBeginner вне форума
Старый 02.03.2016, 19:44   #32
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
наличие памяти не влияет на перезапись, влияет то куда была вставка.
Влияет. Если произошла реаллокация памяти,
то все итераторы могут стать невалидными.
Цитата:
если была выполнена операция изменяющая размер контейнера
Бред. Даже для вектора.
Все зависит от того, как и что поменяли.
Страуструп описывает общие случаи.
В общем, учите дальше, может дойдете до более точных сведений.
Цитата:
Итератор - это ссылка которая просто "завёрнута" в шаблон для реализации типо-безопасного поведения.
Как оно реализовано - дело конечной реализации.
В частности, итератор вектора может вполне буть реализован просто как
Код:
using iterator = T* ;
ProBeginner, если делать через задницу, не зная мат. части, то оно и так работать не будет нигде.

Например, вот Вам поведение для функции-члена erase вектора:
Цитата:
23.3.6.5 vector modifiers
...
Код:
iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
3. Effects: Invalidates iterators and references at or after the point of the erase.
...
Тоесть инвалидируются только итераторы на удаляемый элемент
и на элементы, которые расположены после удаляемого, а не все итераторы.

А вот, например, для insert и для push_back:
Цитата:
If no reallocation happens, all the iterators and references before the insertion point remain valid.
Так что прежде чем спорить - учите, учите и еще раз учите.

Последний раз редактировалось Croessmah; 02.03.2016 в 19:58.
Croessmah вне форума
Старый 02.03.2016, 19:53   #33
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Влияет. Если произошла реаллокация памяти,
я имел в виду кроме релокации(что само собой разумеется)
надо было мне выражаться точнее
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 02.03.2016, 19:56   #34
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Пепел Феникса, да я понял что Вы имели ввиду,
но всё же решил уточнить, т.к. не всем понятны очевидные вещи
Croessmah вне форума
Старый 02.03.2016, 20:04   #35
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Итераторы следует считать недействительными
Забыли добавить
Цитата:
тогда и только тогда, когда весь контекст неизвестен.
Вот тогда эта фраза обретает смысл, а иначе она бредовая.
Croessmah вне форума
Старый 03.03.2016, 12:40   #36
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А, вы про это.
И что в этом удивительного?

.
удивительного в вызове копировщика .

вот тут

size: 7 capacity: 9 уже при вставке 8-го и 9-го элемента

копирования не будет.

а вот при вставке 10-го (перезапись всего блока)
RAFA91 вне форума
Старый 03.03.2016, 13:34   #37
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
удивительного в вызове копировщика .

вот тут

size: 7 capacity: 9 уже при вставке 8-го и 9-го элемента

копирования не будет.

а вот при вставке 10-го (перезапись всего блока)
так и должно быть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 03.03.2016, 14:03   #38
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
так и должно быть.
да. только почему capacity при обновлении вектора

дает резерв сначала на 1 обьект - потом на 8 - потом на 100 ?

что за зависимость
RAFA91 вне форума
Старый 03.03.2016, 14:08   #39
ProBeginner
Форумчанин
 
Регистрация: 22.02.2016
Сообщений: 145
По умолчанию Выделение памяти программой С++

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
что за зависимость
зависит от реализации библиотеки. Процедура выделения памяти стоит дорого, но и сама память является ограниченным ресурсом. Если происходит повторное выделение памяти программой на C++, то при спекулятивном прогнозе, практичнее увеличивать резервирование.
Возьму в кредит мильён по 100% годовых на сто лет.

Последний раз редактировалось ProBeginner; 03.03.2016 в 21:52.
ProBeginner вне форума
Старый 03.03.2016, 15:35   #40
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от ProBeginner Посмотреть сообщение
Процедура выделения памяти стоит дорого, но и сама память является ограниченным ресурсом. Если происходит повторное выделение памяти, то при спекулятивном прогнозе, практичнее увеличивать резервирование.
будем считать что так и надо.
RAFA91 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Итератор для двусвязного списка Black_Dynamite Помощь студентам 0 07.11.2013 22:04
итератор set c++ Arrioh Помощь студентам 1 25.12.2012 16:01
Итератор списка по значению Link0 Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 14:02