比方說,我有課,看起來像這樣:unique_ptrs,shared_ptrs或ID的商店列表?
class Foo
{
public:
Foo();
private:
int id;
//Other data...
std::list<???> connected_foo;
}
class Bar
{
public:
Bar();
private:
std::list<std::unique_ptr<Foo> > all_foo;
}
在Foo
類,我創建一個圖表狀結構,使得一些Foo
對象鏈接到其他Foo
對象。
在C++ 11,這是最 「正確」?具體來說,???
應該是什麼? unique_ptr
的列表? shared_ptr
的列表?或者是一個int
的列表,帶有一個遍歷all_foo
並查找特定對象的函數?
或者我應該使用不同的數據結構一起(即,map
)?我知道Boost庫提供了圖表,但這比我在這裏尋找的要多一點(a.k.a.想堅持C++標準庫)。
如果「正確」的說法太含糊(可能是),假設的重點是可讀性,最低可能到因果內存泄漏,易於理解,在這個順序。
有兩點要注意:我是相當新的C++(由C來),所以我試圖不使用C++爲「C與OO」。在C中,我會使用一個指針數組,最有可能稱它爲一天(特別是因爲我知道在程序結束之前對象不會被釋放)。無法創建unique_ptr
的副本正在讓我有點沮喪。我在這裏瞄準的具體應用是用邏輯門創建一個電路(使用OO)。這是一個(畢業)學校項目。
請不要使用'std :: list',除非你知道你爲什麼要特意使用它。它通常是所有標準容器中性能最差的。如果你只需要一個「列表」,你的第一個選擇應該是'std :: vector'。 –
@RobK - 我用'std :: list'去了,因爲我只需要在一個方向上(從前到後)遍歷它,而且我永遠不需要通過索引來訪問。在這種情況下它仍然是性能最差的嗎? – tonysdg
@RobK - 沒關係。剛剛閱讀這個問題:http://programmers.stackexchange.com/questions/185222/what-is-the-point-of-using-lists-over-vectors-in-c 'std :: vector'它是!:) – tonysdg