----------------------------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. 在 JavaScript 中,判断一个对象是否为空有几种方法。

    使用 Object.keys() 方法检查对象的键值对数量: function isObjectEmpty(obj) { return Object.keys(obj).length === 0; } ...

  2. Microsoft.NETCore.App 版本不一致导致的运行失败

    场景重现 今天新建了一个 ASP.NET Core 的项目, 通过 Web Deploy 顺利发布到IIS上后, 但访问时出现如下异常: 异常原因 通过手动执行dotnet命令发现运行框架版本不一致? ...

  3. .net core-利用OpenObserve 实现OpenTelemetry可观测性标准(Logs,Traces,Metrics)

    1. 什么是 OpenObserve? OpenObserve 是一个开源的可观测性平台(支持日志.指标.追踪),旨在成为 Elasticsearch/Datadog 的轻量级替代方案. 它支持通过 ...

  4. DevOps工程师技能

    技术背景 DevOps工程师必须持有计算机科学.工程或其他相关领域的学位.2年以上工作经验.这包括开发人员.系统管理员或devops驱动的团队成员的工作.这是一个重要的需求,同时也是对所有IT操作的理 ...

  5. jmeter使用之请求体包含多个数据

    在使用jmeter做压测时,除了增加并发数,还可能在请求体中增加多个字段相同的list.如图: 如果是几百条可以复制粘贴,但是几千上万条复制粘贴就比较费时费力了.另外可能这些数据并不是完全相同,可能还 ...

  6. 解决微信二维码接口接口返回:errcode\":47001,\"errmsg\":\"data format error rid: xxx和处理返回的buffer的问题

    data format error rid问题: 在php中使用curl调用微信二维码生成接口getwxacodeunlimit时得到错误响应信息: errcode\":47001,\&qu ...

  7. 备份一个迭代查找TreeViewItem的辅助函数

    private TreeViewItem FindTreeItem(TreeViewItem item, Func<TreeViewItem, bool> compare) { if (i ...

  8. 可视化图解算法:按之字形顺序打印二叉树( Z字形、锯齿形遍历)

    1. 题目 描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 数据范围:0≤n≤1500,树上每个节点的val满足 |val| <= 1500 ...

  9. 基于CARLA与PyTorch的自动驾驶仿真系统全栈开发指南

    引言:自动驾驶仿真的价值与技术栈选择 自动驾驶作为AI领域最具挑战性的研究方向之一,其开发流程需要经历"仿真测试-闭环验证-实车部署"的完整链路.其中,高保真仿真平台为算法迭代提供 ...

  10. EFCore 实体追踪

    理解: EFCore通过一种机制实时追踪实体的属性是否有改变的一种机制,比如下方代码 通过EFCore查出来的数据List集合里的实体,在item.Manager = "菲菲";属 ...