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;

执行结果:

猜你喜欢

转载自blog.csdn.net/qq_33757398/article/details/81490531