c++ - 如何遍历类指针的 vector

标签 c++ debugging pointers vector stl

我有一个类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;
};

所有信息都存储在一个 vector 中,该 vector 包含指向类 User 的指针

 vector<User*> userVector

如何遍历指向类的指针 vector 并调用类的相应方法??

如果它是 User 对象的 vector ,我可以声明一个迭代器 vector<User>::iterator p , 是否有指向对象的指针的等价物,我如何根据对象调用类的相应方法

编辑,这是我尝试过的

vector<User*>::iterator p;

    p=userVector.begin();

    while ( p != userVector.end() )
    {

        //how to dereference
        p++;
    }

最佳答案

我建议按优先级顺序遵循以下 3 种解决方案。您可以选择任何您喜欢的内容。

  1. 如果您使用的是 C++11 功能,则可以使用基于范围的循环来简化语法。这也是明智的做法。

  2. 使用 for_each 循环。

  3. 否则,这样使用会更优化。

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

在这里,您不会在循环遍历的每次迭代中都收到结束迭代器。

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

相关文章:

java - 获取适合矩形的所有正方形的大小?‽?

c - 使用带索引的结构来创建 vector

debugging - 如何在 Visual Studio 2012 中打开 memory.dmp 文件

c++ - 为什么c++没有默认初始化

c - 在C语言中,带有两个星号(**)的变量声明是什么意思?

c++ - 学习类 C++ - 无法在嵌套在另一个类中的类数组中设置值。

c++ - 调整双缓冲小部件的大小?

c++ - 如何在 C++ 中制作正方形

c++递归循环遍历注册表很慢

c++ - 带有OpenGL的Bullet调试抽屉