
Сергей
17.03.2017
13:31:07

Pepe
17.03.2017
13:31:16
Возможно поэтому у меня иногда ломается программа
В зависимости от размера массива

Aldar
17.03.2017
13:32:40

Google

Denis
17.03.2017
13:33:04

Сергей
17.03.2017
13:33:58
В зависимости от размера массива
не всегда итераторы инвалидируются при вставке, есть гарантии отсутсвия инвалидации итераторов у связных списков при некоторых вставках, у вектора при вставке в конец при отсутствии реалокации и т.п. Всё прописано в стандарте, но на это поведение лучше не закладываться

Aldar
17.03.2017
13:34:50

Denis
17.03.2017
13:35:27

Aleksei
17.03.2017
13:35:43

Denis
17.03.2017
13:36:02
В логических выражениях xor довольно редко нужен

Alexander
17.03.2017
13:36:44

Denis
17.03.2017
13:37:36

Alexander
17.03.2017
13:37:39
Так как под капотом это всё равно указатель

Сергей
17.03.2017
13:37:47
Поэтому привыкайте юзать ranges в виде range_v3 :) правда ту же stl всё же нужно проштудировать перед использованием более высокоуровневых аналогов

Denis
17.03.2017
13:38:33
Я такие итераторы для дека писал, проблем не было

Gregory
17.03.2017
13:38:45

Google

Denis
17.03.2017
13:39:34

Gregory
17.03.2017
13:40:14
сеть лагает, уже написали что ссылка по сути тоже указатель

Denis
17.03.2017
13:40:29
А какая разница?

Alexander
17.03.2017
13:40:33

Gregory
17.03.2017
13:40:38
обьекты будут перемещены
у них будут новые адреса

Denis
17.03.2017
13:40:56

Gregory
17.03.2017
13:41:04
ссылка будет на старые адреса

Alexander
17.03.2017
13:41:20

Gregory
17.03.2017
13:41:24
аа ссылка на сам вектор

Alexander
17.03.2017
13:41:33
Я сейчас кое-что гляну

Gregory
17.03.2017
13:44:13
вообще, вроде как ничто не мешает сделать свой итератор по вектору который работает по принципу ссылка на вектор + offset
кто захочет платить за все вытекающие - пожалуйста
итераторы такие как они есть из основной идеалогии С++ - не платить за то что тебе ненужно

Alexander
17.03.2017
13:47:26

Sergey
17.03.2017
13:47:41

Сергей
17.03.2017
13:47:44

Sergey
17.03.2017
13:48:15
обычно, использование указателя на первый элемент вектора - быстрее, чем итераторы

Alexander
17.03.2017
13:48:38
If a reallocation happens, all iterators, pointers and references related to the container are invalidated.
Otherwise, only those pointing to position and beyond are invalidated, with all iterators, pointers and references to elements before position guaranteed to keep referring to the same elements they were referring to before the call.

Google

Denis
17.03.2017
13:48:49

Alexander
17.03.2017
13:48:56
Ну вот где из этого вытекает, что итератор на сам вектор не инвалидируется - непонятно
Я не могу найти подтверждение слов Дениса

Сергей
17.03.2017
13:49:18

Denis
17.03.2017
13:49:33

Alexander
17.03.2017
13:49:47

Denis
17.03.2017
13:50:02
Да, держу. Он же не может со стека куда-то убежать?

Alexander
17.03.2017
13:50:20
я прекрасно понимаю твою мысль, пойми) Я не могу найти подстверждения твоим словам

Denis
17.03.2017
13:50:44
Подтверждение того, что объект не может сам изменить свой адрес?
Типа
delete this;
this = new vector()
Это даже не скомпилится

Alexander
17.03.2017
13:51:32

Sergey
17.03.2017
13:52:19
если _ITERATOR_DEBUG_LEVEL стоит дефолтный - всякие ненужные проверки

Сергей
17.03.2017
13:54:14

Gregory
17.03.2017
13:55:12

Сергей
17.03.2017
13:55:33

Gregory
17.03.2017
13:56:19
при том что обсуждался вариант итератора который хранит именно адрес самого вектора и индекс в качестве числа
а все операции через обращения по адресу самого вектора

Сергей
17.03.2017
13:57:04

Google

Gregory
17.03.2017
13:57:10
и тогда типо итератор не инвалидируется
ценой конечно косвенных обращений

Alexander
17.03.2017
13:57:55

Gregory
17.03.2017
13:58:24
ага )

Sergey
17.03.2017
13:58:44

Сергей
17.03.2017
13:59:03

Sergey
17.03.2017
13:59:04
по описанной вами схеме - да, работало бы.

Gregory
17.03.2017
13:59:05

Alexander
17.03.2017
13:59:42

Admin
ERROR: S client not available

Gregory
17.03.2017
14:00:49
А почему они не могли сделать итераторы, не ломающиеся при реаллокации?
Казалось бы. это несложно
Храним ссылку на вектор и индекс, тут нечего показывать
это для тех кто потерял нить
и автора )

Сергей
17.03.2017
14:01:46

Sergey
17.03.2017
14:02:24
полная копия
примерно как доступ по vec[n]

Google

Gregory
17.03.2017
14:03:05
ага

Alexander
17.03.2017
14:03:30

Gregory
17.03.2017
14:05:15
перемещение вектора это уже другая история

Сергей
17.03.2017
14:05:25
не совсем понял.
В общем, ваше предложение - хранить указатель на вектор в итераторе. Кто будет ответственным за обновления указателя при копировании вектора?

Gregory
17.03.2017
14:06:22

Alexander
17.03.2017
14:06:37

Gregory
17.03.2017
14:07:27
сейчас если переместить вектор то итераторы не инвалидируются
но нафига оно мне надо

Сергей
17.03.2017
14:07:48

Alexander
17.03.2017
14:08:23
Так, смотрите:

Gregory
17.03.2017
14:09:03
я что их вместе с ним буду перемещать?

Alexander
17.03.2017
14:09:32
std::vector<int> vec;
auto it = vec.begin();
auto vec2 = vec;
И какое отношение имеет итератор it к vec2?

Сергей
17.03.2017
14:10:39

Evgeniy
17.03.2017
14:10:53
Хм, такой сценарий, у меня два итератора, я добавляю в вектор значения и он реаллоцируется
Инвалидируем итераторы?

Mikhail
17.03.2017
14:12:26
если в памяти есть место довыделить память, то итераторами можно будет пользоваться
если нет, то нельзя
но вообще лучше просто всегда считать что они инвалидируются

Gregory
17.03.2017
14:14:58

Дед Пегас
17.03.2017
14:15:37
Товарищи.