我有一个递归函数。我希望它返回一个指向向量元素的指针,但也要从所述向量中删除该元素。遵循以下原则:
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);