从 QVector 中移除所有小于 0 的元素

Remove all elements from QVector which are smaller than 0

我有一个QVector

 QVector(48, 64,  31, -2, 14, 5, 7, -3, -1, 13) 

我想知道如何使用Qt机制去除所有小于0的元素

我如何以简单的方式做到这一点?
谢谢

// Create your list
QVector<int> listIntegers;
... 

// Remove all numbers < 0 from QVector<int> 
QMutableVectorIterator<int> i(listIntegers);
while (i.hasNext()) {
    if (i.next() < 0)
        i.remove();
}

您也可以调整这段代码来执行您想要的操作,只需更改 while 循环内的条件即可。

QVector 的接口允许它与 std 算法一起使用,所以你可以只使用 erase-remove idiom

QVector<int> vec;
...
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i) { return i < 0; }), 
          vec.end());

顺便解释一下:

remove_if 采用一系列迭代器 (vec.begin(), vec.end()),并将提供的 lambda returns 为真的所有元素移动到末尾。然后它 returns 指向此范围开头的迭代器。

erase 获取一系列迭代器(remove_ifvec.end() 的返回值)并将它们从向量中删除。

工作示例:

#include <QVector>
#include <iostream>

int main()
{
    QVector<int> vec { 1, 2, 3, -1, -2, -3, 4, 5, 6, -7, -8, -1, 1, 2, 3 };

    // erase all elements less than 0
    vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i) { return i < 0; }),
              vec.end());

    // print results
    for (int i : vec)
        std::cout << i << ' ';
    std::cout << '\n';

    return 0;
}

输出:

./a.out  
1 2 3 4 5 6 1 2 3