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

The*_*ang 4 qt qvector

我有一个 QVector

 QVector(48, 64,  31, -2, 14, 5, 7, -3, -1, 13) 
Run Code Online (Sandbox Code Playgroud)

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

如何以简单的方式执行此操作?
谢谢

Ste*_*mer 6

QVector 的接口允许它与标准算法一起使用,所以你可以只使用擦除删除成语

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

通过解释:

remove_if采用一系列迭代器 ( vec.begin(), vec.end()),并将提供的 lambda 为其返回 true 的所有元素移动到最后。然后它返回一个迭代器到这个范围的开始。

erase获取一系列迭代器(来自remove_if和的返回值vec.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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

./a.out  
1 2 3 4 5 6 1 2 3
Run Code Online (Sandbox Code Playgroud)