STL、Vector和Set的讲解和例题分析
STL
STL(Standard Template Library,标准模板库)是C++标准库的一部分,它提供了一系列通用的编程组件,包括容器、迭代器、算法和函数对象等。STL是C++中实现泛型编程的核心,它允许程序员使用模板编写与数据类型无关的代码。
STL的特点:
1.泛型编程:STL基于模板,支持泛型编程,允许编写与数据类型无关的代码。
2.容器:STL提供了多种容器,如vector
、list
、map
、set
等,用于存储和管理数据。
3.迭代器:STL使用迭代器作为访问容器元素的通用方法,它提供了一种统一的方式来遍历和操作容器。
4.算法:STL包含了一系列算法,如排序、搜索、复制等,这些算法可以应用于不同的容器和数据类型。
5.函数对象:STL中的函数对象(也称为仿函数)是重载了函数调用运算符的类,它们可以像函数一样被调用。
常见用法:
1.容器:使用STL容器来存储和管理数据集合,如vector
、list
、map
、set
等。
2.迭代器:使用迭代器来遍历容器中的元素,如使用vector::iterator
、list::iterator
等。
3.算法:使用STL算法来处理容器中的数据,如sort
、find
、copy
等。
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.删除重复元素:使用vector
的erase
成员函数删除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算法如sort
和binary_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.删除重复元素:使用vector
的erase
成员函数删除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(Standard Template Library,标准模板库)是C标准库的一部分,它提供了一系列通用的编程组件,包括容器、迭代器、算法和函数对象等。STL是C中实现泛型编程的核心,它允许程序员使用模板编写与数…...

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.什么是数据仓库?2.ETL是什么?3.数据仓库和数据库的区别(OLTP和OLAP的区别)4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度?5.2什么是指标? 6.什么是数仓建模?7.事实表7.维度表…...

git Failed to connect to 你的网址 port 8282: Timed out
git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是:原来的仓库换了网址,原版网址不可用了。 解决方法如下: 方法一:查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…...
[C++][算法基础]堆排序(堆)
输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m。 第二行包含 n 个整数,表示整数数列。 输出格式 共一行,包含 m 个整数,表示整数数列中前 m 小的数。 数据范围 1≤m≤n≤&#x…...

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

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

51单片机入门_江协科技_17~18_OB记录的笔记
17. 定时器 17.1. 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成,无需占用CPU外围IO接口; 定时器作用: (1)用于计时系统,可实现软件计时&…...

xss.pwnfunction-Ah That‘s Hawt
<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 ,当页面或元素加载完成时,onload 事件会被触发,从而可以执行相应的 JavaScript 函数...

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

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

树莓派部署yolov5实现目标检测(ubuntu22.04.3)
最近两天搞了一下树莓派部署yolov5,有点难搞(这个东西有点老,版本冲突有些包废弃了等等) 最后换到ubuntu系统弄了,下面是我的整体步骤(建议先使能一下ssh(最下面有),结合…...

2024 年最新使用 Wechaty 开源框架搭建部署微信机器人(微信群智能客服案例)
读取联系人信息 获取当前机器人账号全部联系人信息 bot.on(ready, async () > {console.log("机器人准备完毕!!!")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.…...

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

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

JavaEE初阶——多线程(一)
T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享多线程的第一部分:引入线程以及创建多线程的几种方式 此文章是建立在前一篇文章进程的基础上的 如果有不足的或者错误的请您指出! 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.直接上代码,做好了注释(初始化…...

2024-04-07(复盘前端)
---HTML 1.HTMl骨架 html:整个网页 head:网页头部,用来存放给浏览器看的信息,如css body:网页主体,用来存放给用户看的信息,例如图片和文字 2.标题标签中h1标签只能使用一次,其…...

SpringCloud学习(10)-SpringCloudAlibaba-Nacos服务注册、配置中心
Spring Cloud Alibaba 参考文档 Spring Cloud Alibaba 参考文档 nacos下载Nacos 快速开始 直接进入bin包 运行cmd命令:startup.cmd -m standalone 运行成功后通过http://localhost:8848/nacos进入nacos可视化页面,账号密码默认都是nacos Nacos服务注…...

OKCC外呼中心配置的电话系统规则
OKCC外呼中心配置电话系统规则可能涉及多个方面,包括呼叫路由、自动化流程、电话接听策略等。以下是一般步骤及注意事项: 呼叫路由配置: 确定呼叫中心的呼叫路由策略,包括如何分配呼叫给不同的坐席或部门。设置呼叫路由规则&#…...

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.31-2024.04.05
文章目录~ 1.AutoWebGLM: Bootstrap And Reinforce A Large Language Model-based Web Navigating Agent2.Training LLMs over Neurally Compressed Text3.Unveiling LLMs: The Evolution of Latent Representations in a Temporal Knowledge Graph4.Visualization-of-Thought …...

性能测试工具 ab(Apache Bench)使用详解
Apache Bench (ab) 是一个由 Apache 提供的非常流行的、简单的性能测试工具,用于对 HTTP 服务器进行压力测试。下面是 ab 工具的一些基本使用方法。 安装 在大多数 Unix 系统中,ab 通常作为 Apache HTTP 服务器的一部分预装在系统中。你可以通过在终端…...

智能网联汽车自动驾驶数据记录系统DSSAD数据元素
目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…...

Ubuntu 20.04.06 PCL C++学习记录(十八)
[TOC]PCL中点云分割模块的学习 学习背景 参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,,PCL版本为1.10.0,CMake版本为3.16 学习内容 PCL中实现欧式聚类提取。在点云处理中,聚类是一种常见的任务,它将点云数据划分为多…...

细雨踏春日,新会公安护平安
春雨起,清明至。又是一年春草绿,又是一年清明时。细雨踏春日,思怀故人时,是哀思,亦是相聚。新会公安一抹抹葵乡春日“警”色坚守岗位,确保清明祭扫平稳有序,为人民群众的平安保驾护航。 为确保2…...

3d怎么在一块模型上开个孔---模大狮模型网
在进行3D建模时,有时候需要在模型上创建孔,以实现特定的设计需求或功能。无论是为了添加细节,还是为了实现功能性的要求,创建孔都是常见的操作之一。本文将介绍在3D模型上创建孔的几种常用方法,帮助您轻松实现这一目标…...

Python景区票务人脸识别系统(V2.0),附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

全球化业务的网络安全挑战
随着企业业务的全球化,跨国数据传输和用户跨地域访问成为常态。这不仅带来了巨大的商业机会,也带来了以下网络安全挑战: 数据泄露风险:跨国数据传输增加了数据被截获和泄露的风险。访问限制:某些地区可能对互联网内容…...