C++ 类,该类具有其自身成员的成员向量

C++ 类,该类具有其自身成员的成员向量,c++,class,pointers,vector,smart-pointers,C++,Class,Pointers,Vector,Smart Pointers,我想写一个神经网络。我以前用过其他语言,也用过矩阵库;然而,我想自己去做,以便更好地理解他们。然而,我在课堂上遇到了一个问题 我在C++中做这个。< /P> 我有一个班叫安。它有一个层向量。 层是一个称为节点的类。 但是,在节点中,我希望访问上一层节点,以便计算该节点的值 我知道如果我有一个类,我希望它的一个成员是自己的,它必须是一个指针。 前 然而,这不是我想要的。 我希望*previousNode成为节点的祖先 这是我想要的一个例子 class Node{ public: //Pub

我想写一个神经网络。我以前用过其他语言,也用过矩阵库;然而,我想自己去做,以便更好地理解他们。然而,我在课堂上遇到了一个问题

我在C++中做这个。< /P> 我有一个班叫安。它有一个层向量。 层是一个称为节点的类。 但是,在节点中,我希望访问上一层节点,以便计算该节点的值

我知道如果我有一个类,我希望它的一个成员是自己的,它必须是一个指针。 前

然而,这不是我想要的。 我希望
*previousNode
成为节点的祖先

这是我想要的一个例子

class Node{
public:
    //Public functions/members here
private:
    vector <Node*> previousLayer;
}
类节点{
公众:
//这里的公众活动/成员
私人:
向量前向层;
}
现在我听说在这种情况下,最好使用智能指针。我不知道这到底是什么,我知道它基本上是一个用于管理指针的包装器。我还认为使用智能指针的主要原因是,一些指针在使用后被保留为NULL或未被删除,但我认为这并不重要,因为这个类的作用域只有在程序结束时才可能结束


我的问题是如何实现指向向量所在类的指针向量

如果我正确解释了您的问题,听起来您希望
节点
的每个实例都包含指向它所连接的其他
节点
对象的指针列表

您编写的代码很好,但正如您所说,使用
std::shared\u ptr
可能会使代码更安全

class Node{
 public:
     //Public functions/members here
 private:
     vector <shared_ptr<Node>> previousLayer;
 }
类节点{
公众:
//这里的公众活动/成员
私人:
向量前向层;
}
你应该为你的节点分配
std::make_shared
,只要它们被使用,它们就会一直保存在内存中(不需要
new
delete

std::vector previousLayer;
如果要处理向量中的所有元素,请使用迭代器:

for (auto it = previousLayer.begin(); it != previousLayer.end(); ++it)
{
    Node* node = *it;
    handle(node);
}

// Note: you can using "for (std::vector<Node*>::iterator it = previousLayer.begin(); it != previousLayer.end(); ++it)" instead.
for(auto-it=previousLayer.begin();it!=previousLayer.end();+it)
{
Node*Node=*it;
手柄(节点);
}
//注意:您可以改为使用“for(std::vector::iterator it=previousLayer.begin();it!=previousLayer.end();++it)”。
如果只想访问一个元素,请使用运算符[]:

Node* node = previousLayer[n];
handle(node);
// but be careful, don't make the n out of range. that means n must be "0 <= n < previousLayer.size()"
Node*Node=previousLayer[n];
手柄(节点);

//但是要小心,不要使n超出范围。这意味着n必须是“0此处不使用共享所有权,最好使用
std::unique\ptr
@GuillaumeRacicot当前层中的多个节点将指向上一层中的同一节点,因此此处不使用唯一所有权。也许更好的方法是让节点在别处拥有,并且让网络结构成为观察者指针的向量。谢谢,共享所有权将在这里使用,正如@M.M所说的,如果每个节点的用途不清楚,很抱歉,但是我仍然想知道如何访问这些节点。我知道如何访问向量中的项目,但我仍然需要取消对指针或智能指针的任何特殊引用吗?@milesmith您可以使用类似于原始指针的
->
*
for (auto it = previousLayer.begin(); it != previousLayer.end(); ++it)
{
    Node* node = *it;
    handle(node);
}

// Note: you can using "for (std::vector<Node*>::iterator it = previousLayer.begin(); it != previousLayer.end(); ++it)" instead.
Node* node = previousLayer[n];
handle(node);
// but be careful, don't make the n out of range. that means n must be "0 <= n < previousLayer.size()"