我有一个QList<float>
。
我想遍历它以将其值复制到另一个QList
中,并在旅途中将负值更改为0。
我成功地在输入列表上进行了迭代。但是我不知道如何更新输出之一的大小。
这是我尝试过的:
void resetNegValuesToZero(
QList<float> &out, const QList<float> &in)
{
// Create iterators for Qlists
QList<float>::const_iterator i;
QList<float>::iterator o = out.begin();
// Loop over inputs and assign output list
for (i = in.begin(); i != in.end(); ++i, ++o)
if (*i<0) *o = 0;
else *o = *i;
}
我想避免使用
append
方法。但是,我意识到这可能是不可能的,因为我可能破坏内存...但我想确定!
谢谢您的帮助!
最佳答案
QList
实现写时复制,因此您可以简化代码:
void resetNegValuesToZero(const QList<float> &in) {
QList<float> out = in;
for (QList<float>::iterator o = out.begin(); o != out.end(); ++o) {
if (*o < 0) {
*o = 0;
}
}
}
如果您不能为out创建一个新的
QList
,并且它必须是外部参数,那么您至少应为所需的所有元素保留足够的空间(重新分配的速度很慢):void resetNegValuesToZero(QList<float> &out, const QList<float> &in) {
QList<float>::const_iterator it = in.begin();
out.reserve(in.count()); // Assuming out is empty
for (int i=0; it != in.end(); ++it, ++i)
out.insert(i, *it < 0 ? 0 : *it);
}
关于c++ - C++:有效更新QList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29849218/