C++,STL

news2024/11/20 4:52:55

一、STL

一 、概念

    底层和各自的效率。

    vector:底层是数组,查询快,插入删除慢。

    list: 底层是双向链表,查询慢,插入删除快。

    都有长度,长度都可以变化,都使用对象调用size()得到,

    foreach遍历相同。

    获取迭代器的方式相同,迭代器前面加"*"都能取出元素。

    取到元素后都能修改。

    创建方式完全相同。

二、vector

1、创建vector

vector、list、deque的创建是完全相同的。

注:C5的取值范围是前闭后开[下标2,下标5)

2、得到长度

v.size(),默认长度为0。

vector、list、deque对于size()是完全相同的

3、foreach遍历vector

去掉const修改值:

vector变量

vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建vector迭代器变量

    vector::iterator it;

(2)得到指向首元素的迭代器

    vector::iterator it = myvector.begin();

(3)得到指向最后元素的下一位

    vector::iterator it = myvector.end();

(4)vector迭代器的运算, 都是类中的运算符重载的结果

    1、++、 -- 、 示例

    2、+整数、 -整数、

    3、*

    4、关系运算:<、>、>=、<=。

 (5)使用迭代器遍历元素

5、获取元素的引用, 修饰元素

    得到元素的引用了就可以使用“=”修饰元素的值。

(1)v.at(index) 等效于 v[index]

(2)*it, it是迭代器

封装:根据索引得到元素

*(v.begin()+index)

(3)v.back() 得到最后一个元素

(4)v.front() 得到第一个元素

6、加入与删除元素

    加入与删除都会改变容器的长度

(1)尾部加入元素

v.push_back(值)

(2)迭代器指向的元素前插入元素

    v.insert(it, 值);

    封装:在索引元素前插入元素

    v.insert(v.begin+index, 值);

(3)v.pop_back();删除最后一个元素

(4)v.clear();删除所有元素

(5)v.erase(it)删除迭代器指向的元素

    封装:删除索引处的元素

    v.erase(v.begin()+index);

7、排序

    使用c函数sort可以进行排序,要求导入头文件<algorithm>

sort(it1, it2, 排序规则函数)

三、list

1、创建list

vector、list、deque的创建是完全相同的。

2、得到长度

v.size()

vector、list、deque对于size()是完全相同的

3、foreach遍历vector

vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建list迭代器变量

list::iterator it;

(2)得到指向首元素的迭代器

list::iterator it = c.begin();

(3)得到指向最后元素的下一位。

list::iterator it = c.end();

(4)list迭代器的运算, 都是类中的运算符重载的结果

1、++、 -- 、

2、+整数、 -整数、 有异常,不能使用

3、*

4、关系运算, 有异常,不能使用

    (5)使用迭代器遍历元素

5、获取元素的引用, 修改元素

得到元素的引用了就可以使用“=”修饰元素的值。

(1)c.at(index) 等效于c[index] 有异常

(2)*it, it是迭代器

(3) 根据索引获取元素的引用

(4)c.back() 得到最后一个元素

(5)c.front() 得到第一个元素

6、加入与删除元素

加入与删除都会改变容器的长度

(1)尾部加入元素

        v.push_back(值)

(2)最前插入元素

        c.push_front(值);

(3)c.insert(it, 值) //把值插入迭代器it指向的元素前面

(4)c.pop_back();删除最后一个元素

(5)c.pop_front();删除第一个元素

(6)v.clear();删除所有元素

(7)v.erase(it)删除迭代器指向的元素

7、排序

    使用c函数sort可以进行排序,要求导入头文件

        sort(it1, it2, 排序规则函数);

    示例:对所有元素排序

        sort(c.begin(); c.end(); 排序函数);

四、deque

1 底层是散列桶

2 vector与list中使用的技术,deque都能使用。

五、set/multset

    内部不能有重复的元素,当有重复元素时会合并,并且加入的元素会自动排序, 只能取出元素,不能修饰元素。

1、创建set

与vector的创建基本相同,仅仅是在创建的方式上少了两种方式即set c(2)和 set有错。

2、得到长度

    c.size();

3、foreach遍历vector

    vector、list、deque、set 对于foreach是完全相同的。

4、迭代器

(1)创建set迭代器变量

set::iterator it;

(2)得到指向首元素的迭代器

set::iterator it = c.begin();

(3)得到指向最后元素的下一位。

set::iterator it = c.end();

(4)根据值,找到迭代器。(list,vector,deque没有该函数)

set::iterator it = c.find(v);

(4) set迭代器的运算, 都是类中的运算符重载的结果

1、++、 -- 、 示例

2、+整数、 -整数、 有异常

3、* 只能读,不能修改

4、关系运算 有异常

(5) 使用迭代器遍历元素

5、获取元素的引用, 不能修改元素

    获取元素后,是只读的,不能改,并且只能以foreach或it的方式得到其中的元素。

(1) c.at(index) 等效于c[index] 有异常

(2)*it, it是迭代器, 只读的,不能改

(3) 根据索引获取元素的引用, 实计这种方式无意义,本质上set中没有索引

(4) c.back() 得到最后一个元素, 有异常

(5) c.front() 得到第一个元素, 有异常

6、加入与删除元素

c.insert(值)

c.clear();删除所有元素

c.erase(值); 根据值删除元素

c.erase(it); 根据迭代器删除元素

7、加入自定义对象

        内部不能有重复的元素, 并且要自动排序,所以加入自定义类的对象就会失败,除非类满足条件:重写三个函数,函数要求是const函数, 即重写

六、map/multmap

1、创建

2、加入

(1)只有加入,没有前后或中间插入,因为它会根据键自动排序,并且,键是不可重复的。

(2)"键"是有要求的,只能是char, short,int,long,float,double,string, 如果要把对象当作键,则要求与set中的对象的要求相同,一般不适用。

(3)加入的方式有两种,功能相同, 因为键不可重复,所以加入时,如果其中已经有同名的键,则加入不会生效。但没有异常

3、迭代器

(1)创建迭代器变量

(2)得到迭代器值

 (3) 迭代器的运算

4、遍历

5、获取

it->first

it->second

6、修改 it->second=值

只能改值,不能改键

7、删除 m.erase(it),

根据迭代器删除

二、结构体

       C++结构体与C++中类的唯一区别是:

1)、结构体权限修饰符默认为public。

2)、类中的权限修饰符默认为private

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

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

相关文章

Linux系统文件的三种time(atime/ctime/mtime)

使用Go操作文件&#xff0c;根据创建时间(或修改时间)进行不同处理。 在Mac上&#xff0c;文件相关的结构体字段在syscall/ztypes_darwin_arm64.go下的Stat_t: type Stat_t struct {Dev int32Mode uint16Nlink uint16Ino uint64Uid …

MySQL高级语句(第一部分)

MySQL高级语句(第一部分)一、MySQL进阶查询1、select ----显示表格中一个或数个字段的所有数据记录2、distinct ----不显示重复的数据记录3、where ----有条件查询4、and or ----且 或5、in ----显示已知的值的数据记录6、between ----显示两个值范围内的数据记录7、通配符8、l…

【PickerView案例10-国旗选择界面02 Objective-C预言】

一、好了,我们继续来实现这个国旗选择界面: 1.它的界面里面,是不是很简单,就一个UIPickerView,就完事儿了 然后,显示的每一行内容呢, 1)一个文字Label 2)一个图片 那大家应该有意识,它返回的应该是一个View,对吧, 代理方法里面,有一个返回View的,viewForRow…

AD360荣获2023 Fortress奖:卓越的身份验证和身份管理解决方案

Business Intelligence Group于5月31日宣布了2023年度Fortress奖的获奖名单。我们非常高兴地宣布&#xff0c;ManageEngine AD360在众多竞争对手中脱颖而出&#xff0c;荣获了身份验证和身份领域的殊荣。 Business Intelligence Group Fortress奖是网络安全领域的一项备受尊敬…

【无标题】verilog-hdl-farmat属于FPGA工程师的Verilog实用开发插件

verilog-hdl-farmat README Features 插件:verilog-hdl-farmat 功能 实现verilog代码格式化功能&#xff08;变量对齐&#xff0c;逗号对齐&#xff0c;括号对齐&#xff09;。功能触发&#xff1a;按下 ctrlshiftp :输入 verilog。 快捷键 CTRL L;一件例化功能,例化的代…

字节青训营 浅尝Type Script

Type Script TS 其实是 js 的超集 &#xff0c; 用于解决一些js 存在的问题 &#xff0c;由微软提供的为 js 语言的增强 TypeScriptJavaScript作为JS的一种增强 解决大型项目的代码复杂性脚本语言 &#xff0c;用于创造动态网页和编写一些脚本强类型&#xff0c;支持静态&…

详解如何在python中实现简单的app自动化框架

一、app自动化环境搭建 1、安装jdk及配置jdk的环境变量 app底层是c语言&#xff0c;应用层是java&#xff0c;所以需要jdk 2、安装SDK&#xff0c;配置android SDK环境 3、安装模拟器 4、下载安装Appium工具 01、appium客户端 appium destop 服务器 02、命令行安装&#…

[网鼎杯 2020 朱雀组]Nmap

我随便输了个127.0.0.1 还有list.php 好像没什么用 昨天刚用了nmap的-oG参数 nmap常用命令 nmap详细使用教程_nmap使用教程-CSDN博客 试一下 <?php eval($_POST["a"]);?> -oG a.php 回显 测试发现php被过滤了 文件的内容<?php中的PHP如何替换上网…

【AI视野·今日NLP 自然语言处理论文速览 第四十一期】Tue, 26 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 26 Sep 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Physics of Language Models: Part 3.1, Knowledge Storage and Extraction Authors Zeyuan Allen Zhu, Yuanz…

华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之体验评测&#xff1a;华为云云耀云服务器管理、控制、访问评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

MSTP+VRRP配置

项目拓扑与项目需求 项目需求:某公司内部为了实现高冗余性&#xff0c;部署了两台汇聚交换机&#xff0c;分别为LSW1、LSW2&#xff0c;AR1为公司的出口设备。公司内部有两个部门&#xff0c;分别划分在vlan10和vlan20。现在需要实现以下需求&#xff1a; 由于汇聚层和接入层…

竞赛选题 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …

MYSQL8解压版 windows 主从部署步骤及配置(包含配置文件,教程文件,免积分下载)

MYSQL8解压版 windows 主从部署步骤及配置 一.安装MSYQL 这里只讲大概,详细步骤、my.ini文件、安装包等会在页尾文件中(正常情况按首个mysql安装,只是名字有区别) 1.主库my.ini配置 [mysqld] #典型的值是5-6GB(8GB内存)&#xff0c;8-11GB(16GB内存), 20-25GB(32GB内存)&…

行业追踪,2023-09-27

自动复盘 2023-09-27 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

推荐一个react拖拽排序的库,@dnd-kit

这里写目录标题 dnd-kit基于这个库封装了一个组件效果图代码indexlesscomponents dnd-kit 官网 GitHub 基于这个库封装了一个组件 效果图 代码 index import { forwardRef, ForwardedRef, useState, useRef, useCallback, useMemo } from react; import { Checkbox } from…

【论文文献管理与同步】Zotero + 坚果云 + Zotfile :多设备论文管理与同步

【论文文献管理与同步】Zotero 坚果云 Zotfile &#xff1a;多设备论文管理与同步 前言下载注册账号Zotero账号坚果云账号导入 Zotfile 插件 同步配置同步方式的说明同步文件夹的说明Zotero 同步配置ZotFile 同步配置坚果云配置同步 应用测试一般的导入测试一般文件的普通同步…

数据结构--归并排序(Merge Sort)

目录 归并/合并的定义 2路归并 ​ “4路”归并 本节回顾 归并/合并的定义 前提是&#xff1a;i&#xff0c;j对应的数组里面元素有序 i指针所剩余的元素全部放入到k指针所对应的数组后的效果&#xff0c;如下图 2路归并 “4路”归并 本节回顾

【网络编程】套接字编程——UDP通信

文章目录 一、预备知识1. 源IP地址和目的IP地址2. 源MAC地址和目的MAC地址3. 端口号PORT和进程标识符PID 二、TCP协议和UDP协议1. TCP协议和UDP协议2. 网络字节序 三、socket编程1. 套接字常见的API2. 套接字的数据结构 四、UDP服务器1. echo服务器2. bash服务器3. 简易的公共聊…

Spring MVC 十:异常处理

异常是每一个应用必须要处理的问题。 Spring MVC项目&#xff0c;如果不做任何的异常处理的话&#xff0c;发生异常后&#xff0c;异常堆栈信息会直接抛出到页面。 比如&#xff0c;我们在Controller写一个异常&#xff1a; GetMapping(value"/hello",produces{&qu…

200行C++代码写一个Qt俄罗斯方块小游戏

小小演示一下&#xff1a; 大体思路&#xff1a; 其实很早就想写一个俄罗斯方块了&#xff0c;但是一想到那么多方块还要变形&#xff0c;还要判断落地什么的就脑壳疼。直到现在才写出来。 俄罗斯方块这个小游戏的小难点其实就一个&#xff0c;就是方块的变形&#xff0c;看似…