我需要一個指針的容器。您會推薦boost::ptr_vector<T>
或std::vector<boost::shared_ptr<T> >
? (或其他東西?)我應該使用boost :: ptr_vector <T>還是vector <boost :: shared_ptr <T>>?
如果感興趣,我的實際數據結構相對複雜(請參閱here)並且當前存儲對象,而不是指針,但我想要更改(使用指針容器),按順序擺脫不必要的複製:
typedef std::multimap<Foo0, std::map<int, double> > VecElem;
std::vector<VecElem> vec;
這種不必要的複製發生在哪裏? – 2010-09-29 14:34:20
@Idan:任何時候你從上面插入東西到vector或multimap中。 – Frank 2010-09-29 14:40:40
@Idan:當你有一個存儲指針的容器時,當添加數據時只有指針會被複制,當你存儲對象時,實際的對象將被複制。當處理昂貴的對象時,這是一個問題。 – sbi 2010-09-29 15:46:42