我有一个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/

10-11 21:11