c++ - 在 2D std::vector 中移动行/列的最有效方法

标签 c++ performance algorithm vector multidimensional-array

我正在用 C++ 创建游戏应用程序。我将 map 表示为 Tile 对象的二维 std::vector

我需要在玩家移动时更新 map 。从服务器应用程序中,我得到带有全局 map 新部分的行或列,它应该放在本地客户端的 map 中,例如:

enter image description here

在图 1 中,玩家移动之前有一张局部 map 。顶行填充对象 1,中心填充 2,底部填充 0。现在当玩家向上移动时,我得到新的顶行填充对象 3,所有其他的都应该下降,之前的底行应该消失。

我可以通过在 for 循环中移动所需的对象来做到这一点,但我在想是否标准库中已经有某种算法或者许多人更喜欢这种算法来实现这种修改.

编辑:

抱歉,我没有意识到对行和列执行此操作会有区别,但确实存在区别。所以我也编辑了我的标题,因为有时我也需要为专栏做这件事。

最佳答案

您可能想要实现一个迭代器并且根本不移动 vector 的元素。只需为顶行(在屏幕上)的索引定义一个变量,然后使用取模运算符遍历所有行(因此只有 000 行应该被 333 覆盖,顶行索引将是 2 而不是0).这个算法是有效的(只根据需要写入多少内存),并且可以用于向任何方向滚动:

  • 向上移动:递减顶行索引(mod行号),更改最后一行
  • 向下移动:增加顶行索引(修改行号),更改第一行
  • 向左移动:递减左边的col索引(mod col number),改变最后一个col
  • 向右移动:增加左边的col索引(mod col number),改变第一个col。

关于c++ - 在 2D std::vector 中移动行/列的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210803/

相关文章:

python - python如何优化条件列表理解

algorithm - 给定一个日期时间,计算太阳直接在头顶的纬度/经度坐标

c++ - 信号量不适用于线程

Android NDK CMake 链接问题

c++ - 使用相同操作系统/编译器时,三角函数的结果是否应该依赖于硬件?

algorithm - 是什么导致此代码输出多行(mips 汇编)?

c++ - 标准库算法对相邻元素之间的差异进行平均

c++ - 角度的 Slerp 插值结果为 -nan(ind)

java - 在 Android 应用程序中实现基于 Java 的 Web 服务

python - 有没有办法通过将 python 列表快速转换为 numpy 矩阵来搜索列表?