【STL】List容器

list容器

0.list(双向链表)容器介绍

头文件

#include <list>

容器特性

  • list 是一个双向链表,可以高效的插入删除元素
  • list 不可以随机存取元素,所以不支持 list.at(target)list[target] 操作符

单次移动

list<int>::iterator it;
for(it = list.begin();it!=list.end();it++)
    cout<<*it;

it+5;  //error,不支持+运算符的重载

1.list容器的构造

默认构造

list<int> l_int;
list<float> l_float;
list<string> l_string;

带参构造

list<int> l_a;
list<int> l_b(5,8);  //8 8 8 8 8
list<int> l_c(a.begin(),a.end());  //将前l_a拷贝给l_c,左闭右开
list<int> l_d(l_b);  //触发拷贝构造函数的调用,将l_b拷贝给l_d

2.list赋值

list.assign(l.begin(),l.end()); //将其他list中[begin,end)区间内的元素拷贝到自身
list.assign(n,elem);  //将n个elem拷贝赋值給自身(覆盖)
list& operator = (const list &list);  //重载等号操作符
list.swap(otherlist);  //将其他list元素和本身元素交换

3.list头部尾部添加移除操作

list.push_back( elem);  //尾部插入一个元素
list.pop_back();  //尾部移除最后一个元素
list.push_front(elem); //头部插入一个元素
list.pop_front();  //头部移除第一个元素

4.list的迭代器

list 的迭代器是双向迭代器 ,可以从两个方向来读写容器。

list<int>::iteratir it;
list.begin();  //返回容器中第一个元素的迭代器
list.end();  //返回容器中最后一个元素的下一个元素的迭代器

list<int>::reverse_iterator rit;
list.rbegin(); //返回容器中倒数第一个元素的迭代器
list.rend(); //返回容器中倒数最后一个元素的下一个元素的迭代器

5.list大小

list.size();  //返回容器中元素的个数(容器长度) 
list.empty();  //返回一个bool值判断容器是否为空,空返回true,非空返回false
list.resize(num);  //重新指定容器长度,如果变长,则超出部分以默认值填充;如果变短,则末尾删除超出部分
list.resize(num,elem);  //超出部分以指定元素elem来填充

6.list容器的插入

list 是不连续容器,插入操作不会导致迭代器失效

//insert的三种重载
list.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
list.insert(pos,n,elelm); //在pos位置处插入n个elem数据,无返回值
list.insert(pos,otherlist.begin(),otherlist.end()); //在pos位置上插入其他list[beg,end)区间内元素 

7.list容器的删除

list.clear();  //移除容器所有的数据
list.erase(beg,end);  //删除[beg,end)区间内的所有元素,返回下个元素的位置
list.erase(pos); //返回pos位置上的数据,并返回下一个元素的位置
list.remove(elem); //删除容器所有和elem匹配的元素

8.反转链表

list.reverse();  //翻转链表顺序

9.list迭代器的失效

​ 删除节点会导致迭代器失效

for(list<int>::iterator it=l.begin();it!=l.end();it++){
	if(*it==3){
		l.erase(it);  //迭代器通过节点next指针寻找下一个节点,该节点被释放,该节点的next指针所指向的地址也就丢失,相当于迭代器失效。
    }
}
//                        interator
//                           ||
//Node1(next)-><-(pre)Node2(next)-><-(pre)Node3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值