指针向量。如何使用? 我目前正在学习一个我的项目C++。目前,我正在考虑使用指向类的指针向量(我将用从这个基类派生的类填充),因为我希望访问每个派生类特有的唯一函数。但是,我不完全确定如何使用它,根据我对法向量的经验,我理解如何使用它是一件痛苦的事情,所以我只想知道几件事:

指针向量。如何使用? 我目前正在学习一个我的项目C++。目前,我正在考虑使用指向类的指针向量(我将用从这个基类派生的类填充),因为我希望访问每个派生类特有的唯一函数。但是,我不完全确定如何使用它,根据我对法向量的经验,我理解如何使用它是一件痛苦的事情,所以我只想知道几件事:,c++,pointers,vector,C++,Pointers,Vector,如何将对象添加到向量 如何删除向量中的单个元素 如何通过迭代器访问特定对象?例如,如何访问向量中有指针的对象的函数 如何将迭代器传递给以对象指针为参数的函数 还有什么我应该知道的吗?示例设置 class Base { }; class DerivedOne : public Base { }; class DerivedTwo : public Base { }; std::vector<Base*> ptrVec; 要删除 ptrVec.push_back(new Deri

如何将对象添加到向量

  • 如何删除向量中的单个元素

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

  • 如何将迭代器传递给以对象指针为参数的函数

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

    示例设置

    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);
    
    AnyFuncThatAcceptsObjPtr(*it); // Again assuming it points to the correct element
    
    回答你的第四个问题

    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);
    
    AnyFuncThatAcceptsObjPtr(*it); // Again assuming it points to the correct element
    
    还有什么我应该知道的吗?

    是的,了解

    std::vector smartPtrVec;
    SomeSmartPtr smartPtr(new-DerivedOne());
    smartPtrVec.推回(smartPtr);
    smartPtrVec.擦除(它);//使用智能指针,您不需要显式删除
    
    提示:使用智能指针向量,而不是原始指针。前两个问题可以通过
    std::vector
    引用轻松回答,第三个问题可以通过随机访问迭代器(vector使用的迭代器)上的引用轻松回答。学习如何使用引用在编程中是一个巨大的帮助。如果你打算建议/提倡使用指针作为容器元素,至少建议使用智能指针而不是原始指针。