我有一個類,它有一個名爲_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