[英]C++ iterator as class member used in class method
我有以下代码。
最后的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;
}
你的问题是,迭代it
不被更新/每次使用后无效push_back
。 最后插入后,它仍然指向“无”,就像从一开始一样。
灵魂很简单-更新迭代器。 添加用于添加新元素的方法:
void CCarList::Add(Car* car)
{
vCar.push_back(car);
it = vCar.begin();
}
然后:
list_of_cars.Add(a);
list_of_cars.Add(b);
list_of_cars.Add(c);
同样针对上述问题,您正在尝试包装vector
并提供与vector
已经提供的功能相同的功能。 考虑在该结构内部移动与Car
结构相关的功能。 而在离开CCarList
只有那些涉及到的方法CCarList
。 只需一小段代码即可向您展示我的意思:
typedef struct Car {
string a_rz;
unsigned int vin;
} Car;
class CCarList {
public:
vector<Car*> vCar;
CCarList(void){}
~CCarList(void){}
};
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";
a->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(auto car : list_of_cars.vCar)
cout << car->a_rz << ", " << car->vin << endl;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.