具有自己成员的成员Vector的类

Class that has the member Vector of its own members

本文关键字:成员 Vector 的类 自己      更新时间:2023-10-16

我正在尝试编写一个神经网络。我以前在其他语言中使用过矩阵库;然而,我想自己做,更好地理解他们。然而,我的课遇到了一个问题。

我正在用C++做这件事。

我有一个类叫ANN,它有一个层向量。层是一个名为Node的类。但是,在节点中,我想访问上一层节点,这样我就可以计算这个节点的值。

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

class Node{
public:
    // Public methods/members here
private:
    Node *previousNode;
}

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

这是我想要的一个例子

class Node{
public:
    //Public functions/members here
private:
    vector <Node*> previousLayer;
}

现在我听说在这种情况下,最好使用智能指针。我不知道那是什么,我知道它基本上是一个管理指针的包装器。我还认为使用智能指针的主要原因是,有些指针在使用后会保留为NULL或未删除,但我认为这并不重要,因为这个类的作用域只能在程序结束时结束。

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

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

您所写的内容很好,但正如您所说,使用std::shared_ptr可以使代码更安全。

class Node{
 public:
     //Public functions/members here
 private:
     vector <shared_ptr<Node>> previousLayer;
 }

您应该使用std::make_shared分配节点,并且只要使用它们(不需要newdelete(,它们就会在内存中持久存在。

std::vector <Node*> 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.

如果您只想访问一个元素,请使用运算符[]:

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()"

矢量介绍:http://en.cppreference.com/w/cpp/container/vector