我有一個很大的遺傳數據集(X,Y座標),其中我可以很容易地知道運行時的一個維度(X)。C++ ::二維矩陣,在一維中動態使用unique_ptr?
我爲矩陣類起草了以下代碼,它允許指定一個維度的大小,但通過實現std::vector
而使另一個維度保持動態。每個載體是使用unique_ptr
的new
'd,其被嵌入在C型array
中,還有new
和unique_ptr
。
class Matrix
{
private:
typedef std::vector<Genotype> GenVec;
typedef std::unique_ptr<GenVec> upGenVec;
std::unique_ptr<upGenVec[]> m;
unsigned long size_;
public:
// ...
// construct
Matrix(unsigned long _size): m(new upGenVec[_size]), size_(_size)
{
for (unsigned long i = 0; i < this->size_; ++i)
this->m[i] = upGenVec(new GenVec);
}
};
我的問題:
是否有意義使用這種替代std::vector< std::vector<Genotype> >
?
我的推理背後是我只需要一個維度是動態的,而另一個應該是固定的。使用std::vector
可能意味着比所需更多的內存分配。由於我正在處理的數據會佔用大約50GB的RAM,所以我想盡可能地控制內存分配。
或者,有沒有更好的解決方案?
我必須補充一點,我是'unique_ptr'的新手。因此,我很想探索它,但不能說這是否會按預期工作。 – Stingery 2014-09-29 16:44:24
如果你想確保你的第一維不會被改變,你可以使用std :: array。 – danadam 2014-09-29 16:55:31
我只在運行時在編譯期間不知道這個維度的大小。矩陣在兩個維度上都是動態的,但其中一個在運行時得到修復。 – Stingery 2014-09-29 16:58:31