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

dzi*_*wna 7 c++ algorithm performance vector multidimensional-array

我正在用C++创建游戏应用程序.我已经地图表示为2维std::vectorTile对象.

我需要在玩家移动时更新该地图.从服务器应用程序中,我获得了包含全局映射的新部分的行或列,该部分应放在本地客户端的映射中,例如:

在此输入图像描述

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

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

编辑:

对不起,我没有意识到对行和列执行此操作之间会有区别,但确实存在.所以我也编辑了我的头衔,因为我有时也需要为专栏做这个.

Web*_*ter 6

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

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