C++【STL】之list的使用

您所在的位置:网站首页 vector迭代器用法 C++【STL】之list的使用

C++【STL】之list的使用

2023-06-27 22:05| 来源: 网络整理| 查看: 265

文章目录: list介绍list使用1. 默认成员函数1.1 构造函数1.2 拷贝构造1.3 赋值重载1.4 析构函数 2. 迭代器3. 容量操作4. 数据访问5. 数据修改5.1 插入删除5.2 交换调整清理 6. 其他操作6.1 链表拼接6.2 链表移除6.3 排序6.4 链表逆置

list介绍

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。

list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。

list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。

与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)

list使用

本文介绍的是list的部分常用接口,大佬们想了解更多关于list类的细节,一定要请前往官方文档(点击跳转)查阅学习!

1. 默认成员函数 1.1 构造函数

list支持三种构造方式:

默认构造:构造一个list对象,此时只有一个哨兵位节点带参构造:构造一个list对象,初始化对象有n个val值的节点迭代器区间构造:根据传入的迭代器区间,构造出目标区间值的list对象 int main() { vector arr = { 1,2,3,4,5,6 }; list l1; //默认构造 list l2(8, 1); //带参构造,8个val值为1的节点 list l3(arr.begin(), arr.end()); //迭代器区间构造 return 0; }

1.2 拷贝构造

拷贝已有的list对象来构造出一个新的相同值对象

int main() { list l1(3, 6); list l2(l1); cout string str = "hello world"; list l1(str.begin(), str.end()); //迭代器区间构造 //正向遍历 list::iterator it = l1.begin(); while (it != l1.end()) { cout list l1(88, 6); cout 4,1,2 }; list l1(v.begin(), v.end()); //迭代器区间构造 cout 4,1,2 }; list l1(vs.begin(), vs.end()); for (auto e : l1) cout cout cout vector va = { 4,1,2 }; list l1(va.begin(), va.end()); for (auto e : l1) cout //放入随机数 val = rand() % 100 + 1; l1.push_back(val); l2.push_back(val); i++; } //使用list::sort 排序 int begin1 = clock(); l1.sort(); int end1 = clock(); int begin2 = clock(); //先拷贝到vector中 for (auto e : l2) { tmp.push_back(e); } //使用std::sort 排序(快排) std::sort(tmp.begin(), tmp.end()); //再拷贝回去 int pos = 0; for (auto& e : l2) { e = tmp[pos++]; } int end2 = clock(); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3