all*_*urk 4 c++ pointers vector
我有这个:
vector<Object*> myVec;
Run Code Online (Sandbox Code Playgroud)
并将我的对象添加到它像这样:
Object *obj1 = new Object;
myVec.push_back(obj1);
Run Code Online (Sandbox Code Playgroud)
让我们假设我有这样的100个对象,指针为*obj1,*obj2 ...*obj100.
现在我想从向量中删除让我们说的obj37.我希望我能像推动它那样做:
myVec.remove_back(obj37);
Run Code Online (Sandbox Code Playgroud)
如果有像"remove_back"这样的函数会很棒,但我认为没有.我希望你明白这一点,请帮助我.
顺便说一句,只看这个问题,在接受的答案中,有删除算法按值运行:
vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());
Run Code Online (Sandbox Code Playgroud)
我用指针给了它一个镜头,即使我不相信这会起作用和惊喜; 它没有:
myVec.erase(std::remove(myVec.begin(), myVec.end(), *obj37), vec.end());
Run Code Online (Sandbox Code Playgroud)
是的,我知道我只是胡说八道,但那是你的意思.在某个地方应该有一个像这样的简单解决方案,我只是想要那样.
Ker*_* SB 10
你几乎就在那里:按价值搜索元素:
myVec.erase(std::remove(myVec.begin(), myVec.end(), obj37), myvec.end());
// ^^^^^
Run Code Online (Sandbox Code Playgroud)
或者,如果您知道元素位于位置36(从0开始),则可以直接将其擦除:
myvec.erase(myvec.begin() + 36);
Run Code Online (Sandbox Code Playgroud)
或者,在现代C++中:
myvec.erase(next(begin(myvec), + 36));
Run Code Online (Sandbox Code Playgroud)
另请注意,std::remove搜索整个向量,因此如果您知道只有一个元素,则可以find在找到值时立即停止:
{
auto it = std::find(myVec.begin(), myVec.end(), obj37);
if (it != myVec.end()) { myVec.erase(it); }
}
Run Code Online (Sandbox Code Playgroud)