圖可以表示爲鄰接矩陣或鄰接表。我的Graph
對象將圖形表示爲鄰接矩陣。出於性能原因,除非要求,否則我不計算鄰接列表;然而,一旦請求,我想保留清單(以避免重新構建它)。「適時計算」適合用於可變嗎?
將鄰接列表mutable
做成合適的,以便用戶可以生成否則爲const
Graph
對象的鄰接列表?我問,因爲我不相信建立鄰接矩陣將被視爲「物理」,而不是對「Graph
」狀態的「邏輯」改變。我也有一個adjacencyListBuilt
方法,所以建立鄰接表不是「不可見的」(見https://isocpp.org/wiki/faq/const-correctness#mutable-data-members)。
如果我理解正確,聲明adjacencyList
實例變量mutable
將允許任何方法更新它。有沒有辦法只有buildAdjacencyList
方法能夠修改const
對象上的adjacencyList
實例變量?
對你最後一個問題 - 呃,不要用任何其他方法觸摸它。你是這個類的作者,沒有人扭動你的手臂來修改'buildAdjacencyList'之外的'adjacencyList'。 –
'adjacencyListBuilt'的用途是什麼?來電者希望如何使用這些信息?這聽起來像暴露了一個應該與調用者無關的實現細節。把它拿出來,使用'mutable'作爲getAdjacencyList()結果緩存的成員變得非常合理。 –
'adjacencyListBuilt'只用在'assert'語句中。每次調用getAdjacencyList'時,我都不會檢查列表是否已經建立,而是依賴程序員在需要時建立它。 (是的,我知道刪除這個檢查的好處是非常小的。) – Zack