gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:20:18 26 4
gpt4 key购买 nike

我正在用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com