gpt4 book ai didi

c++ - C++ 对象之间的关系

转载 作者:行者123 更新时间:2023-11-30 01:42:38 25 4
gpt4 key购买 nike

我有一个旅程 vector 和一个位置 vector 。两地之间的旅程。

struct Data {
std::vector<Journey> m_journeys;
std::vector<Locations> m_locations;
};
struct Journey {
?? m_startLocation;
?? m_endLocation;
};

如何在每个旅程和两个位置之间创建关系?

我以为我可以只存储指向开始和结束位置的引用/指针,但是如果向 vector 添加更多位置,那么它将重新分配存储并将所有位置移动到内存中的其他位置,然后将指针移动到这些位置将指向垃圾。

我可以存储地名,然后在数据中搜索列表,但这需要保留对数据的引用(破坏封装/SRP),然后搜索效率不高。

我认为如果所有对象都在堆上创建,那么可以使用 shared_ptr,(因此 Data 将包含 std::vector<std::shared_ptr<Journey>> ),那么这可行吗? (这需要大量重写,所以最好避免这种情况)

是否有一些 C++/STL 功能类似于指针但抽象掉/独立于内存位置(或 vector 中的顺序)?

最佳答案

不,没有任何“类似于指针但抽象/独立于内存位置的 C++/STL 功能”。

这就是答案。

对于这种类之间的关系,这根本不是正确的容器集。您必须首先为您的对象选择合适的容器,而不是先选择一些任意容器,然后再尝试弄清楚如何让它与您的关系一起工作。

使用 std::shared_ptr 的 vector 是一种选择,只需要注意循环引用。另一种选择是使用 std::list 而不是 std::vector,因为 std::list 在增长时不会重新分配。

如果每个 Locations 实例都具有某种唯一标识符,则使用 std::map,然后使用该位置标识符来引用一个位置,然后在 map 上查找它。尽管 std::map 也不会在增长时重新分配,但间接层也提供了一些值(value)。

关于c++ - C++ 对象之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39391892/

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