从 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_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
我有一个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_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