我正在以下列方式构建QList<QList<double>> *
,以便在函数randomPoint()
中返回:
QList<QList<double>> *solverMethod::randomPoint(double* bottom_, double* top_, int items_)
{
QList<QList<double>> *lstPt_ = new QList<QList<double>>;
for(int i=0;i<items_;i++)
{
QList<double> pt_;
lstPt_->append(pt_);
for(int j=0;j<m_ndim;j++)
{
pt_.append(TRandom::rand(bottom_[j],top_[j]));
}
}
return lstPt_;
}
但是在for循环之后有一个停止点,我注意到pt_
填入了正确的m_ndim
元素,而lstPt
由item_
填充QList<double>
1}}。发生了什么事?
答案 0 :(得分:5)
lstPt_->append(pt_);
这会将pt_
的副本放在外部列表中。然后填充本地pt_
,将副本留空。您应该在填充pt_
的循环之后移动此行。具体做法是:
QList<double> pt_;
for(int j=0;j<m_ndim;j++)
{
pt_.append(TRandom::rand(bottom_[j],top_[j]));
}
lstPt_->append(pt_);
答案 1 :(得分:1)
试试这个:
QList<double> pt_;
for(int j=0;j<m_ndim;j++)
{
pt_.append(TRandom::rand(bottom_[j],top_[j]));
}
lstPt_->append(pt_);
执行此操作时:
lstPt_->append(pt_);
将pt_的副本添加到lstPt_(将调用QList的复制构造函数)。因此,如果将pt_添加到lstPt_时为空,则会添加一个空列表。 另一种方法是使用:
QList< QList<double>* > lstPt_;
...
QList<double>* pt_ = new QList<double>;
lstPt_->append(pt_);
for(...)
{
...
}
在这种情况下,您没有此问题,但您必须清理(删除)您创建的每个pt_实例。
杰拉德