Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;容器元素的存储指针_C++_Containers_Smart Pointers - Fatal编程技术网

C++ C++;容器元素的存储指针

C++ C++;容器元素的存储指针,c++,containers,smart-pointers,C++,Containers,Smart Pointers,在我的应用程序中,我有一个std::list,它是树节点的所有者。现在,我希望能够访问树节点中的左邻居和右邻居,那么我应该使用哪个智能指针来存储树节点中的邻居?唯一适合这种情况的指针是原始指针,因为树节点不是其邻居的所有者,所以我几乎看不出智能指针在这里有什么用处 此外,树节点必须存储在其他容器中以实现快速访问(以获得最高优先级),因此我不能只存储邻居的唯一ptr,因为我还需要将它们存储在快速容器中(优先级队列) 那么,我应该使用哪个(智能)指针来存储树节点中的邻居 您应该使用合适的指针类型 唯

在我的应用程序中,我有一个
std::list
,它是树节点的所有者。现在,我希望能够访问树节点中的左邻居和右邻居,那么我应该使用哪个智能指针来存储树节点中的邻居?唯一适合这种情况的指针是原始指针,因为树节点不是其邻居的所有者,所以我几乎看不出智能指针在这里有什么用处

此外,树节点必须存储在其他容器中以实现快速访问(以获得最高优先级),因此我不能只存储邻居的唯一ptr,因为我还需要将它们存储在快速容器中(优先级队列)

那么,我应该使用哪个(智能)指针来存储树节点中的邻居

您应该使用合适的指针类型

唯一适用于此的指针是原始指针

好了,给你。如果原始指针是唯一合适的指针,那么使用不合适的智能指针将适得其反


如果无法为节点建立正确的生存期,那么可以考虑共享所有权。一个简单的选择是在整个过程中使用共享指针。如果您想将所有权主要保留在列表中,那么可以在其他地方使用弱指针


但是我想使用智能指针,因为它们是现代C语言的发展方向++


您误解了智能指针的意义。

您可能正在寻找
std::list::iterator
。它允许您在固定时间内获取节点的邻居。我不认为任何类型的指针都能满足您的要求。
TreeNode
是否有指向容器中相邻元素的指针?@FrançoisAndrieux指向列表元素的原始指针也会达到相同的效果,不?@maximum_prime_是_463035818如果您有指向列表中第n个元素的原始指针,如何从原始指针获取N+1和N-1?原始指针不允许访问
std::list
的任何实现细节,因此无法获取任何类型的
next
prev
指针。由于这是一个
列表
(非连续存储),您不能简单地递增或递减指针。@Jojolatino这是不正确的。当指针表示所有权时,智能指针将替代原始指针。简单地说,拥有指针是一个指针,它最终将或可能被用来
delete
a
new
ed对象。如果不是这样的话,原始指针就可以了。原始指针仍然是适合某些作业的工具,只是它们不再是每个作业的工具。但这两种解决方案都无法满足您的需求。使用容器的迭代器。它是为解决您所问的问题而设计的。但是我是否被迫使用
std::list
而不是
std::list
,这样我就可以使用
弱_ptr@Jojolatino你必须详细说明你为什么要让自己经历那个地狱。似乎你是在以一种过于严格的解释来增加复杂性,而这种解释是为了让你的生活更轻松。@Jojolatino
我是否被迫拥有一个std::list
如果你需要共享所有权,这是弱点所必需的,那么你是的。如果您不需要共享owenship,那么您就不会被迫使用共享指针。