首页 > 其他分享 >【STL】STL - list简介

【STL】STL - list简介

时间:2022-09-03 22:56:43浏览次数:65  
标签: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
From: https://www.cnblogs.com/Wangzx000/p/16653890.html

相关文章

  • C# list 分片,对象深拷贝
    ///<summary>///list分片///</summary>///<typeparamname="T"></typeparam>///<paramname="list"></param>......
  • nacos 报错 Unknown column 'encrypted_data_key' in 'field list'
    nacos报错Unknowncolumn'encrypted_data_key'in'fieldlist'看提示是数据表缺少encrypted_data_key字段,那就手动为据表添加该字段为保证用户敏感配置数据的安全,Nac......
  • java 简介 与 安装
    java简介与安装一、Java简介java的特性和优势简单性面向对象可移植性高性能分布式动态性多线程安全性健壮性Java的三大版本JavaSE:标......
  • 初识GitHub · 简介篇
    初识GitHub·简介篇1前言GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。GitHub于2008年4月10日......
  • 用于数据工程的 Python 简介
    用于数据工程的Python简介Photoby希特什·乔杜里on不飞溅Python是当今数据工程师、数据科学家和机器学习工程师最常用的编程语言之一,因此它通常被称为数据语言......
  • 以Docker Compose 建立Node.js 全端开发环境(四) — Todo List Api 串接
    以DockerCompose建立Node.js全端开发环境(四)—TodoListApi串接上个章节我们加入了Prisma作为与资料库沟通的中间层,这篇我们将使用它来协助我们开几只基础的Api......
  • shell: list_executable_file - 列出可执行文件的名称(linux)
    shell:list_executable_file-列出可执行文件的名称(linux)    一、shell:list_executable_file 1#!/usr/bin/bash234#file_name=list_executabl......
  • docker 简介
    什么是DockerDocker在容器进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便、快捷。下面......
  • 【WPF】Prism简介
    最近公司让我给其他员工普及一下Prism框架,整理一下资料和思路。于是乎翻译了一下官方的介绍。Prism简介1.Prism能干嘛Prism为程序设计提供指导,旨在帮助用户更加容......
  • Java集合---ArrayList
    集合和数组的区别共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的ArrayList的构造方法和添加方法publicArrayList()创建一个空......