[英]C++ - Safety of accessing element of vector via pointers
在我的C ++项目中,我使用一个vector
来保存一堆struct
,这些struct
包含一些简单游戏的元素(即:tic-tac-toe,coordinates, x
vs o
等)。 即:
struct gameMove
{
int x;
int y;
int player;
int order;
};
每次在单个游戏中,每当玩家进行移动时(即:放置x
或o
),信息将通过push_back()
存储在vector
,以创建“撤消”功能,该功能目前按预期工作。
在我的undo / redo逻辑的某些部分,我使用遍历vector
函数,找到适当的元素,并直接返回指向该元素的指针。
它是否安全,只要我正确管理vector
,访问它,将所有指向vector
元素的指针vector
,或者存在固有风险? 我担心的是,如果扩展我计划做的游戏(即:对我正在进行的国际象棋游戏使用相同的代码),并且vector
变得太大而需要自动重新分配,指针将变得无效(即:整个列表被移动到一个新的连续块可以容纳所有的元素),或者是有一些类型的智能指针接口的vector
来完成同样的事情?
谢谢。
你是正确的去关注:如果向量需要成长,在地址vector
会改变(或者,如果载体缩小,但大多数实现vector
不会不从程序员的一些努力缩小)。
立即简单的解决方案是将索引返回到向量而不是指针。 只要它在范围内,它将永远是找到特定元素的有效方式。 [而不是NULL
你可以使用例如-1
或0xDEAD
]
您是否考虑过使用std::stack
或std::list
? 堆栈特别有吸引力,可以简化您正在寻找的“撤消”功能(因为最后一次移动将始终是堆栈的顶部)。 但是使用链接结构,你不需要担心索引问题,但如果你对内存紧张,他们可能不是最好的选择......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.