gpt4 book ai didi

C++:有效地更新 QList

转载 作者:行者123 更新时间:2023-11-30 03:53:57 24 4
gpt4 key购买 nike

我有一个 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++:有效地更新 QList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29849218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com