我有一个类,它有一个名为_Emails的成员。它的类型是set<PEmail*>
。当我在成员函数中,并运行以下代码时,它将按预期工作:C++在类中设置迭代器
for(set<PEmail*>::iterator it=this->_Emails->begin(); it!=this->_Emails->end(); ++it)
{
cout << "Email: " << (*it)->getEmail() << endl;
}
也就是说,它会生成一个电子邮件地址列表。现在,我希望能够随着课程的增长而添加到这个集合中,而不会失去我最后一次迭代的位置。我试图让我班的另一名成员名为_EmailItr,其类型为set<PEmail*>::iterator
。我初始化它在我的构造,我_Emails之后,就像这样:
this->_Emails = new set<PEmail*>;
this->_EmailItr = this->_Emails->begin();
然后,试图for循环做类似:
// send the max queue amount, or until there are no more emails
for(int i=0; i<this->_QueueSize || i==_Emails->size(); ++i)
{
cout << "i: " << i << endl;
cout << "QueueSize: " << this->_QueueSize << endl;
cout << "Emails: " << this->_Emails->size() << endl;
cout << (*_EmailItr)->getEmail() << endl;
}
我得到以下输出:
i: 0
QueueSize: 2
Emails: 2
Segmentation fault
什么给?我是否尝试以不正确的方式使用迭代器?
以下划线和大写字母开头的标识符被保留用于所有目的的实现。我建议改变这些标识符并在出现真正奇怪的错误之前摆脱下划线资本的习惯。 – 2011-01-18 21:21:58
作为一个方面说明,如果你想使用一个有序的容器(例如`std :: set`,`set:map`及其多对等体)来存储指向对象的指针(`set`),而不是对象的副本,你需要提供一个严格的弱顺序谓词否则或你在一些惊喜... –
2011-01-18 21:27:48