zoukankan      html  css  js  c++  java
  • STL总结之list

    STL中list和我们传统意义上的链表一样可以进行动态节点添加和释放.
    优点:适合动态删除和添加
    缺点:不支持随机访问.
     
    C++标准对list模板声明:
    template < class T, class Allocator = allocator< T> > class list;
     
    1)list的构造有多种方式和vector差不多,如下:
    list<int > first;
    list<int > second(4,100);
    list<int > third( second.begin (),second. end());
    list<int > fourth( third);
     
    int myints [] = {16,2,77,29};
    list<int > fifth ( myints, myints + sizeof( myints) / sizeof (int) );
     
    2)list的内存分配方式(以vs2008中为例).
    list不管以什么方式初始化,它总是会先分配一个头节点,节点内容为空, 并且头结点的前一个节点指向最后一个节点, 最后一个节点指向头节点.
    以后不管是以insert, push_back, push_front插入数据,list都会使用std::allocator<T>分配器进行重新内存分配.
    进行pop_front, pop_back, erase, clear, resize, assign删除的节点内存都会被释放掉.这和vector不太一样.
     
    3)list成员函数splice是从一个list中移动元素到另一list中;
    程序1:
    输出:
    splice操作是将一个list的中的元素直接拼接到另一list中,并不会重新申请释放内存.
     
    4)list成员函数sort是将list中的元素进行排序(默认为升序),允许用户自定义比较规则.
    在vs下我们看到排序使用了非递归的归并排序,使用了一个数组来保存中间序列最后遍历整个数组,将所有序列合并.
     
    5)list成员函数reverse是对list进行翻转.成员函数unique只能去除相邻的相同元素, 因此如果要去除相同元素最好保证list有序.
     
    6)由于list适合添加和删除元素,list提供了remove和remove_if函数移除指定的元素.
    程序:
    输出:
     
    总结:容器list适合频繁添加和删除元素情况.
     
     
     
  • 相关阅读:
    17-canvas绘制扇形
    16-canvas绘制圆弧
    15-canvas渐变色
    14-canvas绘制柱状图
    13-绘制矩形的简写方式
    12-es6类的方式封装折线图
    11-canvas绘制折线图
    10-canva绘制数据点
    jenkins 环境部署 (yum安装方式)
    BerkeleyDB安装
  • 原文地址:https://www.cnblogs.com/ourroad/p/3356041.html
Copyright © 2011-2022 走看看