当前位置: 首页 > news >正文

STL、Vector和Set的讲解和例题分析

STL       

STL(Standard Template Library,标准模板库)是C++标准库的一部分,它提供了一系列通用的编程组件,包括容器、迭代器、算法和函数对象等。STL是C++中实现泛型编程的核心,它允许程序员使用模板编写与数据类型无关的代码。

STL的特点:

1.泛型编程:STL基于模板,支持泛型编程,允许编写与数据类型无关的代码。

2.容器:STL提供了多种容器,如vectorlistmapset等,用于存储和管理数据。

3.迭代器:STL使用迭代器作为访问容器元素的通用方法,它提供了一种统一的方式来遍历和操作容器。

4.算法:STL包含了一系列算法,如排序、搜索、复制等,这些算法可以应用于不同的容器和数据类型。

5.函数对象:STL中的函数对象(也称为仿函数)是重载了函数调用运算符的类,它们可以像函数一样被调用。

常见用法:

1.容器:使用STL容器来存储和管理数据集合,如vectorlistmapset等。

2.迭代器:使用迭代器来遍历容器中的元素,如使用vector::iteratorlist::iterator等。

3.算法:使用STL算法来处理容器中的数据,如sortfindcopy等。

4.函数对象:使用函数对象来实现自定义的算法逻辑,如greater<int>()less<int>()等。

经典C++例题:

题目:使用STL容器和算法对一组整数进行排序和去重。

示例代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>int main() {std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};// 对vector中的元素进行排序std::sort(vec.begin(), vec.end());// 使用unique算法去除重复元素auto last = std::unique(vec.begin(), vec.end());// 删除重复元素后的尾部vec.erase(last, vec.end());// 使用迭代器遍历排序后的vectorfor (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

例题分析

1.排序:使用std::sort算法对vector中的元素进行排序。sort函数接受两个迭代器参数,分别指向要排序的范围的开始和结束。

2.去重:使用std::unique算法去除vector中的重复元素。unique函数将重复的元素移动到vector的末尾,并返回一个指向新的无重复元素范围末尾的迭代器。

3.删除重复元素:使用vectorerase成员函数删除unique算法处理后vector末尾的重复元素。

4.使用迭代器遍历:创建一个std::vector<int>::iterator类型的迭代器it,并将其初始化为指向vector的开始位置。在for循环中,使用迭代器it来访问vector中的每个元素。

5.输出结果:在for循环中,使用*it来解引用迭代器,获取当前指向的元素,并将其打印出来。

        这个例题展示了如何在C++中使用STL容器和算法来对一组整数进行排序和去重,并使用迭代器来遍历排序后的vector。通过这个例子,可以更好地理解STL在处理数据集合和算法操作中的应用,以及如何使用STL来高效地解决问题。STL提供了一套丰富的组件,使得数据结构和算法的实现变得简单和直观。

Vector

vector是C++标准模板库(STL)中的一个动态数组容器,它能够存储任意类型的元素,并且能够根据需要自动调整其大小。vector提供了快速的随机访问能力,可以通过索引直接访问元素,同时也支持在尾部添加和删除元素的高效操作。

vector的特点:

1.动态数组vector类似于动态数组,可以在运行时增加或减少其大小。

2.快速访问vector提供了与数组相同的快速随机访问能力,可以通过索引直接访问元素。

3.尾部操作高效:在vector的尾部添加和删除元素是非常高效的,因为这些操作不需要移动现有元素。

4.中间和头部操作低效:在vector的中间或头部进行插入和删除操作通常需要移动大量的元素,因此效率较低。

5.自动内存管理vector在超出作用域时会自动释放其占用的内存。

常见用法:

1.存储动态集合:当需要存储一个大小可变的集合时,可以使用vector

2.快速随机访问:当需要快速访问集合中的元素时,可以使用vector

3.尾部操作:当需要频繁在集合的尾部添加或删除元素时,可以使用vector

4.排序和搜索:当需要对集合进行排序或搜索时,可以使用vector,并结合STL算法如sortbinary_search

经典C++例题:

题目:使用vector存储一系列整数,并使用STL算法对其进行排序和去重。

示例代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>int main() {std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};// 对vector中的元素进行排序std::sort(vec.begin(), vec.end());// 使用unique算法去除重复元素auto last = std::unique(vec.begin(), vec.end());// 删除重复元素后的尾部vec.erase(last, vec.end());// 使用迭代器遍历排序后的vectorfor (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

例题分析

1.排序:使用std::sort算法对vector中的元素进行排序。sort函数接受两个迭代器参数,分别指向要排序的范围的开始和结束。

2.去重:使用std::unique算法去除vector中的重复元素。unique函数将重复的元素移动到vector的末尾,并返回一个指向新的无重复元素范围末尾的迭代器。

3.删除重复元素:使用vectorerase成员函数删除unique算法处理后vector末尾的重复元素。

4.输出结果:使用范围for循环遍历并输出排序和去重后的vector中的元素。

这个例题展示了如何在C++中使用vector和STL算法来对一组整数进行排序和去重。通过这个例子,可以更好地理解vector在处理动态数组和算法操作中的应用,以及如何使用vector和STL算法来高效地解决问题。vector提供了一种灵活且高效的方式来存储和操作动态集合。

set是C++标准模板库(STL)中的一个容器,它存储的元素是唯一的,并且是有序的。set内部通常使用红黑树实现,因此它提供了对数时间复杂度的插入、删除和查找操作。由于set中的元素是唯一的,所以它不支持直接通过索引访问元素,因为没有索引的概念。

Set

set的特点:

1.唯一性set中的元素是唯一的,不允许重复的元素存在。

2.有序性set中的元素是有序的,可以按照升序或降序排列。

3.自动排序:当插入元素时,set会自动将元素按照特定的顺序排列。

4.快速查找:由于元素是有序的,set提供了快速的查找操作。

5.不支持随机访问:由于set是基于红黑树实现的,它不支持通过索引快速访问元素。

常见用法:

1.存储唯一元素集合:当需要存储一组唯一的元素时,可以使用set

2.排序集合:当需要一个有序的集合时,可以使用set

3.快速查找:当需要快速查找集合中的元素时,可以使用set

4.去重:当需要去除重复元素时,可以使用set

经典C++例题:

题目:使用set存储一系列整数,并使用STL算法对其进行排序和去重。

示例代码

#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>int main() {std::set<int> myset = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};// 使用迭代器遍历setfor (std::set<int>::iterator it = myset.begin(); it != myset.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

例题分析

1.创建set:使用std::set<int>创建一个整数类型的set,并初始化为包含一系列整数。

2.遍历set:使用范围for循环遍历set中的所有元素。由于set是有序的,元素将按照升序排列。

3.输出结果:在循环中,使用*it来解引用迭代器,获取当前指向的元素,并将其打印出来。

这个例题展示了如何在C++中使用set来存储和管理唯一元素集合,并使用迭代器来遍历set中的元素。通过这个例子,可以更好地理解set在处理唯一元素集合和有序集合中的应用,以及如何使用set来高效地解决问题。set提供了一种简单且高效的方式来存储和操作唯一元素集合。

相关文章:

STL、Vector和Set的讲解和例题分析

STL STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;它提供了一系列通用的编程组件&#xff0c;包括容器、迭代器、算法和函数对象等。STL是C中实现泛型编程的核心&#xff0c;它允许程序员使用模板编写与数…...

Android 13 aosp hiddenapi config

Android 11 hiddenapi路径 frameworks/base/config/hiddenapi-greylist-packages.txtAndroid 13 hiddenapi路径 frameworks/base/boot/hiddenapi/hiddenapi-unsupported-packages.txt...

数据仓库面试总结

文章目录 1.什么是数据仓库&#xff1f;2.ETL是什么&#xff1f;3.数据仓库和数据库的区别&#xff08;OLTP和OLAP的区别&#xff09;4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度&#xff1f;5.2什么是指标&#xff1f; 6.什么是数仓建模&#xff1f;7.事实表7.维度表…...

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是&#xff1a;原来的仓库换了网址&#xff0c;原版网址不可用了。 解决方法如下&#xff1a; 方法一&#xff1a;查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…...

[C++][算法基础]堆排序(堆)

输入一个长度为 n 的整数数列&#xff0c;从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m。 第二行包含 n 个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 m 个整数&#xff0c;表示整数数列中前 m 小的数。 数据范围 1≤m≤n≤&#x…...

备考ICA----Istio实验15---开启 mTLS 自动双向认证实验

备考ICA----Istio实验15—开启mTLS自动双向认证实验 在某些生成环境下,我们希望微服务和微服务之间使用加密通讯方式来确保不被中间人代理. 默认情况下Istio 使用 PERMISSIVE模式配置目标工作负载,PERMISSIVE模式时,服务可以使用明文通讯.为了只允许双向 TLS 流量&#xff0c;…...

Hive SchemaTool 命令详解

Hive schematool 是 hive 自带的管理 schema 的相关工具。 列出详细说明 schematool -help直接输入 schematool 或者schematool -help 输出结果如下&#xff1a; usage: schemaTool-alterCatalog <arg> Alter a catalog, requires--catalogLocation an…...

51单片机入门_江协科技_17~18_OB记录的笔记

17. 定时器 17.1. 定时器介绍&#xff1a;51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成&#xff0c;无需占用CPU外围IO接口&#xff1b; 定时器作用&#xff1a; &#xff08;1&#xff09;用于计时系统&#xff0c;可实现软件计时&…...

xss.pwnfunction-Ah That‘s Hawt

<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 &#xff0c;当页面或元素加载完成时&#xff0c;onload 事件会被触发&#xff0c;从而可以执行相应的 JavaScript 函数...

Python学习从0开始——005数据结构

Python学习从0开始——005数据结构 一、列表list二、元组和序列三、集合四、字典五、循环技巧六、条件控制七、序列和其它类型的比较 一、列表list 不是所有数据都可以排序或比较。例如&#xff0c;[None, ‘hello’, 10] 就不可排序&#xff0c;因为整数不能与字符串对比&…...

力扣每日一题:LCR112--矩阵中的最长递增路径

题目 给定一个 m x n 整数矩阵 matrix &#xff0c;找出其中 最长递增路径 的长度。 对于每个单元格&#xff0c;你可以往上&#xff0c;下&#xff0c;左&#xff0c;右四个方向移动。 不能 在 对角线 方向上移动或移动到 边界外&#xff08;即不允许环绕&#xff09;。 示例…...

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5&#xff0c;有点难搞&#xff08;这个东西有点老&#xff0c;版本冲突有些包废弃了等等&#xff09; 最后换到ubuntu系统弄了&#xff0c;下面是我的整体步骤&#xff08;建议先使能一下ssh&#xff08;最下面有&#xff09;&#xff0c;结合…...

2024 年最新使用 Wechaty 开源框架搭建部署微信机器人(微信群智能客服案例)

读取联系人信息 获取当前机器人账号全部联系人信息 bot.on(ready, async () > {console.log("机器人准备完毕&#xff01;&#xff01;&#xff01;")let contactList await bot.Contact.findAll()for (let index 0; index < contactList.length; index) {…...

Redis从入门到精通(九)Redis实战(六)基于Redis队列实现异步秒杀下单

↑↑↑请在文章开头处下载测试项目源代码↑↑↑ 文章目录 前言4.5 分布式锁-Redisson4.5.4 Redission锁重试4.5.5 WatchDog机制4.5.5 MutiLock原理 4.6 秒杀优化4.6.1 优化方案4.6.2 完成秒杀优化 4.7 Redis消息队列4.7.1 基于List实现消息队列4.7.2 基于PubSub的消息队列4.7.…...

什么是多路复用器滤波器

本章将更深入地介绍多路复用器滤波器&#xff0c;以及它们如何用于各种应用中。您将了解到多路复用器如何帮助设计人员创造出更复杂的无线产品。 了解多路复用器 多路复用器是一组射频(RF)滤波器&#xff0c;它们组合在一起&#xff0c;但不会彼此加载&#xff0c;可以在输出之…...

Severt和tomcat的使用(补充)

打包程序 在pom.xml中添加上述代码之后打包时会生成war包并且包的名称是test 默认情况打的是jar包.jar里量但是tomcat要求的是war包. war包Tomcat专属的压缩包. war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html, css, js) 点击其右边的m…...

JavaEE初阶——多线程(一)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第一部分:引入线程以及创建多线程的几种方式 此文章是建立在前一篇文章进程的基础上的 如果有不足的或者错误的请您指出! 1.认识线程 我们知道现代的cpu大多都是多核心…...

MongoDB主从复制模式基于银河麒麟V10系统

MongoDB主从复制模式基于银河麒麟V10系统 背景介绍 MongoDB自4.0版本开始已经不再建议使用传统的master/slave复制架构,而是全面采用了复制集(Replica Sets)作为标准的复制和高可用性解决方案。 复制集是MongoDB的一种数据复制和高可用性机制,通过异步同步数据至多个服务…...

Vue使用高德地图

1.在高德平台注册账号 2.我的 > 管理管理中添加Key 3.安装依赖 npm i amap/amap-jsapi-loader --save 或 yarn add amap/amap-jsapi-loader --save 4.导入 AMapLoade import AMapLoader from amap/amap-jsapi-loader; 5.直接上代码&#xff0c;做好了注释&#xff08;初始化…...

2024-04-07(复盘前端)

---HTML 1.HTMl骨架 html&#xff1a;整个网页 head&#xff1a;网页头部&#xff0c;用来存放给浏览器看的信息&#xff0c;如css body&#xff1a;网页主体&#xff0c;用来存放给用户看的信息&#xff0c;例如图片和文字 2.标题标签中h1标签只能使用一次&#xff0c;其…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...