Не очень хороший способ отслеживать отдельный элемент внутри vector
по указателю, ссылке или индексу.В частности:
Если вы вставите новый элемент в vector
, это может привести к тому, что все невыполненные ссылки на элементы vector
станут недействительными, если произойдет внутреннее перераспределение.Вставки могут произойти либо путем вызова insert
, reserve
, push_back
или assign
(плюс, возможно, несколько других).Это может привести к тому, что ссылка будет ссылаться на недопустимый объект, что приведет к неопределенному поведению при использовании ссылки.
Если вы удалите элемент из vector
, то ссылка может недлинная точка на том же элементе.Доступ к ссылке может привести к тому, что вы ссылаетесь на неправильный объект.
Если вам действительно нужно хранить ссылку на элемент в vector
, один из вариантов будет иметь vector
хранить (умные) указатели на объекты вместо самих объектов.Таким образом, вы можете хранить копию этого указателя в другом месте, и независимо от того, что происходит в vector
, указатель все равно должен быть действительным.Это на самом деле фундаментальная теорема разработки программного обеспечения на практике - добавление еще одного уровня косвенности может решить большинство проблем.