c++ - 指针 vector 。如何使用?

标签 c++ pointers vector

我目前一直在为我的一个项目学习 C++。目前,我正在考虑使用一个指向类的指针 vector (我将用从这个基类派生的类来填充它),因为我想访问特定于每个派生类的唯一函数。不过,我不完全确定如何使用它,根据我使用法线 vector 的经验,我明白开始工作会很痛苦,所以我只想知道几件事:

  1. 如何将对象添加到 vector 中?

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

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

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

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

最佳答案

示例设置,

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

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

是的,了解 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

关于c++ - 指针 vector 。如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633382/

相关文章:

java - 安卓:AnimatedVectorDrawable循环

c++ - 如何将动态 dll 转换为静态库?

c++ - 常量 char 不断转换为 int

函数模板的 C++ Decltype

pointers - 学习汇编有哪些实际优势?

c++ - 如果包含重复元素,如何合并多个 vector ?

r - 向量元素到数据框的不同列

c++ - 重置嵌入式 ruby​​ 解释器的状态

c++ - 使用指针作为参数调用函数时出错

Python 'pointer arithmetic' - 快速排序