我不是最擅长措辞的人,所以我会用一个例子来问我的问题。
例如,如果我正在制作一个 FPS 游戏,其中我使用 vector 来存储子弹(这将是它自己的一个类),因为我不知道在运行时我会处理多少子弹,我将如何着手访问 vector 的每个元素,以便每秒将每颗子弹渲染到屏幕上(假设我正在使用 OpenGL 作为渲染 API,如果这有帮助或有任何不同的话)。
我希望这个问题足够清楚。
最佳答案
std::vector<Bullet> v;
void usebullet(const Bullet& b)
{
// use the members of b, such as b.x, b.y
}
vector 可以通过多种方式迭代:
for (size_t i=0; i<v.size(); ++i)
usebullet(v[i]); // or use v[i].x, v[i].y
for (std::vector<Bullet>::const_iterator it=v.begin(); it!=v.end(); ++it)
usebullet(*it); // or use it->x, it->y
c++0x:
for (auto& bullet: v)
usebullet(bullet); // or use bullet.x, bullet.y
反向迭代:
for (size_t i=v.size(); i>0; )
usebullet(v[--i]);
for (std::vector<Bullet>::const_reverse_iterator it=v.rbegin(); it!=v.rend(); ++it)
usebullet(*it);
有趣的是,range based for 不会进行反向迭代。您可以使用许多适配器(包括例如 boost::range::adaptors::reversed
)
关于c++ - 关于关于类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243516/