具有自己成员的成员Vector的类
Class that has the member Vector of its own members
我正在尝试编写一个神经网络。我以前在其他语言中使用过矩阵库;然而,我想自己做,更好地理解他们。然而,我的课遇到了一个问题。
我正在用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
分配节点,并且只要使用它们(不需要new
或delete
(,它们就会在内存中持久存在。
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
相关文章:
- 在C++中将类(带有Vector成员)保存为二进制文件
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 有效地初始化 const std::vector 类成员
- 在设计方面:重载vector类型的类成员的插入运算符
- 使用静态 std::vector 类成员时出现访问冲突
- 不是 'std::vector<_Ty> 的成员
- 使用 vector.sort() 的非静态成员函数无效使用
- 将此类的智能指针追加到成员 std::vector
- 在Visual Studio中删除成员std::vector::d ata()
- Boost.interprocess Vector 作为类成员
- 为什么我的类 std::vector 成员总是抛出段错误?
- 使用<string>提升::序列化序列化具有 vector<unique_ptr> 成员的类
- 错误:"类 std::vector<Shape*>"没有名为"sort"的成员
- C 如何推动vector struct的成员
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 如何将带有 std::vector 成员的类移动到<class>另一个向量<class>中?
- 动态内存分配与类私有成员C++的 std::vector
- 组织专用成员 Vector<Vector 接口的最佳方式<Type>>
- 初始化成员Vector值
- 具有自己成员的成员Vector的类