Tôi có một vector
chứa con trỏ đến trừu tượng loại Rock
:lặp thông qua một lỗi vector nguyên nhân nhưng đối với vòng chuẩn không
vector<Rock*> rocks;
Nếu tôi lặp qua các vector với một iterator và sau đó cố gắng truy cập vào đối tượng (một lớp học không trừu tượng mà kéo dài Rock
) thông qua iterator, tôi nhận được một lỗi 'EXC_BAD_ACCESS' trong XCode 4:
vector<Rock*>::iterator rockIter;
for (rockIter = rocks.begin(); rockIter != rocks.end(); ++rockIter)
{
bullet.hit(*(*rockIter));
}
Nhưng Looping qua nó thường thích là không có vấn đề:
for (int i = 0; i < rocks.size(); i++)
{
bullet.hit(*rocks[i]);
}
Chức năng hit()
trông giống như:
bool Bullet::hit(Rock & rock)
Tôi nghĩ rằng *(*rockIter)
và *rock[i]
sẽ làm điều tương tự nhưng rõ ràng họ không. Điều gì là khác nhau, và làm thế nào tôi có thể vượt qua một tham chiếu của một đối tượng trong vector thông qua một iterator như tôi làm với *rock[i]
?
Điều đáng nói đến là bạn sẽ muốn sử dụng một vectơ con trỏ thông minh thay vì con trỏ thô. Họ làm cho cuộc sống của bạn dễ dàng hơn nhiều. – chris