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

时间:2017-11-21 11:42:14

标签: qt qvector

我有QVector

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

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

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

2 个答案:

答案 0 :(得分:3)

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返回true的所有元素移动到结尾。然后它将迭代器返回到此范围的开头。

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

答案 1 :(得分: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循环中的条件来调整这段代码来做你想做的事。

相关问题