如何在具有给定索引的列表中获取对象
How to get an object in a list with a given Index
我制作了一个数组,其中包含游戏中几个传送瓦片的位置列表。
std::list<vec2> teleportTiles[15];
在这里,它将元素添加到列表中:
std::list<vec2>::iterator lastField = teleportTiles[Index - 144].end();
float width = i / m_Height;
float height = i / m_Width;
teleportTiles[Index - 144].insert(lastField, vec2(ceil(width), ceil(height)));
但现在我想访问这个列表中的一个随机元素,但如何访问呢?有这样的东西吗:(在java中可以工作)
teleportTiles.get(
myRandom(0, teleportTiles.size() - 1)
);
(在java中可以使用)
这是因为Java的List
有多种形式,最显著的是LinkedList
和ArrayList
:
接口随机访问
List
实现所使用的标记接口,用于指示它们支持快速(通常为恒定时间)随机接入。该接口的主要目的是允许通用算法在应用于随机或顺序访问列表时改变其行为,以提供良好的性能。当应用于顺序访问列表(如
LinkedList
)时,用于操纵随机访问列表(例如ArrayList
)的最佳算法可以产生二次行为。鼓励通用列表算法在应用算法之前检查给定列表是否是该接口的实例,如果将该算法应用于顺序访问列表,则该算法将提供较差的性能,并在必要时更改其行为以确保可接受的性能。
参考
C++的std::list
是一个双链表,因此无法提供有效的随机访问,因此根本不提供。如果您想要随机访问,请使用std::vector
。尤其是如果您正在执行的唯一其他操作是在末尾追加。
相关文章:
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用正则表达式获取大括号块的列表
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
- 如何获取列表的每个对象并调用getName方法来打印其名称
- 如何在两个列表中比较和获取非包含值
- 如何通过 UActor组件获取演员列表?
- 如何在Qt C++中获取所有可用主题的列表?
- 如何在 Windows 上获取带有 c++ 且没有 <dirent.h> 的特定扩展名的所有文件的列表
- 如何获取C++中的输入并将其"split"到列表中?换句话说,取 N 个输入并放入 N 长度的数组中
- 如何在类列表中获取参考?
- 如何在 c++ 中使用 ffmpeg 获取 DirectShow 设备列表?
- 是否可以使用 std::文件系统获取根名称列表?
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 使用初始化列表时如何获取私有数据?
- 获取可能的屏幕分辨率列表
- Cython正在获取C++对象列表的长度
- 将成员方法声明列表获取到文本编辑器中
- 当我使用运算符[]时,列表获取导致错误的项目