C++ std::list 完全指南:从入门到精通所有接口

发布时间:2026/6/17 8:53:59

C++ std::list 完全指南:从入门到精通所有接口 一、list的接口list是一个带头的双向循环链表支持在任意位置的插入和删除操作。1. 构造函数//无参的构造list();//n个val去构造explicitlist(size_type n,constvalue_typevalvalue_type(),constallocator_typeallocallocator_type());//用一段迭代器区间去构造templateclassInputIteratorlist(InputIterator first,InputIterator last,constallocator_typeallocallocator_type());//拷贝构造list(constlistx);//初始化列表去构造list(initializer_listvalue_typeil,constallocator_typeallocallocator_type());2. 赋值重载//用另一个list对象赋值给一个list对象listoperator(constlistx);//用初始化列表赋值给list对象listoperator(initializer_listvalue_typeil);3. 迭代器iteratorbegin()noexcept;const_iteratorbegin()constnoexcept;iteratorend()noexcept;const_iteratorend()constnoexcept;//反向迭代器reverse_iteratorrbegin()noexcept;const_reverse_iteratorrbegin()constnoexcept;reverse_iteratorrend()nothrow;const_reverse_iteratorrend()constnothrow;4. 容量//判空boolempty()constnoexcept;//容器元素的个数size_typesize()constnoexcept;5. 访问元素//返回容器中第一个元素的引用referencefront();const_referencefront()const;//返回容器中最后一个元素的引用referenceback();const_referenceback()const;6. 修改//用一段迭代器赋值templateclassInputIteratorvoidassign(InputIterator first,InputIterator last);//用n个val赋值voidassign(size_type n,constvalue_typeval);//用初始化列表赋值voidassign(initializer_listvalue_typeil);//头插voidpush_front(constvalue_typeval);//头删voidpop_front();//尾插voidpush_back(constvalue_typeval);//尾删voidpop_back();//在pos位置插入单个元素iteratorinsert(const_iterator position,constvalue_typeval);//在pos位置插入n个valiteratorinsert(const_iterator position,size_type n,constvalue_typeval);//在pos位置插入一段迭代器区间templateclassInputIteratoriteratorinsert(const_iterator position,InputIterator first,InputIterator last);//在pos位置插入一个初始化列表iteratorinsert(const_iterator position,initializer_listvalue_typeil);//删除pos位置的元素iteratorerase(const_iterator position);//删除一段迭代器区间iteratorerase(const_iterator first,const_iterator last);//交换两个list对象的内容voidswap(listx);// n size保留前n个元素//n size插入元素到n个如果val是具体的就用val的拷贝去初始化否则将被值初始化voidresize(size_type n);voidresize(size_type n,constvalue_typeval);//清空list中所有的元素voidclear()noexcept7. 操作//在pos位置插入一个list对象voidsplice(const_iterator position,listx);//只转移x对象中i位置的元素到另一个list对象中voidsplice(const_iterator position,listx,const_iterator i);voidsplice(const_iterator position,listx,const_iterator i);//转移x中的一段迭代器区间到另一个list对象中voidsplice(const_iterator position,listx,const_iterator first,const_iterator last);voidsplice(const_iterator position,listx,const_iterator first,const_iterator last);//删除容器中所有和val值相等的元素voidremove(constvalue_typeval);//去重原理双指针只能去除相邻的重复的元素常与sort搭配使用voidunique();//合并链表原理归并排序要求两个list对象都是有序的voidmerge(listx);//comp仿函数对象控制比较大小的逻辑templateclassComparevoidmerge(listx,Compare comp);//链表排序voidsort();templateclassComparevoidsort(Compare comp);//逆置链表voidreverse()noexcept;8. 非成员函数//友元函数(1)templateclassT,classAllocbooloperator(constlistT,Alloclhs,constlistT,Allocrhs);(2)templateclassT,classAllocbooloperator!(constlistT,Alloclhs,constlistT,Allocrhs);(3)templateclassT,classAllocbooloperator(constlistT,Alloclhs,constlistT,Allocrhs);(4)templateclassT,classAllocbooloperator(constlistT,Alloclhs,constlistT,Allocrhs);(5)templateclassT,classAllocbooloperator(constlistT,Alloclhs,constlistT,Allocrhs);(6)templateclassT,classAllocbooloperator(constlistT,Alloclhs,constlistT,Allocrhs);//交换两个list对象的内容templateclassT,classAllocvoidswap(listT,Allocx,listT,Allocy);list的接口到这里就结束了。

相关新闻