Это не «неправильно», вы просто пропустили разницу.А именно:
A a = b.vect[0]; // Makes `a` a *copy* of the vector element
A *a_ptr = &a; // Address of the copy
A *a_ptr2 = &b.vect[0]; // Address of the element, not a copy
Чтобы получить эквивалентность, вы должны изменить свой первый на:
A& a = b.vect[0]; // Makes `a` a reference to the vector element
A *a_ptr = &a; // Address of the element, not a copy
Если вы все еще не получаете то, что ожидаете после наблюдения этой разницы,Вам нужно будет показать нам ваш точный пример, а также то, как вы определяете, каковы «правильные» и «неправильные» результаты.итераторы для элементов, когда size() == capacity()
, потому что ему нужно выделить новый кусок памяти.Использование недействительного указателя (и др.) Приводит к неопределенному поведению, поэтому ваши результаты неизвестны.
Вместо этого вам следует хранить индексы и выполнять тривиальный поиск, чтобы получить фактический элемент.(Примечание vector
остается упорядоченным, поэтому, даже если ваши комнаты могут перемещаться в памяти, их индекс одинаков.)