list链表1-定义与属性

1.双向链表与单向链表

1)单向链表:forward_list,也叫向前链表,操作都在链表头,操作比双向链表更快

2)双向链表:list,比单向链表多了个指向前方的指针

 

2.与vector的区别

vector的特点:

1)随机访问快,即下标运算

2)尾部添加,不申请空间的情况下,非常快

3)不支持快速插入和删除,比较慢

list的特点:

1)随机访问慢,不支持下标运算

2)支持快速插入和删除

 

3.头文件

#include <list>

 

4.定义

1)定义list对象

list<类型> lis;

类型可以是基本数据类型也可以是结构体和对象等等

list<int> lis;

2)定义迭代器

list<int>::iterator ite;

 

5.构造函数

1)无参数的构造,构造一个空的list

list<int> lis1;

2)输入一个参数,指定链表的大小或者说是元素个数,元素初始化为0

list<int> lis2(5);

3)输入两个参数,第一个参数指定元素的个数,第二个参数指定每个参数的值

list<int> lis3(5, 8);

4)调用拷贝构造,用一个已存在的list链表初始化新链表

list<int> lis4(lis3);

5)通过迭代器初始化新链表

list<int> lis5(lis3.begin(), lis3.end());

注意:list中不支持迭代器进行加法运算,比如:lis3.begin()+2是非法的,迭代器可能进行++和--运算

具体实例:

list<int> lis1;
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";

list<int> lis2(5);
for_each(lis2.begin(), lis2.end(), Out);
cout << "\n";

list<int> lis3(5, 8);
for_each(lis3.begin(), lis3.end(), Out);
cout << "\n";

list<int> lis4(lis3);
for_each(lis4.begin(), lis4.end(), Out);
cout << "\n";

list<int> lis5(lis3.begin(), lis3.end());
for_each(lis5.begin(), lis5.end(), Out);
cout << "\n";

执行结果:

 

6.属性

1)没有容量的定义了

2)empty();  //检测链表是否为空

3)size();   //链表的大小

4)resize();   //设置链表的大小

链表增大填充的值为0,减小就截断链表的值

list<int> lis1;
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";
cout << "empty: " << lis1.empty() << endl;
cout << "size: " << lis1.size() << endl;

lis1.resize(5);
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";
cout << "empty: " << lis1.empty() << endl;
cout << "size: " << lis1.size() << endl;

lis1.resize(2);
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";
cout << "empty: " << lis1.empty() << endl;
cout << "size: " << lis1.size() << endl;

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深山里的小白羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值