C++ list容器学习总结
----------------------------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容器学习总结的更多相关文章
- Docker容器学习梳理 - 应用程序容器环境部署
关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...
- Docker容器学习梳理 - 日常操作总结
使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- Java容器学习——List
Java容器学习--List 基础知识 数组: 优点:随机存取,可以快速访问元素 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: 优点: ...
- 【Ansible】ansible容器学习环境搭建
想要学习ansible,只有一个节点肯定是不行的,而搭建虚拟机又是一件非常费时费力费资源的事情,所以通过docker 快速搭建一个容器学习环境是一个不错的选择 1. 了解ansible部署 1.1 需 ...
- [原]容器学习(一):动手模拟spring的IoC
介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...
- C++容器学习,与结构体排序和set来一场邂逅
最近学习C++容器,积累一下.下面介绍set和multiset,并使用sort对结构体进行排序.C++之路漫漫其修远兮! 一.对结构体进行排序 // sort_struct.cpp : 定义控制台应用 ...
- 并发容器学习—ConcurrentSkipListMap与ConcurrentSkipListSet 原
一.ConcurrentSkipListMap并发容器 1.ConcurrentSkipListMap的底层数据结构 要学习ConcurrentSkipListMap,首先要知道什么是跳表或跳 ...
- Docker容器学习与分享07
Docker容器网络 在分享06中学完了bridge网络,接着学习none网络和host网络. Docker在安装时会在host上默认创建三个网络,分别是bridge.host.null. [root ...
- Docker容器学习与分享06
Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...
随机推荐
- 在 JavaScript 中,判断一个对象是否为空有几种方法。
使用 Object.keys() 方法检查对象的键值对数量: function isObjectEmpty(obj) { return Object.keys(obj).length === 0; } ...
- Microsoft.NETCore.App 版本不一致导致的运行失败
场景重现 今天新建了一个 ASP.NET Core 的项目, 通过 Web Deploy 顺利发布到IIS上后, 但访问时出现如下异常: 异常原因 通过手动执行dotnet命令发现运行框架版本不一致? ...
- .net core-利用OpenObserve 实现OpenTelemetry可观测性标准(Logs,Traces,Metrics)
1. 什么是 OpenObserve? OpenObserve 是一个开源的可观测性平台(支持日志.指标.追踪),旨在成为 Elasticsearch/Datadog 的轻量级替代方案. 它支持通过 ...
- DevOps工程师技能
技术背景 DevOps工程师必须持有计算机科学.工程或其他相关领域的学位.2年以上工作经验.这包括开发人员.系统管理员或devops驱动的团队成员的工作.这是一个重要的需求,同时也是对所有IT操作的理 ...
- jmeter使用之请求体包含多个数据
在使用jmeter做压测时,除了增加并发数,还可能在请求体中增加多个字段相同的list.如图: 如果是几百条可以复制粘贴,但是几千上万条复制粘贴就比较费时费力了.另外可能这些数据并不是完全相同,可能还 ...
- 解决微信二维码接口接口返回:errcode\":47001,\"errmsg\":\"data format error rid: xxx和处理返回的buffer的问题
data format error rid问题: 在php中使用curl调用微信二维码生成接口getwxacodeunlimit时得到错误响应信息: errcode\":47001,\&qu ...
- 备份一个迭代查找TreeViewItem的辅助函数
private TreeViewItem FindTreeItem(TreeViewItem item, Func<TreeViewItem, bool> compare) { if (i ...
- 可视化图解算法:按之字形顺序打印二叉树( Z字形、锯齿形遍历)
1. 题目 描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 数据范围:0≤n≤1500,树上每个节点的val满足 |val| <= 1500 ...
- 基于CARLA与PyTorch的自动驾驶仿真系统全栈开发指南
引言:自动驾驶仿真的价值与技术栈选择 自动驾驶作为AI领域最具挑战性的研究方向之一,其开发流程需要经历"仿真测试-闭环验证-实车部署"的完整链路.其中,高保真仿真平台为算法迭代提供 ...
- EFCore 实体追踪
理解: EFCore通过一种机制实时追踪实体的属性是否有改变的一种机制,比如下方代码 通过EFCore查出来的数据List集合里的实体,在item.Manager = "菲菲";属 ...