C++ Lists(链表)
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
说起这个访问速率呢?给大家举个很简单的例子
也就是顺序表,它的存储方法就类似于c语言的数组,那么数组可以通过下标来访问,所以效率快
而用向量表存储数据,假如需要大量地插入,删除数据,效率就很慢了,为什么呢?
原因
如图e,当我们需要在2后面插入3,为了不影响原有数据,需要将2后面的数据往后挪,那么假如2后面的有n个数据,就需要挪动n次
链表List
与此对应的便是List了,List的底层实现是链表,我们知道确定链表的唯一要素就是头结点的指针,
那么我们访问List元素的时候,需要从头结点一直往后遍历链表,所以时间花销相比向量(vectors) 通过下标访问要大得多
而链表删除,插入的时候只需要找到对应节点,稍微挪动几个指针即可;
下面以单向链表为例,我们
![](https://i-blog.csdnimg.cn/blog_migrate/6216513a39afa81ffa9094416d43d657.png)
所以:
什么时候选择链表List,什么时候选择向量(vectors) ,就看
当访问操作较多的时候使用向量(vectors)
当删除插入操作较多的时候使用链表List
讲了这么多,不知道我们同学有没理解呢?没理解得好好看下数据结构的内容了(最主要的还是思想),陈老师讲完c++
部分,预将陆续推出c/数据结构/算法等内容,敬请关注吧!!
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中重复的元素 |
#include <iostream>
#include <list>
using namespace std;
struct student{
int height;
int weight;
};
int main(int argc, char *argv[])
{
list<int> l;
//往list添加数据
for(int i=0; i < 10; i++)
{
l.push_back(i);
}
//输入list的数据 --- 迭代器
list<int>::iterator it;
for(it =l.begin(); it != l.end(); it++)
{
cout<<*it<<endl;
}
list<struct student> l_student;
struct student a = {180 ,60};
l_student.push_back(a);
list<struct student>::iterator it_student;
for(it_student =l_student.begin(); it_student != l_student.end(); it_student++)
{
struct student temp;
temp = *it_student;
cout<<temp.height<<" "<<temp.weight<<endl;
}
return 0;
}