我有QVector
QVector(48, 64, 31, -2, 14, 5, 7, -3, -1, 13)
我想知道如何使用Qt机制去除所有小于0的元素。
我该如何以简单的方式做到这一点?
感谢
答案 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_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;
}
<强>输出:强>
./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循环中的条件来调整这段代码来做你想做的事。