【C++】STL顺序容器list

list

list是顺序容器中的一种,同vector相比,vector是顺序表的顺序存储方式,而list是顺序表的链式存储结构。


一、STL中List特点:

        1.循环双链表结构
        2.具有一个尾结点,满足STL左闭右开的原则
        3.与vector不同,对于list的迭代器而言,不再是简单数据类型的指针,因为list中每个Node所在的内存并不要求连续,对于迭代器的++,--等操作,并不是地址的++,--操作,而是需要切到下一个节点所在的地址。
        4.插入和删除list需要的时间复杂度是O(1),并且不像vector一样,因为内存重新分配而导致迭代器失效。
image

二、list的常用API

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;
}

五、记录

image

image

image

image

image

posted @ 2021-04-05 10:22  一半丶  阅读(180)  评论(0编辑  收藏  举报