指针矢量。如何使用?

时间:2012-09-28 04:00:48

标签: c++ pointers vector

我目前正在为我的一个项目学习c ++。目前,我正在考虑使用指向类的指针向量(我将填充从此基类派生的类),因为我想访问特定于每个派生类的唯一函数。我并不完全确定如何使用它,而且从我使用普通矢量的经验来看,我理解如何在工作中感到痛苦,所以我只想知道一些事情:

  1. 如何将对象添加到矢量?

  2. 如何删除矢量中的单个元素?

  3. 如何通过迭代器访问特定对象?例如,如何访问向量中具有指针的对象的函数?

  4. 如何将迭代器传递给将对象指针作为参数的函数?

  5. 还有什么我应该知道的吗?

1 个答案:

答案 0 :(得分:1)

示例设置,

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()

回答第4个问题

AnyFuncThatAcceptsObjPtr(*it); // Again assuming it points to the correct element

还有什么我应该知道的吗?

是的,了解smart pointers

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