C++ 浅析 STL 中的 list 容器

list - 擅长插入删除的链表

链表对于数组来说就是相反的存在。

数组本身是没有动态增长能力的(程序中也必须又一次开辟内存来实现),

而链表强悍的就是动态增长和删除的能力。

但对于数组强悍的随机訪问能力来说的话,链表却非常弱。

list - 是一个双向链表的实现。

为了提供双向遍历的能力,list要比一般的数据单元多出两个指向前后的指针。

这也是没办法的,毕竟如今的PC内存结构就是一个大数组,链表要在不同的环境中实现自己的功能就须要花很多其它空间。

list提供了push_back,push_front,pop_back,pop_front四个方法来方便操作list的两端数据的添加和删除,只是少了vector的at和[]运算符的随机訪问数据的方法随机訪问数据的方法。

并非不能实现。而是list的设计者并不想让list去做那些事情。由于他们会做得很差劲。对于list来说。清除容器内全部的元素是一件苦力活,由于全部数据单元的内存都不连续,list仅仅有一个一个遍历来删除。

相关博文

详见:C++
stack queue vector 中 易混淆的经常用法 浅析

详址:http://blog.csdn.net/u013630349/article/details/46860117

Level 1 - 只作为Map使用:採用静态数组

Level 2 - 保存定长数据,使用时也是所有遍历:採用动态数组(长度一開始就固定的话静态数组也行)

Level 3 - 保存不定长数组。须要动态添加的能力。側重于寻找数据的速度:採用vector

Level 3 - 保存不定长数组,须要动态添加的能力。側重于添加删除数据的速度:採用list

Level 4 - 对数据有复杂操作。即须要前后增删数据的能力,又要良好的数据訪问速度:採用deque

Level 5 - 对数据中间的增删操作比較多:採用list。建议在排序的基础上,批量进行增删能够对执行效率提供最大的保证

Level 6 - 上述中找不到适合的:组合STL容器或者自己建立特殊的数据结构来实现

有黑必有白,世界万物都是成对出现的。

性能总结与使用建议

时间: 2024-10-11 17:14:00

C++ 浅析 STL 中的 list 容器的相关文章

STL中的set容器的一点总结2

http://blog.csdn.net/sunshinewave/article/details/8068326 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.

【转】 STL中的set容器的一点总结

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关联式容器.set作为一个容器也是

STL中的set容器的一点总结(转)

STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关

stl中顺序性容器,关联容器两者粗略解释

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

使用STL中的list容器实现单链表的操作

#include<iostream> #include<list> #include<algorithm> using namespace std; void Print(int &item) { cout<<item<<" "; } int main() { list<int> listintegers; list<int>::iterator listiter; //引入迭代器 //----

[转]正确使用C++ STL中的map容器

先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.erase有3个重载:void erase ( iterator position );size_type erase ( const key_type& x );void erase ( iterator first, iterator last ); . 所以下面的代码中的最后一个例子仅仅可以在win

C++STL 中的线性容器整体/逐元素操作方法 少写80%for循环

本文中示例代码默认已引用 std 命名空间 累加 (std::accumulate) accumulate(begin, end, init, op) 返回给定区间内元素的累加值与给定初值的和,初值不可省略 可指定求和运算,默认为std::plus vector<int>vec = {1, 2, 3, 4}; cout<<accumulate(vec.begin(), vec.end(), 0); //累加, 输出: 10 cout<<accumulate(vec.be

【STL】关于STL中set容器的一些总结

原文链接 关于set,必须说明的是set关联式容器.set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构

STL中的vector 和list

参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第十章 认识两个容器:vector和list 容器:是STL(Standard Template Library 标准模板库)的六大组件之一.(容器,容器适配器,迭代器,算法,函数对象,函数适配器) 容器是用来存储和组织其他对象的对象.提供要存储的对象的类型就可以从STL模板中创建容器类. Vector <T>:表示一个在必要时刻可增加容量的数组,该数组存储T类型的元素.只能在矢量容器的末尾添加新元素. Vector