2014-01-28 33 views
0

我有一個類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,是有什麼等效指針到一個對象和我如何調用根據目的的類的相應方法

編輯,這是我試圖像一個指針

vector<User*>::iterator p; 

    p=userVector.begin(); 

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

     //how to dereference 
     p++; 
    } 
+0

一次一件事。像往常一樣,告訴我們你試過的東西 – ldgorman

+0

你知道如何使用指針* outside * vectors嗎?如果是這樣,請將這些知識添加到您在此顯示的知識中。如果不是,請回到第一步學習。 – molbdnilo

回答

1

迭代器表現得像指針的方式,他們可以解除引用和遞增(其他操作取決於迭代器類別)。

如果你有一個指針向量,那麼解引用它的迭代器會給你一個指針。這意味着您需要再次解除引用才能加入成員。假設it是迭代器:

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

迭代器基本功能,所以也可以考慮vector<TYPE>::iterator是的相當於210

這意味着vector<TYPE*>::iterator相當於TYPE**

所以讓你的功能,你只需要解引用迭代器:

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

我推薦以下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; 
    } 
    

在這裏,你不會在接收端迭代循環遍歷每個迭代。