打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++标准库:使用std_list作为链表

 

http://cpp.ezbty.org/content/science_doc/c%E6%A0%87%E5%87%86%E5%BA%93%EF%BC%9A%E4%BD%BF%E7%94%A8std_list%E4%BD%9C%E4%B8%BA%E9%93%BE%E8%A1%A8

摘要:本文是“C++标准库导引系列”的一部分。std::list可能在许多时候被人们忘记,我自己就似乎忘记了这容器,当我在写这个系列的文章的时候,我意识到原来std::list有时是更好的选择。std::list提供一个链表的实现,它是基于结点的容器,同时它也提供了许多标准算法的特殊版本,因为此时有更好的方法。

我们已经写了这个系列的好几篇文章了,本文跟之前的文章结构类似,首先给出一个基本的使用。由于std::list提供许多自定义的算法,所以本文也会把这一点体现出来。下面从基本的使用开始,为了使用std::list我们只需要如下:

#include<list>
//定义一个空的std::list容器
std::list<int> list;

//定义含有n个int()的容器
std::list<int> linst(n);

//产生一个list,并从迭代器中读取内容
std::list<int> list(begin, end);

当我们已经有一个std::list在这里的时候,我们需要对它进行操作,相对容器而言它的基本操作就是插入与删除元素,同时提供一些额外的操作诸如排序或合并等等。这些操作std::list都存在,但它有自己的优势,它往往有指针来完成操作,而不是简单的复制。

#include<list>
class Type;
std::list<Type> list;

//我们需要指定一个位置,因为std::list不如std::set会自动确定位置
Type value;
list.insert(list.begin(), value);

Type array[]={12, 12, 43, 87};
const size_t array_size=sizeof(array)/sizeof(array[0]);
list.insert(list.end(), array, array+array_size);

//把数据追加到容器最后
list.push_back(value);
//把数据追加到容器头部,这没有什么性能问题
list.push_front(value);

//从表的尾或头删除数据
list.pop_back();
list.pop_front();

上面的代码对于大部分容器来说都是常见的,但是std::list提供的特殊成员函数我们也要强调,下面就是这个特殊的函数,存在sort、splice、unique和merge算法。

//对表内的元素进行排序
list.sort();
//把连续相等的元素删除,留下唯一的值
list.unique();

std::list<int> list_2;
//把list中的元素拼接到list_2
list_2.splice(list_2.begin(), list);
//还可以有选择地拼接
list_2.splice(list_2.begin(), list, pos);//pos是list的一个迭代器

//merge与splice算法很相似,但它合并两个已序的容器
//merge算法把两个已序的容器合并,并且保证合并后也是已序
list.sort();
list_2.sort();
list_2.merge(list);
list_2.merge(list, op);//op是一个比较仿函数

本系列文章只是作为一个导引,所以并没有太多的细节,但作为一个示例也希望激发大家学习和使用标准库。C++在中国的现况很让人担心,大家普遍把C++当作C来使用,基本没有使用STL的意识,在C++标准出来10年之后今天还是如此,让我们很担心。

软件设计就是不断重用的过程,同时也是一个不断重构的过程。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
排序算法
几种常见 容器 比较和分析 hashmap, map, vector, list ...hash table
PHP函数
关于cPP标准库的一些知识
UC头条:从C 98到C 26,经历了什么?
C 23:下一个 C 标准
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服