STL - List基础

List 基础:

关于List容器:

list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。

技巧:

  1. 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
  2. 如果你需要大量的插入和删除,而不关心随即存取,则应使用list
  3. 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

1、定义:

#include <list> // list属于std命名域的,因此需要通过命名限定,例如using std::list;
list<int> a; // 定义一个int类型的列表a
list<int> a(10); // 定义一个int类型的列表a,并设置初始大小为10
list<int> a(10, 1); // 定义一个int类型的列表a,并设置初始大小为10且初始值都为1
list<int> b(a); // 定义并用列表a初始化列表b
deque<int> b(a.begin(), ++a.end()); // 将列表a中的第1个元素作为列表b的初始值
// 除此之外,还可以直接使用数组来初始化向量:
int n[] = { 1, 2, 3, 4, 5 };
list<int> a(n, n + 5); // 将数组n的前5个元素作为列表a的初值

2、容量函数

lst.size(); //容器大小
lst.max_size();//容器最大容量
lst.resize(); //更改容器大小
lst.empty(); //容器判空

3、添加函数

lst.push_front(const T& x); //头部添加元素
lst.push_back(const T& x); //末尾添加元素
lst.insert(iterator it, const T& x); //任意位置插入一个元素
lst.insert(iterator it, int n, const T& x); //任意位置插入 n 个相同元素
lst.insert(iterator it, iterator first, iterator last); //插入另一个向量的 [forst,last] 间的数据

4、删除函数

lst.pop_front(); //头部删除元素
lst.pop_back(); //末尾删除元素
lst.erase(iterator it); //任意位置删除一个元素
lst.erase(iterator first, iterator last); //删除 [first,last] 之间的元素
lst.clear(); //清空所有元素

5、访问函数

lst.front(); //访问第一个元素
lst.back(); //访问最后一个元素

6、其他函数

lst.assign(int nSize, const T& x); // 类似于初始化时用数组进行赋值(多个元素赋值)
swap(list&, list&); 或 lst.swap(list&); //交换两个同类型容器的元素
lst.merge(); //合并两个列表的元素(默认升序排列)
lst.splice(iterator it, list&); //在任意位置拼接入另一个list
lst.unique(); //删除容器中相邻的重复元素

7、迭代器

lst.begin(); //开始迭代器指针:
lst.end(); // 指向最后一个元素的下一个位置(末尾迭代器指针)
lst.cbegin(); // 意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。(指向常量的开始迭代器指针:)
lst.cend(); //指向常量的末尾迭代器指针
lst.rbegin(); //反向迭代器指针,指向最后一个元素
lst.rend(); //反向迭代器指针,指向第一个元素的前一个元素
posted @ 2023-03-09 21:32  盧倫  阅读(43)  评论(0)    收藏  举报