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

一、list的接口


list是一个带头的双向循环链表,支持在任意位置的插入和删除操作

1. 构造函数

cpp 复制代码
//无参的构造
list();
//n个val去构造
explicit list (size_type n, const value_type& val = value_type(),const allocator_type& alloc = allocator_type());
//用一段迭代器区间去构造
template <class InputIterator>
list (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
//拷贝构造
list (const list& x);
//初始化列表去构造
list (initializer_list<value_type> il,const allocator_type& alloc = allocator_type());

2. 赋值重载

cpp 复制代码
//用另一个list对象赋值给一个list对象
list& operator= (const list& x);
//用初始化列表赋值给list对象
list& operator= (initializer_list<value_type> il);

3. 迭代器

cpp 复制代码
iterator begin() noexcept;
const_iterator begin() const noexcept;
iterator end() noexcept;
const_iterator end() const noexcept;
//反向迭代器
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
reverse_iterator rend() nothrow;
const_reverse_iterator rend() const nothrow;

4. 容量

cpp 复制代码
//判空
bool empty() const noexcept;
//容器元素的个数
size_type size() const noexcept;

5. 访问元素

cpp 复制代码
//返回容器中第一个元素的引用
reference front();
const_reference front() const;
//返回容器中最后一个元素的引用
reference back();
const_reference back() const;

6. 修改

cpp 复制代码
//用一段迭代器赋值
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
//用n个val赋值
void assign (size_type n, const value_type& val);
//用初始化列表赋值
void assign (initializer_list<value_type> il);
//头插
void push_front (const value_type& val);
//头删
void pop_front();
//尾插
void push_back (const value_type& val);
//尾删
void pop_back();
//在pos位置插入单个元素
iterator insert (const_iterator position, const value_type& val);
//在pos位置插入n个val
iterator insert (const_iterator position, size_type n, const value_type& val);
//在pos位置插入一段迭代器区间
template <class InputIterator>
iterator insert (const_iterator position, InputIterator first, InputIterator last);
//在pos位置插入一个初始化列表
iterator insert (const_iterator position, initializer_list<value_type> il);
//删除pos位置的元素
iterator erase (const_iterator position);
//删除一段迭代器区间
iterator erase (const_iterator first, const_iterator last);
//交换两个list对象的内容
void swap (list& x);
// n < size,保留前n个元素
//n > size,插入元素到n个,如果val是具体的,就用val的拷贝去初始化,否则,将被值初始化
void resize (size_type n);
void resize (size_type n, const value_type& val);
//清空list中所有的元素
void clear() noexcept






7. 操作

cpp 复制代码
//在pos位置插入一个list对象
void splice (const_iterator position, list& x);
//只转移x对象中i位置的元素到另一个list对象中
void splice (const_iterator position, list& x, const_iterator i);
void splice (const_iterator position, list&& x, const_iterator i);
//转移x中的一段迭代器区间到另一个list对象中
void splice (const_iterator position, list& x,const_iterator first, const_iterator last);
void splice (const_iterator position, list&& x,const_iterator first, const_iterator last);
//删除容器中所有和val值相等的元素
void remove (const value_type& val);
//去重,原理双指针(只能去除相邻的重复的元素,常与sort搭配使用)
void unique();
//合并链表,原理归并排序(要求两个list对象都是有序的)
void merge (list& x);
//comp仿函数对象,控制比较大小的逻辑
template <class Compare>
void merge (list& x, Compare comp);
//链表排序
void sort();
template <class Compare>
void sort (Compare comp);
//逆置链表
void reverse() noexcept;


8. 非成员函数

cpp 复制代码
//友元函数
(1)template <class T, class Alloc>
bool operator== (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
(2)template <class T, class Alloc>
bool operator!= (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
(3)template <class T, class Alloc>
bool operator<  (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
(4)template <class T, class Alloc>
bool operator<= (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
(5)template <class T, class Alloc>
bool operator>  (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
(6)template <class T, class Alloc>
bool operator>= (const list<T,Alloc>& lhs, const list<T,Alloc>& rhs);
//交换两个list对象的内容
template <class T, class Alloc>
void swap (list<T,Alloc>& x, list<T,Alloc>& y);

list的接口到这里就结束了。

相关推荐
清空mega2 小时前
第4章:JSP 程序设计实战——for、if、动态表格与 99 乘法表
开发语言·python
mjhcsp2 小时前
C++ A* 算法:启发式路径搜索的黄金标准
android·c++·算法
共享家95272 小时前
Java入门(类和对象)
java·开发语言
习惯就好zz2 小时前
Qt Quick 系统托盘完整实践
开发语言·qt·qml·系统托盘·system tray·qapplication·qguiapplication
笨笨马甲2 小时前
Qt集成OpenCV
开发语言·qt
笨笨马甲2 小时前
Qt 工业机器视觉开发
开发语言·qt
咚为2 小时前
深入浅出 Rust FFI:从内存安全到二进制兼容
开发语言·安全·rust
仰泳的熊猫2 小时前
题目2281:蓝桥杯2018年第九届真题-次数差
数据结构·c++·算法·蓝桥杯
-杨豫2 小时前
JavaScript入门到精通全套资料,以及核心进阶ES6语法,API,js高级等基础知识和实战教程
开发语言·javascript·es6