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的使用

1. list功能 list是双向循环链表,每一个元素都知道前面一个元素和后面一个元素.list对象自身提供了两个pointer用来指向第一个和最后一个元素.每个元素都有pointer指向前...
  • sunxueping
  • sunxueping
  • 2016年04月17日 15:28
  • 3230

【STL】list的常用方法

List的常用方法展示 【1】怎么赋值 【2】insert 【3】front、 back、 pop_back、 pop_front 【4】遍历、反序遍历 【5】排序sort 【6】swap 【7】un...
  • qq_31839479
  • qq_31839479
  • 2016年08月26日 11:21
  • 939

STL中list详解

std::list Lists are sequence containers that allow constant time insert and erase operations anywh...
  • axiqia
  • axiqia
  • 2016年01月13日 22:23
  • 1236

STL之list排序

文章来源: http://bbs.csdn.net/topics/330037235 #include  #include  #include  using nam...
  • u011430225
  • u011430225
  • 2016年05月12日 11:11
  • 409

带你深入理解STL之List容器

上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入、删除等操作时都造成了内存块的拷贝和移动,另外在内存空间...
  • terence1212
  • terence1212
  • 2016年08月24日 17:29
  • 2729

STL list链表的用法详细解析

原文地址:http://www.jb51.net/article/41525.htm 本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂。不失为S...
  • Double2hao
  • Double2hao
  • 2016年03月01日 08:05
  • 3086

C++ STL list介绍与使用方法

list(链表)链表也即链式表,在数据结构中,我们知道线性表的物理存储结构有两种,顺序表(数组)和链式表(结点)。链表是在堆中为每一个元素分配内存,然后利用指针将所有元素串起来。根据这种物理存储结构,...
  • Cypress1010
  • Cypress1010
  • 2016年12月15日 13:34
  • 1806

《STL源码剖析》---stl_list.h阅读笔记

STL中链表list是一个常用的容器。list在内存中是不连续的双向链表,且是环形的。要了解链表细节是如何操作的话,阅读STL关于链表的代码是最好的方法。...
  • KangRoger
  • KangRoger
  • 2014年08月12日 23:35
  • 2350

c++ STL的list用法总结

头文件 #include   声明一个int型的list:list a; 1、list的构造函数 lista{1,2,3} lista(n) //声明一个n个元素的列表,每个元素都是0...
  • xiaoquantouer
  • xiaoquantouer
  • 2017年04月21日 22:02
  • 2678

坑爹的stl list 的size()成员函数

刚做hihocoder #1086 Browser Caching的题,一开始的做法是stl unorderd_map+list,满心以为一次就AC,结果……TLE了。O(N)也能TLE!!(╯‵□′...
  • lyingson
  • lyingson
  • 2015年09月15日 14:17
  • 1276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL list
举报原因:
原因补充:

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