簡體   English   中英

Qt QList 未按預期工作

[英]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元素),而lstPtitem_ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM