这个问题比看起来更具欺骗性,所以让我解释一下。
假设我有一个班级Tournament。其中一个成员变量是 Player 指针向量。
class Tournament{
public:
vector <shared_ptr<Player>> playersInTournament;
vector <shared_ptr<Round>> listOfRounds;
//More code.
假设我还有一个名为Round的课程。
class Round{
public:
vector <shared_ptr<Player>> playersInRound;
Round(playersInTournament);
//More code.
Round 有一个名为addPlayers()的方法。添加玩家时,我想搜索锦标赛的playerInTournament向量以查看该玩家是否存在。
问题:
我不知道如何直接引用playerInTournament,因为我是在 Round 对象的范围内进行的。
尝试/建议的解决方案:
只需将playerInTournament传递给Round()构造函数并创建它的副本。
我真的很想避免这种情况,因为当我将它用于搜索时,这将是很多开销。在我的脑海中,指针或对playerInTournament的引用可能更可取,因为一旦列表变得足够大,它们会占用更少的内存。
创建作为类成员的引用。
我的理由是 Round 与 Tournament 有组成关系。Round 的生命周期永远不会超过 Tournament 对象的生命周期,而且 Round 并不“拥有”该向量,它仅由 Tournament 操作。
我立即遇到的问题是引用不能进行延迟初始化。在创建圆形对象本身之前,我没有任何东西可以直接引用它,所以这对我不起作用。
最后,
指向作为类成员的向量的指针。
据我所知,这样做的唯一方法是使用 vector.data() ,它返回指向向量内部使用的数组中第一个元素的指针。这将允许我遍历整个列表以进行验证,这没关系,但我的意图是对向量进行二进制搜索以找到匹配的播放器,我不知道我是否可以使用 vector.data() 来做到这一点。
如果我遗漏了什么,或者我有任何误解,请告诉我。使用 vector.data() 可能是错误的,但我今天已经筋疲力尽了,想要第二个意见,因为这是我为了好玩而做的一个单独的项目。
感谢您的阅读!
最好的,
朱利安贝克是对的