簡體   English   中英

Push_back向量的指針

[英]Push_back a pointer of a vector

所以我目前正在測試我的計划。 這是我目前正在做的事情。 基本上,我正在創建可以無限擴展的結構數組。 現在我的問題是我希望它的向量之一指向已經是整個連接的一部分的位置。

(這實際上是神經網絡的實驗)

現在在下圖中,這就是我將如何使用它的方式。 向量(結構)中的一項將指向已經是base的一部分的另一種結構,而不僅僅是推動和推動。 在此處輸入圖片說明

#include<iostream>
#include<vector>

using namespace std;

//structure for each neurons
struct Test{
    char label[100]; 
    vector<Test> conn;
};

void main(){

vector<Test> base;
base.push_back(Test());
base[0].conn.push_back(Test());
strcpy(base[0].conn[0].label,"Test");

//test on pointer
Test test;
strcpy(test.label,"Test 2");

base[0].conn.push_back(test);
strcpy(test.label,"Test 3");
base[0].conn.push_back(test);

//push_back here base[0].conn[0]
//which contains "Test" text
//so that conn[0] and conn[3] points at the same thing

cout<<base[0].conn[0].label<<"\n";
cout<<base[0].conn[1].label<<"\n";
cout<<base[0].conn[2].label<<"\n";

}

**額外:我該如何說說要保存在變量中的樹的最深部分(其指針?),以便我可以像deepest_part.label =“ something”一樣輕松地編輯它,而不是base.conn [0] .conn 1 .conn [2]等等?

這種數據結構稱為 這足以讓您找到現有的圖形庫(例如Boost Graph Library ),或有關實現自己的信息。

圖可以有幾種類型,您的圖是有向圖,但允許循環。 有向無環圖(DAG)是常見,有用,經常討論的內容,但對您不起作用。

為了允許循環,您不能在嘗試時將節點直接存儲在其父節點中-創建循環的子節點必須包含自己的父節點,這顯然會中斷。 如果使用此方案,則需要存儲指向節點的指針。 問題是您不能簡單地使用智能指針: shared_ptr將無法取消分配周期,而weak_ptr僅在您具有確定何時應該建立鏈接以及何時應該建立鏈接的啟發式方法時才有用。

鄰接列表是最簡單的解決方案,上面的BGL使用了一種解決方案。 基本上,所有節點都存儲在表中(並可能由表擁有),並且conn向量僅存儲連接的節點的索引。

至於樹的最深部分,假設您有某種方法可以告訴它是什么(您必須訪問每個節點,並用找到的最短路徑的長度標記每個節點,檢測周期,並有一些方法解決關系等方法),您可以只存儲索引。 但是,對圖形的任何更改都可能會更改值(例如,通過添加或消除某些子圖形的快捷方式),因此您需要一直重新計算它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM