我有一个很大的遗传数据集(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