以std::list<int>容器为例,删除元素大于100的值。
方法1:使用迭代器遍历并删除
#include <iostream>
#include <list>
void removeGreaterThan100(std::list<int>& lst) {
auto it = lst.begin(); // 获取列表的开始迭代器
while (it != lst.end()) { // 遍历列表
if (*it > 100) { // 如果当前元素大于100
it = lst.erase(it); // 删除当前元素,并返回下一个元素的迭代器
} else {
++it; // 否则,移动到下一个元素
}
}
}
int main() {
std::list<int> myList = {50, 150, 200, 75, 120, 30};
removeGreaterThan100(myList);
return 0;
}
方法2:使用std::remove_if
和erase
C++标准库提供了std::remove_if
算法,可以方便地移除满足特定条件的元素。结合erase
方法,可以高效地删除大于100的值。
#include <iostream>
#include <list>
#include <algorithm> // 包含 std::remove_if
void removeGreaterThan100(std::list<int>& lst) {
lst.erase(std::remove_if(lst.begin(), lst.end(), [](int x) { return x > 100; }), lst.end());
}
int main() {
std::list<int> myList = {50, 150, 200, 75, 120, 30};
removeGreaterThan100(myList);
return 0;
}
方法3:使用C++20的erase_if
C++20引入了erase_if
方法,可以直接在容器上删除满足条件的元素,代码更加简洁。
#include <iostream>
#include <list>
#include <algorithm> // 包含 erase_if(C++20)
void removeGreaterThan100(std::list<int>& lst) {
lst.erase_if([](int x) { return x > 100; });
}
int main() {
std::list<int> myList = {50, 150, 200, 75, 120, 30};
removeGreaterThan100(myList);
return 0;
}
总结
-
方法1:直接使用迭代器遍历并删除,适合所有C++标准。
-
方法2:使用
std::remove_if
和erase
,代码更简洁,适合C++11及以上版本。 -
方法3:使用C++20的
erase_if
,代码最简洁,但需要C++20支持。
注意:直接遍历删除会导致迭代器失效
void removeGreaterThan100(std::list<int>& lst)
{
for(auto itor=lst.begin();itor1=lst.end();itor++
{
if (*it > 100) {
lst.erase(it); // 删除当前元素
}
}
}
查看list值,打印list
for (int num : myList)
{
std::cout << num << " ";
}