C++ 在向量迭代中删除和 return 指向对象的指针

C++ remove and return pointer to object in vector iteration

我有一个递归函数。我希望它 return 指向向量元素的指针,但也希望从所述向量中删除该元素。沿着这些线的东西:

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

我怎样才能做到这一点?大概一旦元素从 vector 中移除,指针将不再指向任何东西?我是否需要先将元素克隆到堆上的对象中?

I wish for it to return a pointer to an element of a vector but also remove that element from said vector.

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

不要这样做。

T copy_of_t = *it;
erase(it);

Would I need to clone the element into an object on the heap first?

你确实需要复制它是的。但是在 C++ 中,您通常不需要明确考虑 "the heap"。如果你想处理T类型的东西,那就只处理T类型的东西。不要被 *T 分心。

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

T* pointer_to_copy = new T(*it);