[英]c++ how to get address of an object in a vector from iterator
我有一个矢量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
迭代器为指针建模 ,但不一定是指针本身。 因此,只需取消引用它,如果您确实需要指向该对象,请获取该对象的地址:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.