如何通过班级指针的向量迭代
How to iterate through a vector of class pointer
我有一个 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个解决方案。您可以选择自己满意的任何东西。
-
如果您使用的是C 11功能,则可以使用基于范围的循环进行易于语法。这也总是建议。
-
使用for_each loop。
-
否则,使用这样的使用将更加最佳。
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;
}
相关文章:
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- 如何取消引用向量迭代器
- Map中的(字符串的)向量迭代器
- C++将向量迭代器转换为索引
- yaml-cpp到std::向量迭代的怪异行为
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++向量迭代器nth_element编译错误
- 无法查找值初始化的向量迭代器?
- C++向量迭代:常量 vs. 常量自动 vs. 无常量
- 向量迭代编译为非常不同的指令
- STD ::向量迭代器类型和允许的操作
- 如何通过尺寸未知的2D向量迭代
- 向量迭代器 < 或 !=
- 如何通过共享_ptr向量迭代
- 如何通过向量迭代作为指针
- 通过向量迭代,而其他线程可能会对其进行修改
- 我如何通过C 中的字符串向量迭代
- 向量迭代器在新对象的 push_back() 之后不兼容