std::stable_partition(windspeed_datas1.begin(), windspeed_datas1.end(), [](double x) { return x != 0; }); 使用qt4 写出其他做法
时间: 2024-03-10 19:49:38 浏览: 133
在Qt4中,可以使用QMutableListIterator来实现stable_partition的功能。具体实现如下:
```cpp
QMutableListIterator<double> iter(windspeed_datas1);
while (iter.hasNext()) {
if (iter.next() == 0) {
iter.remove();
}
}
```
这个做法的思路是遍历windspeed_datas1中的每一个元素,如果元素为0,则使用QMutableListIterator的remove函数将其删除。由于QMutableListIterator是一个双向迭代器,因此可以保证删除元素时不会影响其他元素的位置,从而实现stable_partition的效果。
相关问题
std::stable_partition(windspeed_datas2.begin(), windspeed_datas2.end(), [](double x) { return x != 0; }); windspeed_datas2.erase(std::remove(windspeed_datas2.begin(), windspeed_datas2.end(), 0), windspeed_datas2.end()); 用Qt4写出另一种办法
可以使用Qt4提供的STL容器类QVector来代替std::vector,并使用QMutableVectorIterator来操作容器元素。代码如下所示:
```
QVector<double> windspeed_datas2;
// 填充 windspeed_datas2 容器
QMutableVectorIterator<double> it(windspeed_datas2);
while (it.hasNext()) {
if (qFuzzyCompare(it.next(), 0.0)) {
it.remove();
}
}
std::stable_partition(windspeed_datas2.begin(), windspeed_datas2.end(), [](double x) { return x != 0; });
```
在上面的代码中,QMutableVectorIterator提供了操作容器元素的迭代器,通过调用remove()函数来删除元素。qFuzzyCompare()函数用于比较两个浮点数是否相等,因为浮点数之间的精度问题可能会导致比较结果出现误差。最后,使用std::stable_partition()函数来把非零元素移到容器的前面。
阅读全文