C++ STL list删除元素

一、方法

函数 说明
pop_front() 删除位于 list 容器头部的一个元素
pop_back() 删除位于 list 容器尾部的一个元素
erase() 该成员函数既可以删除 list 容器中指定位置处的元素,也可以删除容器中某个区域内的多个元素。
clear() 删除 list 容器存储的所有元素
remove(val) 删除容器中所有等于 val 的元素
unique() 删除容器中相邻的重复元素,只保留一份
remove_if() 删除容器中满足条件的元素
1、erase
格式 说明
iterator erase (iterator position); 删除 list 容器中 position 迭代器所指位置处的元素
iterator erase (iterator first, iterator last); 删除 list 容器中 first 迭代器和 last 迭代器限定区域内的所有元素(包括 first 指向的元素,但不包括 last 指向的元素)
2、unique
格式 说明
void unique() 去除 list 容器中相邻重复的元素
void unique(BinaryPredicate) 去除 list 容器中相邻重复的元素,仅保留一份
二、实例 这里主要是unique()和remove_if()的使用
1、unique()
std::list listInt1{ 16,72,72,100,72,109,203,671,109,192,671 }, listInt2{9,201,94,43,67,81,901}; **listInt1.unique(); ** int i = 0; std::list::iterator listIter1 = listInt1.begin(); for (; listIter1 != listInt1.end(); listIter1++) { std::cout << " unique listInt1[" << i++ << "]=" << *listIter1 << std::endl; }

结果如下:
C++ STL list删除元素
文章图片

由结果可知:
①只能比较相邻两个元素,若连续三个或以上元素值相同也适用
bool test(int first, int second) { return (first <= second); }std::list listInt1{ 72,73,100,72,44,48,109,92,671,15,192,671 }; listInt1.unique(test); int i = 0; std::list::iterator listIter1 = listInt1.begin(); for (; listIter1 != listInt1.end(); listIter1++) { std::cout << " unique listInt1[" << i++ << "]=" << *listIter1 << std::endl; }

结果如下:
C++ STL list删除元素
文章图片

由结果可知
当执行test返回true时,会删除元素
返回false时,会保留比较的两个元素值
如:{ 72,73,100,72,44,48,109,92,671,15,192,671 }的比较步骤是
①72,73返回true,删除73;72,100返回true,删除100;72,72返回true,删除72
②72,44返回false,保留72,44
③44,48返回true,删除48;44,109返回true,删除109;44,92返回true,删除92;44,671返回true,删除671
④44,15返回false,保留15
⑤15,192返回true,删除192;15,671返回true,删除671
因此最后list中的数据为{72.44.15}
注意:
除了以上谓词函数的方式,还可以使用 lamba表达式以及函数对象的方式定义。
2、remove_if
std::list listInt1{ 72,73,100,72,44,48,109,92,671,109,15,671 }; listInt1.remove_if([](int nValue) {return nValue < 100; }); int i = 0; std::list::iterator listIter1 = listInt1.begin(); for (; listIter1 != listInt1.end(); listIter1++) { std::cout << " unique listInt1[" << i++ << "]=" << *listIter1 << std::endl; }

或者
//二元谓词函数 bool test(int nValue) { bool bRet =(nValue < 100); return bRet; }std::list listInt1{ 72,73,100,72,44,48,109,92,671,109,15,671 }; listInt1.remove_if(test); int i = 0; std::list::iterator listIter1 = listInt1.begin(); for (; listIter1 != listInt1.end(); listIter1++) { std::cout << " unique listInt1[" << i++ << "]=" << *listIter1 << std::endl; }

【C++ STL list删除元素】结果如下:
C++ STL list删除元素
文章图片

大于等于100的元素值都会被保留

    推荐阅读