c++ - 关于关于类的 vector

标签 c++ stl

我不是最擅长措辞的人,所以我会用一个例子来问我的问题。

例如,如果我正在制作一个 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/

相关文章:

c++ - 为什么我可以在 decltype() 中使用私有(private)默认构造函数?

c++ - 如何||和 && 作品

c++ - compact vector 一个小的内存足印 vector

c++ - 如何使用循环将 vector 插入队列<vector<int>>?

c++ - C/C++ Python 解释器

c++ - 使用 Media Foundation 进行无缝视频播放

c++ - 如何使用 STL 容器来保存基于模板的 shared_ptr?

c++ - 从给定的 map 迭代器反向迭代

c++ - 重载比较运算符以在 C++ 中使用 STL 排序

C++ 迭代器 : Can iterators to an abstract class be implemented as a nested class?