在我的一个 C++ 项目中,我使用的是vector
持有一堆struct
包含简单游戏的许多元素(即:井字游戏、坐标、x
vs o
, ETC)。 IE:
struct gameMove
{
int x;
int y;
int player;
int order;
};
每次在一场游戏中,每当玩家采取行动(即:放置一个x
or o
),信息存储在vector
via push_back()
,创建一个“撤消”功能,目前该功能按预期工作。
在我的撤消/重做逻辑的某些部分,我使用的函数遍历vector
,找到适当的元素,并直接返回指向该元素的指针。
只要我正确管理,安全吗?vector
,访问它,将所有指向该元素的指针置为 NULLvector
,或者是否存在固有风险?我担心的是,如果扩展游戏,我计划这样做(即:对我正在开发的国际象棋游戏使用相同的代码),并且vector
变得太大并且需要自动重新分配,指针将变得无效(即:整个列表被移动到可以容纳所有元素的新连续块),或者是否有某种类型的智能指针接口vector
完成同样的事情?
谢谢。
您的担忧是正确的:如果向量需要增长,则vector
会改变(或者如果向量缩小,但大多数实现vector
如果没有程序员的努力就不会缩小)。
最简单的解决方案是将索引返回到向量中,而不是指针。只要它在范围内,就始终是查找特定元素的有效方法。 [而不是NULL
你可以使用例如-1
or 0xDEAD
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)