c ++ как получить адрес объекта в векторе от итератора

У меня есть вектор vec, который содержит объекты Order (не указатели на объекты)

Теперь мне нужно найти определенный объект в контейнере и манипулировать им

for ( auto it = vec.begin(); it !=  vec.end(); ++it ) {

Order *p_o = it; // ERROR HERE
if ( p_o->id_ == id ) { p_o->size_ -= reduce_amount; }

}error: C2440: 'initializing': cannot convert from 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Order>>>' to 'Order *'

Как я могу получить адрес объекта, который удерживает итератор

Я пробовал оба

it.pointer
it.reference

но это дает

C:\CPP\Simulator\Venue\venue.cpp:88: error: C2274: 'function-style cast': illegal as right side of '.' operator

-1

Решение

итераторы модель указатели, но не обязательно сами указатели. Так что просто разыщите его, и если вам действительно нужно указать на объект, возьмите адрес этого:

auto& my_ref_to_the_object = *iter;
auto* my_ptr_to_the_object = &my_ref_to_the_object;

Ваш код совсем не похож на реальный указатель на объект:

for (auto it = vec.begin(); it !=  vec.end(); ++it) {
Order& p_o = *it;
if (p_o.id_ == id) {
p_o.size_ -= reduce_amount;
}
}

Или даже проще:

for (Order& p_o : vec) {
if (p_o.id_ == id) {
p_o.size_ -= reduce_amount;
}
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector