list的底层由双向链表(doubly linked list)实现而成,他的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变得非常没有效率,因此它没有提供 [] 操作符的重载。但是由于链表的特点,它可以很有效率的支持任意地方的插入和删除操作。
list 容器可用的成员函数
成员函数 | 功能 |
---|---|
begin() | 返回指向容器中第一个元素的双向迭代器。 |
end() | 返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。 |
rbegin() | 返回指向最后一个元素的反向双向迭代器。 |
rend() | 返回指向第一个元素所在位置前一个位置的反向双向迭代器。 |
empty() | 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。 |
size() | 返回当前容器实际包含的元素个数。 |
max_size() | 返回容器所能包含元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。 |
front() | 返回第一个元素的引用。 |
back() | 返回最后一个元素的引用。 |
assign() | 用新元素替换容器中原有内容。 |
push_front() | 在容器头部插入一个元素。 |
pop_front() | 删除容器头部的一个元素。 |
push_back() | 在容器尾部插入一个元素。 |
pop_back() | 删除容器尾部的一个元素。 |
insert() | 在容器中的指定位置插入元素。 |
erase() | 删除容器中一个或某区域内的元素。 |
swap() | 交换两个容器中的元素,必须保证这两个容器中存储的元素类型是相同的。 |
resize() | 调整容器的大小。 |
clear() | 删除容器存储的所有元素。 |
splice() | 将一个 list 容器中的元素插入到另一个容器的指定位置。 |
remove(val) | 删除容器中所有等于 val 的元素。 |
remove_if() | 删除容器中满足条件的元素。 |
unique() | 删除容器中相邻的重复元素,只保留一个。 |
merge() | 合并两个事先已排好序的 list 容器,并且合并之后的 list 容器依然是有序的。 |
sort() | 通过更改容器中元素的位置,将它们进行排序。 |
reverse() | 反转容器中元素的顺序。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /**************************************************************** * Description: 链表(list) * Author: Alex Li * Date: 2024-03-25 21:10:21 * LastEditTime: 2024-03-25 21:21:29 ****************************************************************/ #include <iostream> #include <list> using namespace std; int main(){ list<int> lst; for (int i = 0; i<6; i++){ lst.push_back(i); } cout << lst.size() << endl; // 输出:6 // cout << lst.max_size() << endl; // 输出最大容量 // lst.resize(4); // 更改list大小 // cout << lst.size() << endl; // 输出:4 if (lst.empty()) cout << "元素为空" << endl; // 输出:元素为空 // 头部增加元素 lst.push_front(4); // 末尾添加元素 lst.push_back(5); // 任意位置插入一个元素 auto it = lst.begin(); //auto是自动类型推导,it为迭代器,作用类似指针,将lst.begin的地址给到it lst.insert(it, 2); // 任意位置插入n个相同元素 lst.insert(lst.begin(), 3, 9); // 遍历显示 for (it = lst.begin(); it != lst.end(); it++) cout << *it << " "; // 输出:9 9 9 2 4 0 1 2 3 4 5 5 cout << endl; return 0; } |