STL list

原创 2016年03月11日 23:20:34

STL中的list是序列容器,内部实现方式是双向链表,而链表的优势在于插入和删除元素效率高,但是随机访问元素相比vector数组的形式就低,所以读者在具体实现项目的时候,可以考虑因素选取。

函数说明

list explain
push_back 增加一元素到链表尾
push_front 增加一元素到链表头
sort 对链表排序,默认升序
merge 合并两个有序链表并使之有序
splice 对两个链表进行结合(三个重载函数) 结合后第二个链表清空
insert 在指定位置插入一个或多个元素(三个重载函数)
swap 交换两个链表(两个重载)

这里需要注意的是,merge和splice函数用完后,函数形参的list链表会被清空。而且merge函数只能合并两个有序链表。

#include <iostream>
#include <list>

std::list<int> g_List;

//******************************************************************
//FUNCTION:
void addElement(std::list<int>& vList)
{
    for (unsigned int i=0; i<3; i++)
    {
        vList.push_back(rand()%100); //链表尾部插入一个随机数
    }
    vList.push_front(-1); //元素放在随机数最前
    vList.sort();//排序,默认升序,可以自定义排序函数,传入函数谓词即可
}

//******************************************************************
//FUNCTION:
void printElement(const std::list<int>& vList)
{
    std::list<int>::const_iterator ListIt = vList.begin();

    //访问链表
    for (; ListIt != vList.end(); ListIt++)
    {
        std::cout << *ListIt << " ";
    }

    std::cout << std::endl;
}

int main()
{
    addElement(g_List);
    printElement(g_List);

    std::list<int> TempList;
    addElement(TempList);
    g_List.merge(TempList); //合并有序链表
    printElement(g_List);

    addElement(TempList);
    g_List.splice(++g_List.begin(), TempList, ++TempList.begin(), TempList.end()); //指定位置结合,第二个参数是第二个链表
    printElement(g_List);

    addElement(TempList);
    g_List.insert(++g_List.begin(), TempList.begin(), TempList.end()); //指定位置插入,插入后链表不清空
    printElement(g_List);

    return 1;
}

【参考资料】
【1】http://www.cnblogs.com/scandy-yuan/archive/2013/01/08/2851324.html
【2】http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html

STL -list实现02

  • 2015年04月24日 10:52
  • 1KB
  • 下载

STL中的list容器的一点总结

From: http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/10/2631191.html 1.关于list容器 list是一...

STL_LIST_SAMPLE

  • 2015年01月05日 10:23
  • 910B
  • 下载

stl之list带注释

  • 2017年07月26日 20:57
  • 28KB
  • 下载

STL之四:list用法详解

list容器介绍 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间...

STL---list 的实现原理中间过程

  • 2015年04月24日 10:48
  • 1KB
  • 下载

STL list链表用法详解

  • 2012年11月18日 00:52
  • 38KB
  • 下载

STL--双端队列(deque)和链表(list)

双端队列(deque容器类): #include与vector 类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。 与vector不同的是:deque 还支持...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL list
举报原因:
原因补充:

(最多只允许输入30个字)