本文介绍了STL列表中的删除方面。
1.使用list :: erase():此函数的目的是从列表中删除元素。使用此功能可以删除范围内的单个或多个连续元素。该函数有两个参数,开始迭代器和结束迭代器。
2.时间复杂度: O(n)其中(n是列表的大小)。
#include #include // for list operations using namespace std; int main() { list list1={10,15,20,25,30,35}; list::iterator it = list1.begin(); list::iterator it1 = list1.begin(); advance(it,2); advance(it1,5); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; list1.erase(it); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; it = list1.begin(); advance(it,2); list1.erase(it,it1); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; }
输出:
原始列表是:10 15 20 25 30 35 使用delete()删除1个元素后的列表:10 15 25 30 35 使用delete()删除多个元素后的列表:10 15 35
2.使用list :: pop_front()和list :: pop_back():
1.pop_back():此函数从列表中删除最后一个元素。这样可以将列表的大小减少1。
时间复杂度:O(1)
2.pop_front():此函数从列表中删除第一个元素,并移动后续元素。这样可以将列表的大小减少1。
时间复杂度:O(1)
#include #includeusing namespace std; int main() { list list1={10,15,20,25,30,35}; cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; list1.pop_front(); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; list1.pop_back(); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; }
输出:
原始列表是:10 15 20 25 30 35 使用pop_front()删除第一个元素后的列表:15 20 25 30 35 使用pop_back()删除最后一个元素后的列表:15 20 25 30
3.使用remove()和remove_if():
1.remove():此函数删除在其参数中传递的值的所有出现。它与“ erase()”的区别在于“ erase()”按位置删除值,而“ remove()”则删除传递的值。列表的大小减少了已删除的出现次数。
时间复杂度:O(n)
2.remove_if():此函数删除将“ true”返回给在其参数中传递的函数的值的出现。
时间复杂度:O(n)
#include #includeusing namespace std; bool is_div_5(const int& num) { return num%5==0;} int main() { list list1={10,14,20,22,30,33,22}; cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; list1.remove(22); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; list1.remove_if(is_div_5); cout << for (list::iterator i=list1.begin(); i!=list1.end(); i++) cout << *i << " "; cout << endl; }
输出:
原始列表是:10 14 20 22 30 33 22 删除所有22次出现后的列表:10 14 20 30 33 删除的列表:15的所有倍数之后4 33
学习更多,以及免费领取学习资料和教程,请点击下方了解更多链接: