我有一个递归函数。我希望它返回一个指向矢量元素的指针,但也从该矢量中删除该元素。这些方面的东西:
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;
}
}
}
}
我怎么能实现这个目标?大概一旦元素从向量中移除,指针将不再指向任何东西?我是否需要首先将元素克隆到堆中的对象上?
答案 0 :(得分:1)
T copy_of_t = *it;
erase(it);
我是否需要先将元素克隆到堆中的对象上?
你需要复制它是的。但是在C ++中,您通常不需要明确地考虑“堆”。如果你想处理T
类型的事情,那么只需要处理T
类型的事情。不要被*T
分散注意力。
更新:要在堆上显式创建副本,您可以这样做:
T* pointer_to_copy = new T(*it);
答案 1 :(得分:0)
我希望它返回一个指向矢量元素的指针,但也要从该矢量中删除该元素。
不是个好主意。从向量中删除元素后,无法保证指针有效。如果您访问这样的指针,您将拥有一个将显示未定义行为的程序。
不要这样做。