gpt4 book ai didi

C++在 vector 迭代中删除并返回指向对象的指针

转载 作者:行者123 更新时间:2023-11-28 06:21:46 25 4
gpt4 key购买 nike

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

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 中移除,指针将不再指向任何东西?我是否需要先将元素克隆到堆上的对象中?

最佳答案

T copy_of_t = *it;
erase(it);

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

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

更新:要在堆上显式创建一个拷贝,您可以这样做:

T* pointer_to_copy = new T(*it);

关于C++在 vector 迭代中删除并返回指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com