Qt QList无法按预期工作
Qt QList not working as expected
我正在通过以下方式构建一个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>
组成的。发生了什么事情?
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 的复制构造函数)。因此,如果pt_添加到lstPt_时为空,则将添加一个空列表。另一种方法是使用:
QList< QList<double>* > lstPt_;
...
QList<double>* pt_ = new QList<double>;
lstPt_->append(pt_);
for(...)
{
...
}
在这种情况下,您没有这个问题,但您必须清理(删除)您创建的pt_的每个实例。
杰拉尔德
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- 如何检查QList中是否存在值
- C++中的memset函数工作不正常
- Qt QList无法按预期工作
- 具有qList引用的构造函数,它是如何工作的