----------------------------list

链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域

链表内存是非连续的

添加和删除元素 其时间复杂度都为常数项,不需要移动元素,比数组添加删除效率更高

链表不是只有在需要的时候才分配内存

链表需要额外的空间保存节点关系 前驱、后继关系

----------特性总结

采用动态存储分配,不会造成内存浪费和溢出

链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

链表灵活,但是空间和时间额外耗费较大

----------list常用API

list构造函数

list<T> lstT;   list采用模板类实现,对象的默认构造形式

list(beg,end);  构造函数将[beg,end)区间中的元素拷贝给本身

list(n,elem);   构造函数将n给elem拷贝给本身

list(const list& lst);  拷贝构造函数

list数据元素插入、删除操作

push_back(elem);    在容器尾部加入一个元素

pop_back(); 删除容器最后一个元素

push_front(elem);   在容器开头插入一个元素

pop_front();    移除容器中第一个元素

insert(pos,elem);   在pos位置插入elem元素的拷贝,返回新数据的位置

insert(pos,n,elem); 在pos位置插入n个elem元素的拷贝,无返回值

insert(pos,beg,end);    在pos位置插入[beg,end)区间的数据,无返回值

clear();    移除容器的所有数据

erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置

erase(pos); 删除pos位置的数据,返回下一个数据的位置

remove(elem);   删除容器中所有与elem值匹配的元素

list大小操作

size(); 返回容器中元素的个数

empty();    判断容器是否为空

reserve(num);   重新制定容器的长度为num,若容器变长的,则以默认值填充新位置

list赋值操作

assign(beg,end);    将[beg,end)区间中的数据拷贝赋值给本身

ssign(n,elem);  将n个elem拷贝赋值给本身

list& operator= (const list& lst);  重载=操作符

swap(lst);  将lst与本身的元素互换

list数据存取

front();    返回第一个元素

back(); 返回最后一个元素

list反转排列排序

reverse();  反转链表,比如lst包含1,3,5元素,运行此方法后lst就包含5,3,1元素

sort(); list排序


#include<iostream>
#include<list>
#include<algorithm>
using namespace std; void test01 () {
list<int> lst1;
list<int> lst2(10,10); //有参构造
list<int> lst3(lst2); //拷贝
list<int> lst4(lst2.begin(),lst2.end()); for (list<int>::iterator it = lst4.begin();it != lst4.end();it ++) {
cout << *it << " ";
}
cout << endl;
} void test02 () {
list<int> lst;
lst.push_back(100);
lst.push_front(200);
lst.push_front(200);
lst.push_front(200);
lst.push_back(300);
lst.push_back(200);
lst.push_back(200);
lst.push_back(400); lst.insert(lst.begin(),500);
lst.insert(lst.end(),600); list<int>::iterator it = lst.begin();
it ++;it ++;
lst.insert(it,700); // lst.pop_back();
// lst.pop_front(); // lst.erase(lst.begin(),lst.begin()); lst.remove(200); //删除匹配的所有值
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
} //交换
void test03 () {
list<int> lst1;
lst1.assign(10,10); list<int> lst2;
lst2 = lst1; lst2.swap(lst1);
} //旋转
void test04 () {
list<int> lst;
for (int i = 0;i < 10;i ++) {
lst.push_back(i);
}
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl; lst.reverse();
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
} bool cmp (int t1,int t2) {
return t1 > t2;
} //排序
void test05 () {
list<int> lst;
lst.push_back(2);
lst.push_back(211);
lst.push_back(6);
lst.push_back(3);
lst.push_back(55);
lst.push_back(1); //默认从小到大
lst.sort();
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl; lst.sort(cmp);
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
}

C++ list容器学习总结的更多相关文章

  1. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

  2. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  3. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  4. Java容器学习——List

    Java容器学习--List 基础知识 数组: ​ 优点:随机存取,可以快速访问元素 ​ 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: ​ 优点: ...

  5. 【Ansible】ansible容器学习环境搭建

    想要学习ansible,只有一个节点肯定是不行的,而搭建虚拟机又是一件非常费时费力费资源的事情,所以通过docker 快速搭建一个容器学习环境是一个不错的选择 1. 了解ansible部署 1.1 需 ...

  6. [原]容器学习(一):动手模拟spring的IoC

    介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...

  7. C++容器学习,与结构体排序和set来一场邂逅

    最近学习C++容器,积累一下.下面介绍set和multiset,并使用sort对结构体进行排序.C++之路漫漫其修远兮! 一.对结构体进行排序 // sort_struct.cpp : 定义控制台应用 ...

  8. 并发容器学习—ConcurrentSkipListMap与ConcurrentSkipListSet 原

    一.ConcurrentSkipListMap并发容器 1.ConcurrentSkipListMap的底层数据结构     要学习ConcurrentSkipListMap,首先要知道什么是跳表或跳 ...

  9. Docker容器学习与分享07

    Docker容器网络 在分享06中学完了bridge网络,接着学习none网络和host网络. Docker在安装时会在host上默认创建三个网络,分别是bridge.host.null. [root ...

  10. Docker容器学习与分享06

    Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...

随机推荐

  1. 【Java】UDP套接字编程

    服务器 udpserver.java package server; import java.net.DatagramPacket; import java.net.DatagramSocket; i ...

  2. 离线版nRF Connect for Desktop安装方法

    首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...

  3. Pycharm两种快速激活方式(附最新激活码和插件)

    小张的Pycharm最近弹出提示框 Your license has expired提示过期....纳尼!!!! 是不是看到这个也很头疼,.于是我就在想有没有一种方式可以让他永久免费的,于是小张从网上 ...

  4. Java 21 新特性

    Java 21 是 Java 语言的一次重要更新,引入了若干新的特性,提升了开发者的编程效率和代码质量.本文将详细介绍 Java 21 的新特性,包括基础概念.使用方法.常见实践以及最佳实践. 简介 ...

  5. Junit单元测试的maven设置

    maven 官方文档: https://maven.apache.org/surefire/maven-surefire-plugin/usage.html maven是通过插件 maven-sure ...

  6. Missing Semester

    计算机教育中缺失的一课 The Missing Semester of Your CS Education 文档:https://missing-semester-cn.github.io/ 网课:h ...

  7. 25.9K star!AI一键生成高清短视频,这个开源神器让内容创作起飞!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "MoneyPrinterTurbo 是基于AI大模型的全自动短视频生成工具,只需 ...

  8. linux 指定运行级别

    目录 基本介绍 指定运行级别 基本介绍 0:关机 1:单用户 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重启 常用的运行级别是3和5,也可以 ...

  9. 【译】Visual Studio 推出预览版 Agent 模式

    规划.构建.测试.修复 -- 一切只需一个提示. Visual Studio 17.14 版本已向所有用户公开预览版 Agent 模式.Visual Studio 中的 Agent 模式允许您使用自然 ...

  10. codeup之C语言10.1+C语言10.2(指针

    Description 输入a和b两个整数,按先大后小的顺序输出a和b.注意请使用指针变量的方式进行比较和输出. Input 两个用空格隔开的整数a和b. Output 按先大后小的顺序输出a和b,用 ...