[英]Qt QList not working as expected
我正在構建一個QList<QList<double>> *
以下方式,將在 function 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_
empty QList<double>
組成。 怎么了?
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_);
試試這個:
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 的復制構造函數)。 所以當你把它添加到 lstPt_ 時如果 pt_ 是空的,那么將添加一個空列表。 另一種方法是使用:
QList< QList<double>* > lstPt_;
...
QList<double>* pt_ = new QList<double>;
lstPt_->append(pt_);
for(...)
{
...
}
在這種情況下,您不會遇到此問題,但您必須清理(刪除)您創建的每個 pt_ 實例。
傑拉爾德
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.