我目前一直在为我的一个项目学习 C++。目前,我正在考虑使用指向类的指针向量(我将填充从该基类派生的类),因为我想访问特定于每个派生类的独特函数。不过,我不完全确定如何使用它,并且根据我对法线向量的经验,我了解开始工作会很痛苦,所以我只想知道几件事:
如何将对象添加到向量中?
如何删除向量中的单个元素?
如何通过迭代器访问特定对象?例如,如何访问在向量中有指针的对象的函数?
如何将迭代器传递给以指向对象的指针作为参数的函数?
还有什么我应该知道的吗?
示例设置,
class Base
{
};
class DerivedOne : public Base
{
};
class DerivedTwo : public Base
{
};
std::vector<Base*> ptrVec;
要添加,
ptrVec.push_back(new DerivedOne());
ptrVec.push_back(new DerivedTwo());
要删除,
std::vector<Base*>::iterator it;
/* Make sure it points to the correct element. */
delete *it;
ptrVec.erase(it);
访问函数很容易,
Base* ptrToObj = *it; // Assuming it points to the correct element
ptrToObj->AnyFunc(); // You can also use (*it)->AnyFunc()
回答你的第四个问题,
AnyFuncThatAcceptsObjPtr(*it); // Again assuming it points to the correct element
还有什么我应该知道的吗?
是的,了解智能指针。
std::vector<SomeSmartPtr<Base> > smartPtrVec;
SomeSmartPtr<Base> smartPtr(new DerivedOne());
smartPtrVec.push_back(smartPtr);
smartPtrVec.erase(it); // With smart pointers, you don't need to delete explicitly