ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【STL】STL - list简介

2022-09-03 23:03:57  阅读:182  来源: 互联网

标签:end iterator STL 简介 void 元素 list li


list简介

双向链表,可以从任何地方快速插入与删除

线性链表结构,数据由若干节点构成,每一个结点都包括一个信息块(实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,因为list存储在非连续的内存空间中,由指针有序的将元素链接起来

由于结构原因,list的随机检索的性能不好,不像vector那样直接找到元素的地址,而是从头一个一个的顺序查找,这样目标元素越靠后,检索的时间就越长。检索时间与目标元素的位置成正比。

list的优势在于可以迅速地在任何节点进行插入和删除操作。因为list的每个节点保存着它在链表中的位置,插入或删除一个元素仅对最多三个元素有所影响,不会像Vector会对操作点后的所有元素的存储地址都有所影响

list特点:
(1)不使用连续的内存空间这样可以随意的进行动态操作
(2)可以在内部任何位置快速地插入或删除,也可以在两端进行push和pop
(3)不能进行内部的随机访问,不支持[]操作符和vector.at();

list方法

1.back():返回最后一个元素的引用
2.begin():返回第一个元素的迭代器
3.clear():清除所有元素
4.empty():如果list为空则返回true
5.end():返回末尾的迭代器
6.erase():删除一个元素
	iterator erase(iterator loc);                  // 删除loc处的元素
	iterator erase(iterator start,iterator end);   // 删除start和end之间的元素

7.front():返回第一个元素的引用
8.get_allocator():返回list的配置器
9.insert():插入一个元素的到list中
iterator insert(iterator loc,const TYPE &val);  // 在指定位置loc前插入为val的元素,返回这个元素的迭代器
	void insert(ierator loc,const TYPE &val);   // 指定位置loc前插入num个值为val的元素
	void insert(iterator loc,input_iterator start,input_iterator end); // 在指定位置loc前插入区间[start,end]的所有元素

10.max_size():返回list能容纳的最大元素数量
11.merge():合并两个list
	void merge(list &lst);                // 把自己个lst链表连接在一起

12.pop_back():删除最后一个元素
13.pop_front():删除第一个元素
14.push_back():在list的末尾添加一个元素
15.push_front():在list的头部添加一个元素
16.rbegin():返回指向第一个元素的逆向迭代器
17.remove():从list删除元素
	void remove(const TYPE &val);          // 删除链表中所有值为val的元素

18.remove_if():按指定条件删除元素
19.rend():指向list末尾的逆向迭代器
20.resize():改变list末尾的大小
	void resize(size_type num,,TYPE val);  // 把list的大小改变到num。被加入的多余的元素赋值为val

21.reverse():把list的元素倒转
22.size():返回list中元素个数
23.sort():对list进行排序
	void sort();                   // 为链表排序,默认为升序
	void sort(Comp compfunction);  // 采用指定函数compfunction判断两个元素的大小

24.splice():合并两个List
void splice(iterator pos,list &lst);                              // 把lst连接到pos的位置
void splice(iterator pos,list &lst,iterator del);                 // 插入lst中del所指元素到现有链表的pos上
void splice(iterator pos,list &lst,iterator start,iterator end);  // 使用start和end指定范围  

25.swap():交换两个list
	void swap(list &lst);   	 // 交换lst和现链表中的元素

26.unique():删除list中所有重复的元素
	void unique();  		  // 删除链表中所有重复元素
	void unique(BinPred pr);          // 指定pr,则使用pr来判断是否删除

27.assign():给list赋值
void assign(input_iterator start,input_iterator end);  // 以迭代器start和end指示的范围为list赋值
void assign(size_type num,const TYPE &val);            // 赋值num个为val值得元素

list实例

#include <iostream>
#include <list>

using namespace std;


int cmp(const int& a,const int& b)
{
    // 降序序列
    return a > b;
}


int main()
{
    list<int> li;

    for(int i = 10; i >= 6; i--)
    {
        // 循环压入元素到li
        li.push_back(i);
    }

    // 在list头部添加一个元素3
    li.push_front(3);
    // 在list尾部添加一个元素20
    li.push_back(20);

    list<int> li2(li);

    for(list<int>::iterator it = li.begin(); it != li.end(); it++)
    {
        cout<<*it<<' ';
    }
    cout<<endl;

    // 链表排序,默认升序
    li.sort();
    for(list<int>::iterator it = li.begin();it != li.end(); it++)
    {
        cout<<*it<<' ';
    }
    cout<<endl;

    // 降序排列,采用cmp来判断两个元素的大小
    li2.sort(cmp);
    for(list<int>::iterator it = li2.begin();it != li2.end(); it++)
    {
        cout<<*it<<' ';
    }
    cout<<endl;

    return 0;
}

运行结果:

image

标签:end,iterator,STL,简介,void,元素,list,li
来源: https://www.cnblogs.com/Wangzx000/p/16653890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有