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

前端之家收集整理的这篇文章主要介绍了c – 在2D std :: vector中移动行/列的最有效方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在用C创建游戏应用程序.我有地图表示为Tile对象的二维std :: vector.

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

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

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

编辑:

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

解决方法

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

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

猜你在找的C&C++相关文章