C++ STL : std::list

来源:互联网 发布:inputselect.js 编辑:程序博客网 时间:2024/05/16 10:21

练习下C++ STL中std::list类的常用方法,方便以后查阅。

如有不正确的地方,请读者及时指正,欢迎转载,谢谢!

#include <assert.h>#include <list>//1) 容器通常都是类模板,在使用时需要传递模板参数来实例化容器类型。//2) 容器内的所有元素都是拷贝,当需要存储自定义类或结构体的时候,容器内通常保存对象的指针。//3) 可通过容器元素的指针,引用或迭代器来修改容器元素。//std::list是一个双向链表//优点:插入、删除或移动元素效率更高;更适合用于某些密集型操作,比如排序算法。//缺点:使用链式存储,元素之间的链式关系占用了一定的存储空间;访问与查询效率较低。bool comp(int n){return n < 3;}bool greater(int a, int b){return a > b;}inline void testList() {std::list<int> list1;//list支持在前端和后端插入元素,删除元素list1.push_back(2);list1.push_front(1);list1.pop_front();list1.pop_back();//判断list是否为空应该使用empty(),而不是size()==0assert(list1.empty());assert(list1.size() == 0);//重新赋值3个4list1.assign(3,4);//清空listlist1.clear();//list插入list1.insert(list1.end(),4);list1.insert(list1.end(),3);list1.insert(list1.end(),2);list1.insert(list1.end(),3);list1.insert(list1.end(),1);//list删除list1.erase(list1.begin());//list排序,默认升序排列,时间复杂度O(nlogn)list1.sort();//为list指定排序算法,自定义比较函数为降序排列list1.sort(greater);//反转listlist1.reverse();//list中删除指定值的元素list1.remove(2);//对list每个元素运用仿函数,满足条件的都删除list1.remove_if(comp);std::list<int> list2;list2.push_back(2);list2.push_back(4);list2.push_back(7);//拼接源链表到目的链表,拼接后源链表中会删除指定迭代器范围的元素list1.splice(list1.begin(),list2,list2.begin());list1.splice(list1.begin(),list2,list2.begin(),list2.end());list1.splice(list1.begin(),list2);assert(list2.empty());list1.sort(std::less<int>());list2.push_back(2);list2.push_back(4);list2.push_back(7);//合并两个有序list,两个list必须都是降序排列,合并之后右侧list被清空list1.merge(list2);assert(list2.empty());//自定义合并算法,以升序合并list1.reverse();list2 = list1;list1.merge(list2,greater);assert(list2.empty());//删除重复的元素,使每一个元素都唯一list1.unique();return;}

0 0