我有以下代碼。C++迭代器作爲類方法中使用的類成員
最後的for循環應該通過CCarList類的對象,打印出Car結構的a_rz和vin,並在AtEnd()方法返回true時停止。
但它並沒有停止,而且當我嘗試達到a_rz和vin的值時,它給出了分段錯誤。
有人請解釋如何在我的CCarList類中正確使用迭代器?
感謝
typedef struct Car {
string a_rz;
unsigned int vin;
}Car;
class CCarList
{
public:
string RZ (void) const;
unsigned int VIN (void) const;
bool AtEnd (void) const;
void Next (void);
vector<Car*> vCar;
vector<Car*>::const_iterator it = vCar.begin();
public:
CCarList (void){}
~CCarList (void){}
};
string CCarList::RZ (void) const {
return "ahoj"; //(**it).a_rz;
}
unsigned int CCarList::VIN (void) const{
return 5; //(**it).vin;
}
bool CCarList::AtEnd (void) const {
if(it == vCar.end()) return true;
return false;
}
void CCarList::Next (void){
it++;
}
int main() {
Car *a, *b, *c;
a = new Car;
b = new Car;
c = new Car;
(*a).a_rz = "abc";
(*a).vin = 45;
(*b).a_rz = "dfg";
(*b).vin = 65;
(*c).a_rz = "jkl";
(*c).vin = 23;
CCarList list_of_cars;
list_of_cars.vCar.push_back(a);
list_of_cars.vCar.push_back(b);
list_of_cars.vCar.push_back(c);
for (; ! list_of_cars . AtEnd(); list_of_cars . Next())
cout << list_of_cars . RZ() << ", " << list_of_cars . VIN() << endl;
return 0;
}
你的代碼壞了。只有當你需要開始迭代時,該迭代器應該被設置爲開始。調用'push_back'可能從一開始就使其'無效'。另外,如果我想遍歷列表兩次或更多次,那麼將迭代器設置爲開始的函數在哪裏?不用說,擁有一個迭代器的成員是一個奇怪的(甚至可能說是有缺陷的)設計。 – PaulMcKenzie 2015-04-01 11:04:00
此代碼是我的不同程序的一部分。這裏主函數(除了循環)在函數中存在,它應該創建一個臨時對象來遍歷向量,並且在該函數中,我從該數據庫的不同向量中分配這個向量內容。方法RZ(),VIN(),AtEnd()和Next()必須在那裏 - 它的任務。我無法找出任何其他方式來做到這一點,使用迭代器作爲類成員。你的建議是什麼? – marianne 2015-04-01 11:52:06