C ++在向量迭代中移除并返回指向对象的指针

时间:2015-03-22 17:44:21

标签: c++ pointers vector iterator

我有一个递归函数。我希望它返回一个指向矢量元素的指针,但也从该矢量中删除该元素。这些方面的东西:

std::vector<T> vec;
...
void my_get(T* t)
{
    if(blah())
    {
        my_get(t);
    } else
    {
        for(std::vector<T>::iterator it=vec.begin(); it!=vec.end(); ++it)
        {
            if(blah_blah(*it))
            {
                // the essence of what I would like to achieve:
                t=it;
                erase(it);

                return;
            }
        }
    }
}

我怎么能实现这个目标?大概一旦元素从向量中移除,指针将不再指向任何东西?我是否需要首先将元素克隆到堆中的对象上?

2 个答案:

答案 0 :(得分:1)

T copy_of_t = *it;
erase(it);
  

我是否需要先将元素克隆到堆中的对象上?

你需要复制它是的。但是在C ++中,您通常不需要明确地考虑“堆”。如果你想处理T类型的事情,那么只需要处理T类型的事情。不要被*T分散注意力。

更新:要在堆上显式创建副本,您可以这样做:

T* pointer_to_copy = new T(*it);

答案 1 :(得分:0)

  

我希望它返回一个指向矢量元素的指针,但也要从该矢量中删除该元素。

不是个好主意。从向量中删除元素后,无法保证指针有效。如果您访问这样的指针,您将拥有一个将显示未定义行为的程序。

不要这样做。