20230507,LIST容器

学了又忘学了又忘,明知道会忘又不想复习又还得学

LIST容器

1.1 基本概念

 链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序通过链表中的指针链接实现的;链表由一系列结点组成
结点:一个是存储数据元素的数据域,一个是存储下一个结点地址的指针域
STL中的链表是一个双向循环链表,迭代器只支持前移和后移(不支持跳跃式访问),属于双向迭代器

优点:可以对任意位置进行快速插入或删除元素,操作方便,修改指针即可,不需要移动大量元素;动态内存分配,不会造成内存浪费和溢出
缺点:容器遍历速度没有数组快,占用空间比数组灵活,但空间(指针域)和时间(遍历)额外耗费巨大

LIST有一个重要的性质,插入和删除都不会造成原有LIST迭代器的失效,这在VECTOR里面是不成立的
STL中LIST和VECTOR是两个最常使用容器,各有优缺点

1.2 构造函数

 list<T> lst;             //采用模板类实现,对象的默认构造形式
list(beg,end);            //首尾区间拷贝
list(n,elem);             //N个ELEM拷贝
list(const list &lst);    //拷贝构造函数

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
list<T> lst;             //采用模板类实现,对象的默认构造形式
list(beg,end);            //首尾区间拷贝
list(n,elem);             //N个ELEM拷贝
list(const list &lst);    //拷贝构造函数
*/
void printl(const list<int>& l) {for (list<int>::const_iterator it = l.begin(); it != l .end(); it++) {cout << *it << " ";}cout << endl;
}
void test01() {list<int>l;            // list<T> lst;l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);printl(l);list<int>l2(l.begin(), l.end());printl(l2);list<int>l3(5,100);printl(l3);list<int>l4(l);printl(l4);
}
int main() {test01();system("pause");return 0;
}
1.3 赋值和交换

 assign(beg,end);
assign(n,elem)
list &operator=(const list &lst);
swap(lst)

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
assign(beg,end);
assign(n,elem)
list &operator=(const list &lst);
swap(lst)
*/
void printl(const list<int>& l) {for (list<int>::const_iterator it = l.begin(); it != l .end(); it++) {cout << *it << " ";}cout << endl;
}
void test01() {list<int>l;            // list<T> lst;l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);printl(l);list<int>l2;l2.assign(l.begin(), l.end());printl(l2);l2.assign(9, 78);printl(l2);cout <<"l2.size()="<< l2.size() << endl;list<int>l3;l3 = l;printl(l3);cout << "l3.size()=" << l3.size() << endl;l3.swap(l2);printl(l2);cout << "l2.size()=" << l2.size() << endl;printl(l3);cout << "l3.size()=" << l3.size() << endl;
}
int main() {test01();system("pause");return 0;
}
1.4 大小操作

empty()
size()
lst.resize(n,elem)
lst.resize(n) 

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
empty()
size()
lst.resize(n,elem)
lst.resize(n)
*/
void printl(const list<int>& l) {for (list<int>::const_iterator it = l.begin(); it != l .end(); it++) {cout << *it << " ";}cout << endl;
}
void isempty(const list<int>& l) {if (l.empty()) {cout << "空" << endl;}else {cout << " bubu <" << endl;cout << " size:" << l.size() << endl;}
}
void test01() {list<int>l;            // list<T> lst;isempty(l);l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);printl(l);isempty(l);l.resize(10, 99);printl(l);isempty(l);l.resize(2);printl(l);isempty(l);
}
int main() {test01();system("pause");return 0;
}
1.5 插入和删除——代码有BUG,暂时搞不懂

push_back(elem)    push_front(elem)    pop_back()     pop_front()
insert(pos,elem)返回新数据位置    insert(pos,n,elem)无返回值    insert(n,beg,end)无返回值
cleae()    erase(beg,end)返回下一个数据位置    erase(pos)返回下一个数据位置  
remove(elem)删除容器中所有值与ELEM匹配的元素 

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
push_back(elem)  push_front(elem)  pop_back()   pop_front()
insert(pos,elem)返回新数据位置  insert(pos,n,elem)无返回值  insert(n,beg,end)无返回值
cleae()  erase(beg,end)返回下一个数据位置  erase(pos)返回下一个数据位置  
remove(elem)删除容器中所有值与ELEM匹配的元素
*/
void printl(const list<int>& l) {for (list<int>::const_iterator i = l.begin(); i != l .end(); i++) {cout << *i<< " ";}cout << endl;
}
void isempty(const list<int>& l) {if (l.empty()) {cout << "空" << endl;}else {cout << " bubu <" << endl;cout << " size:" << l.size() << endl;}
}
void test01() {list<int>l;         l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);l.push_front(111);l.push_front(222);l.push_front(333);printl(l);isempty(l);l.pop_back();l.pop_front();printl(l);list<int>::iterator it = l.begin();//l.insert(it,10000);it++;//cout << it << endl;l.insert(it, 4);//在第 1 个位置后面 插入,返回新数据位置 2printl(l);it++;//it--2,it++=3l.insert(it, 99,3);//在第 3 个位置后面 插入,it= 4+99=103printl(l);l.insert(it,l.begin(),l.end());//在第 it 个位置后面 插入printl(l);l.erase(it);printl(l);//l.erase(it);//加上就报错,说无效参数传……*&&(*&(……//l.erase(l.end());//l.remove(3);printl(l);l.erase(l.begin());printl(l);l.clear();printl(l);
}
int main() {test01();system("pause");return 0;
}
1.6 数据存取

front()          back(),不支持中括号的方式访问,本质是链表,因为不是连续的线性空间存储数据,迭代器也不支持随机访问
++,--就是支持双向,+N就是支持随机

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
front()          back()
*/
void printl(const list<int>& l) {for (list<int>::const_iterator i = l.begin(); i != l .end(); i++) {cout << *i<< " ";}cout << endl;
}
void isempty(const list<int>& l) {if (l.empty()) {cout << "空" << endl;}else {cout << " bubu <" << endl;cout << " size:" << l.size() << endl;}
}
void test01() {list<int>l;         l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);l.push_front(111);l.push_front(222);l.push_front(333);printl(l);isempty(l);cout << l.front() << endl;cout << l.back() << endl;}
int main() {test01();system("pause");return 0;
}
1.7 反转和排序

reverse()//反转链表    sort()链表排序——升序降序

#include<iostream>
#include<list>
#include<string>
#include<algorithm>
using namespace std;
/*
reverse()//反转链表    sort()链表排序
*/
void printl(const list<int>& l) {for (list<int>::const_iterator i = l.begin(); i != l .end(); i++) {cout << *i<< " ";}cout << endl;
}
bool mycompare(int v1, int v2) {//降序,第一个数,大于,第二个数return v1 > v2;
}
void test01() {list<int>l;         l.push_back(10);l.push_back(20);l.push_back(30);l.push_back(40);l.push_front(111);l.push_front(222);l.push_front(333);printl(l);l.reverse();printl(l);//sort(l.begin(),l.end());//所有不支持随机访问迭代器的容器,不可以用标准算法//但容器内部会提供对应的一些算法,成员函数l.sort();printl(l);l.sort(mycompare);printl(l);
}
int main() {test01();system("pause");return 0;
}
1.8 排序案例——Person自定义数组类型进行排序,Person(姓名,年龄,身高)
年龄升序,年龄相同身高降序

先指定排序规则,再直接调用

#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
Person自定义数组类型进行排序,Person(姓名,年龄,身高)
年龄升序,年龄相同身高降序
*/
class Person {
public:Person(string name, int age, int tall) {this->_name = name;this->_age = age;this->_tall = tall;}
public:string _name;int _age;int _tall;
};
void printl(const list<Person>& l) {for (list<Person>::const_iterator it = l.begin(); it != l .end(); it++) {cout << "选手: " << it->_name << "\t年龄: " << it->_age << "\t身高:" << it->_tall << endl;}cout << endl;
}
void setpp(list<Person>& l) {Person p1("有哈", 18, 180);Person p2("hhki", 16, 190);Person p3("黄金分割", 22, 210);Person p4("会后i", 16, 130);Person p5("经济", 30, 150);l.push_back(p1);l.push_back(p2);l.push_back(p3);l.push_back(p4);l.push_back(p5);
}
void setpp2(list<Person>& l) {srand((unsigned int)time(NULL));string nameseed = "abcde";for (int i = 0; i < 5; i++) {string name = "选手";name += nameseed[i];int age = rand() % 21 + 20;int tall = rand() % 51 + 150;Person p(name, age, tall);l.push_back(p);}
}
//指定排序规则
bool mycompare(Person&p1,Person&p2) {if (p1._age == p2._age) {return p1._tall < p2._tall;}else {return p1._age < p2._age;}
}
void test01() {list<Person>l;         //setpp(l);setpp2(l);printl(l);l.sort(mycompare);printl(l);
}
int main() {test01();system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作&#xff0c;这就容易导致采取了OOD的数据。因此&#xff0c;IQL取消max,&#xff0c;通过一个期望回归算子…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员&#xff08;职员就职于一个职位&#xff09; 3.角色 //相当于 职位&#xff08;有多个职责&#xff09; 权限管理基础表&#xff1a;权限表&#xff0c;用户表&#xff0c;角色表 问题1&#xff1a;…

无法添加以供审核,提交以供审核时遇到意外错误。如果问题仍然存在,请联系我们

遇到问题&#xff1a; 无法添加以供审核 要开始审核流程&#xff0c;必须提供以下项目&#xff1a; 提交以供审核时遇到意外错误。如果问题仍然存在&#xff0c;请联系我们。 解决办法&#xff1a; 修改备案号为小写&#xff0c; 例如&#xff1a;京ICP备2023013223号-2A 改…

NumPy及Matplotlib基本用法

NumPy及Matplotlib基本用法 导语NumPy导入与生成算术运算N维数组广播元素访问 Matplotlib简单图案绘制多函数绘制图像显示参考文献 导语 深度学习中经常需要对图像和矩阵进行操作&#xff0c;好在python提供了Numpy和Matplotlib库&#xff0c;前者类似一个已经定义的数组类&am…

Error Code: 1449. The user specified as a definer (‘admin‘@‘%‘) does not exist

前言 在进行MySQL数据库迁移或存储过程部署时&#xff0c;您可能会遇到错误 [Err] 1449 - The user specified as a definer (admin%) does not exist。这篇文章将为您提供一个详细的解决方案&#xff0c;帮助您顺利解决这一问题。 错误背景 此错误通常发生在尝试执行一个存…

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速

Cloudflare的CDN系统基本上每个站长都家喻户晓&#xff0c;大家都知道大陆对于搭建网站的审核力度&#xff0c;以至于Cloudflare并没有大陆的泛播节点&#xff0c;有也是只有香港节点。但是这些节点对于海外是加速效果&#xff0c;对于大陆就是一个字慢&#xff0c;晚高峰的情况…

JavaScript异步编程——02-Ajax入门和发送http请求

同步和异步回顾 同步和异步的简单理解 同步&#xff1a;必须等待前面的任务完成&#xff0c;才能继续后面的任务。 异步&#xff1a;不受当前任务的影响。 拿排队举例&#xff1a; 同步&#xff1a;在银行排队时&#xff0c;只有等到你了&#xff0c;才能够去处理业务。 异…

【C/C++】设计模式——单例模式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

如何去官网下载windows10操作系统iso镜像

文章目录 一、先从微软中国官网https://www.microsoft.com/zh-cn/进去二、然后按图示一步步点进去三、点击下载工具这个工具会帮你生成windows操作系统iso文件四、下载好后一步步按图示要求成功操作一、先从微软中国官网https://www.microsoft.com/zh-cn/进去 二、然后按图示一…

分享三维地理模型制作实践

前言 地理信息系统&#xff08;GIS&#xff09;是一种用于捕获、存储、检查和显示与地球表面位置相关的数据的计算机系统。GIS可以在一张地图上显示许多不同类型的数据&#xff0c;如街道、建筑物和植被。这使人们能够更容易地看到、分析和理解模式和关系。 GIS可以使用包括位…

Nginx从入门到精通速成

文章目录 一. **Nginx** **的简介**1.1 什么是 **nginx**1.2 正向代理1.3 反向代理1.4 **负载均衡**1.5 动静分离 二. **Nginx** **的安装**三. **Nginx** **的常用的命令**四. **Nginx** **的配置文件**五. **Nginx** **配置实例**反向代理实例**1**5.1 实现效果5.2 准备工作5…

织梦云端:网络信号原理的艺术解码

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《织梦云端&#xff1a;网络信号原理的艺术解码》&#xff0c;在这篇文章中&#xff0c;你将会学习到网络信号原理以及应用&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图…

Elasticsearch:使用 MongoDB connector 同步数据到 Elasticsearch

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。Elasticsearch 是一个高效强…

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址&#xff1a;Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址&#xff1a; 链…

excel如何将多列数据转换为一列?

这个数据整理借用数据透视表也可以做到&#xff1a; 1.先将数据源的表头补齐&#xff0c;“姓名” 2.点击插入选项卡&#xff0c;数据透视表&#xff0c;在弹出对话框中&#xff0c;数据透视位置选择 现有工作表&#xff0c;&#xff08;实际使用时新建也没有问题&#xff09;…

Spring的基本应用

概述&#xff1a;Spring是由Rod Johnson组织开发的一个分层的java SE/EE一站式的轻量级开源框架&#xff0c;以IOC(控制反转)和AOP&#xff08;面向切面&#xff09;为核心&#xff0c;的开发模式。 注&#xff1a;喜欢的朋友可以关注公众号“JAVA学习课堂”系统学习相关技术&a…

Python自动化实战 —— 使用Selenium进行Web自动化!

为了完成一项重复的任务&#xff0c;你需要在网站上进行大量的点击和操作&#xff0c;每次都要浪费大量的时间和精力。Python的Selenium库就可以自动化完成这些任务。 在本篇文章中&#xff0c;我们将会介绍如何使用Python的Selenium库进行Web自动化&#xff0c;以及如何将它应…

学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)

什么是CPU缓存利用率&#xff08;命中率&#xff09;&#xff0c;我们首先要把内存搞清楚。 硬盘是什么&#xff0c;内存是什么&#xff0c;高速缓存是什么&#xff0c;寄存器又是什么&#xff1f; 我们要储存数据就要运用到上面的东西。首先里面的硬盘是可以无电存储的&#…

快速修改禅道系统的管理员密码

目录 通过 web 登录页面忘记密码&#xff08;推荐&#xff09;通过数据库&#xff0c;修改 zt_user 表 通过 web 登录页面忘记密码&#xff08;推荐&#xff09; 只能修改管理员密码。 打开禅道地址&#xff0c;点击忘记密码会显示下面的页面&#xff1a; 根据提示在服务器的相…

【busybox记录】【shell指令】shuf

目录 内容来源&#xff1a; 【GUN】【shuf】指令介绍 【busybox】【shuf】指令介绍 【linux】【shuf】指令介绍 使用示例&#xff1a; 打乱内容 - 默认输出 打乱内容 - 最多输出n行 打乱内容 - 将输出写入文件 打乱内容 - 重复输出 打乱内容 - 打乱本条指令的参数 打…