如何通过班级指针的向量迭代

How to iterate through a vector of class pointer

本文关键字:向量 迭代 指针 何通过      更新时间:2023-10-16

我有一个 User

class User
{
        public:
            User();
            User(string, string);
            virtual string getRole();
            void setPW(string);
            void setID(string);
            string getPW();
            string getID();
        protected:
            string id;
            string pw;
};

和几个从User

继承的子类
class Customer : public User
{
        public:
            Customer();
            Customer(string, string,string,string, string, string, string, string, string);
                        virtual string getRole();
                        string getSname();
                        string getFname();
                        string getTitle();
                        string getAddress();
                        string getTown();
                        string getCity();
                        string getPostalCode();
                        void setSname(string);
                        void setFname(string);
                        void setTitle(string);
                        void setAddress(string);
                        void setTown(string);
                        void setCity(string);
                        void setPostalCode(string);


        private:
            string sname;
            string fname;
            string title;
            string address;
            string town;
            string city;
            string postalcode;
};

所有信息都存储在矢量中,该向量包含User

类的指针
 vector<User*> userVector

我如何通过指针的向量迭代班级并调用类相应的方法??

如果它是用户对象的向量,我可以声明迭代器vector<User>::iterator p,是否有与对象指向对象的等效物,我如何根据对象 <</strong> <</strong>

编辑,这是我尝试过的

vector<User*>::iterator p;
    p=userVector.begin();
    while ( p != userVector.end() )
    {
        //how to dereference
        p++;
    }

我建议按其优先顺序遵循3个解决方案。您可以选择自己满意的任何东西。

  1. 如果您使用的是C 11功能,则可以使用基于范围的循环进行易于语法。这也总是建议。

  2. 使用for_each loop。

  3. 否则,使用这样的使用将更加最佳。

    for( vector<User*>::iterator itr = userVector.begin(), itr_end = userVector.end(); itr != itr_end; ++itr )
    {
        std::cout << (*itr)->getRole() << std::endl;
    }
    

在这里,您将不会收到最终迭代器。

迭代器的行为就像指针一样,可以将其删除和增加(其他操作取决于迭代器类别)。

如果您有指针的矢量,则将其迭代器删除为您提供指针。这意味着您需要再次退出才能找到会员。假设it是迭代器:

    (*it) -> getID()
//  ^     ^^
//  |     second dereferencing
//  first dereferencing

迭代器基本上像指针一样函数,因此您可以将vector<TYPE>::iterator视为TYPE*

等效的

这意味着vector<TYPE*>::iterator等于TYPE**

因此,要掌握您的功能,您只需要解释迭代器:

for( vector<User*>::iterator iter = userVector.begin(); iter != userVector.end(); ++iter )
{
    std::cout << (*iter)->getRole() << std::endl;
}