list是顺序容器中的一种,同vector相比,vector是顺序表的顺序存储方式,而list是顺序表的链式存储结构。
1.循环双链表结构
2.具有一个尾结点,满足STL左闭右开的原则
3.与vector不同,对于list的迭代器而言,不再是简单数据类型的指针,因为list中每个Node所在的内存并不要求连续,对于迭代器的++,--等操作,并不是地址的++,--操作,而是需要切到下一个节点所在的地址。
4.插入和删除list需要的时间复杂度是O(1),并且不像vector一样,因为内存重新分配而导致迭代器失效。
API | 功能 |
---|---|
assign() | 给list赋值 |
back() | 返回最后一个元素 |
begin() | 返回指向第一个元素的迭代器 |
clear() | 删除所有元素 |
empty() | 如果list是空的则返回true |
end() | 返回末尾的迭代器 |
erase() | 删除一个元素 |
front() | 返回第一个元素 |
get_allocator() | 返回list的配置器 |
insert() | 插入一个元素到list中 |
max_size() | 返回list能容纳的最大元素数量 |
merge() | 合并两个list |
pop_back() | 删除最后一个元素 |
pop_front() | 删除第一个元素 |
push_back() | 在list的末尾添加一个元素 |
push_front() | 在list的头部添加一个元素 |
rbegin() | 返回指向第一个元素的逆向迭代器 |
remove() | 从list删除元素 |
remove_if() | 按指定条件删除元素 |
rend() | 指向list末尾的逆向迭代器 |
resize() | 改变list的大小 |
reverse() | 把list的元素倒转 |
size() | 返回list中的元素个数 |
sort() | 给list排序 |
splice() | 合并两个list |
swap() | 交换两个list |
unique() | 删除list中重复的元素 |
list<int>lst1; //创建空list
list<int> lst2(5); //创建含有5个元素的list
list<int>lst3(3,2); //创建含有3个元素的list,并初始化为2
list<int>lst4(lst2); //使用lst2初始化lst4
list<int>lst5(lst2.begin(),lst2.end()); //同lst4
#include<iostream>
#include <list>
using namespace std;
int main()
{
list<int>lst1; //创建空list
list<int> lst2(5); //创建含有5个元素的list
list<int>lst3(3, 2); //创建含有3个元素的list,并初始化为2
list<int>lst4(lst2); //使用lst2初始化lst4
list<int>lst5(lst2.begin(), lst2.end()); //同lst4
lst2.push_back(1);
lst2.push_back(2);
lst2.push_back(3);
lst2.push_back(4);
lst2.push_front(5);
cout << "list2 size: " << lst2.size() << endl; //在原有五个元素的基础上又新增了五个元素
for (list <int> ::iterator it = lst3.begin(); it != lst3.end(); it++)
cout << *it << endl;
for (list<int>::reverse_iterator it = lst2.rbegin(); it != lst2.rend(); it++)
cout << *it << endl;
system("pause");
return 0;
}
原文:https://www.cnblogs.com/Raowz/p/14617880.html