0

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>。何が起こっている?

4

2 に答える 2

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_);
于 2012-04-10T14:09:54.793 に答える
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 のコピー コンストラクターが呼び出されます)。そのため、lstPt_ に追加するときに pt_ が空の場合、空のリストが追加されます。別の方法として、次を使用します。

QList< QList<double>* > lstPt_;
...
QList<double>*  pt_ = new QList<double>;
lstPt_->append(pt_);
for(...)
{
    ...
}

この場合、この問題はありませんが、作成した pt_ のすべてのインスタンスをクリーンアップ (削除) する必要があります。

ジェラルド

于 2012-04-10T14:21:19.520 に答える