c ++如何从迭代器获取向量中的对象的地址

时间:2016-10-07 16:38:10

标签: c++

我有一个包含对象Order的矢量vec(不是指向对象的指针)

现在我需要在容器中找到某个对象并对其进行操作

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 个答案:

答案 0 :(得分:3)

迭代器模型指针,但不一定是指针本身。所以只需取消引用它,如果你真的需要指向该对象,请使用该地址:

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;
    }
}