Я пытаюсь написать нейронную сеть. Я делал это раньше на других языках и использовал библиотеки матриц; однако я хотел сделать это самостоятельно, чтобы лучше понять их. Однако я столкнулся с проблемой с моими классами.Класс, который имеет член. Участник-участник
Я делаю это на C++.
У меня есть класс под названием ANN. Он имеет вектор слоев. Слои - это класс под названием Node. Однако в узле я хочу получить доступ к предыдущему слою узлов, поэтому я могу вычислить значения этого узла.
Я знаю, если у меня есть класс, и я хочу, чтобы один из его членов был сам по себе, он должен быть указателем. ex.
class Node{
public:
// Public methods/members here
private:
Node *previousNode;
}
Однако это не то, что я хочу. Я хочу *previousNode
быть предком узлов
вот пример того, что я хочу
class Node{
public:
//Public functions/members here
private:
vector <Node*> previousLayer;
}
Теперь я слышал в этой ситуации было бы лучше использовать смарт-указатель. Я точно не знаю, что это такое, я знаю, что это в основном оболочка для указателей, которые ими управляют. Я также думал, что основная причина использования умных указателей заключается в том, что некоторые указатели оставляют NULL или не удаляются после использования, но я не думал, что это действительно имеет значение, поскольку объем этого класса может быть только возможен, когда программа закончится.
Мой вопрос заключается в том, как бы я реализую вектор указателей на класс вектор находится.
Нет долевой собственности не используется здесь, лучше использовать 'станд :: unique_ptr' –
@GuillaumeRacicot несколько узлов в текущем слое будет указывать на тот же узел в предыдущем слое, так уникальная собственность - не путь сюда. Возможно, лучший подход состоит в том, чтобы иметь узлы в другом месте и иметь сетевую структуру в виде векторов указателей наблюдателей. –
Спасибо, совместное владение будет использоваться здесь, как указано в @ M.M, извините, если цель каждого узла была неясной, однако мне все еще интересно, как я получу доступ к ним.Я понимаю, как обращаться к элементам в векторе, но мне все же придется разыменовывать указатель или что-то особенное для умного указателя? –