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);
我有一个递归函数。我希望它 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);