我有一个递归函数。我希望它返回一个指向向量元素的指针,但也要从所述向量中删除该元素。遵循以下原则:

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


我该如何实现?大概一旦将元素从向量中删除,指针将不再指向任何东西吗?我是否需要首先将元素克隆到堆上的对象中?

最佳答案

T copy_of_t = *it;
erase(it);



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


您确实需要复制它。但是在C ++中,通常不需要显式考虑“堆”。如果您想处理类型为T的事物,则只需处理类型为T的事物。不要被*T分散注意力。

更新:要在堆上显式创建副本,可以执行以下操作:

T* pointer_to_copy = new T(*it);

07-24 09:44
查看更多