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

vector向量类使用

向量是最简单的 STL 容器,其数据结构与数组相似,占据着一个连续的内存块。

   由于内存位置是连续的,所以向量中的元素可以随机访问,访问向量中任何一个元素的时间也是固定的。存储空间的管理是自动的,当要将一个元素插入到已满的向量中时,会为向量分配一个更大的内存块,将向量中的元素复制进新的内存块中,然后释放旧的内存块。所以,向量是一个灵活的数组,是能够动态改变自身大小的数组。#include <iostream>#include <vector>// 为了使用向量类#include <algorithm>#include <functional> // greater<T>using namespace std;// 通用打印 向量类vector的 元素 template<class T>void printVector(char *s, const vector<T>& v) {cout << s << " = (";if (v.size() == 0) {cout << ")\n";//输出 换行 return;}// 类型别名  常量迭代器  不能修改指向的对象 typename vector<T>::const_iterator i = v.begin();for( ; i != v.end()–1; i++)// for( ; i < v.end()-1; ++i)cout << *i << ' ';//打印元素 cout << *i << ")\n";//输出最后一个元素 并 换行 }bool f1(int n) {return n < 4;}int main() {int a[] = {1,2,3,4,5};vector<int> v1; // 向量v1 为空, size = 0, capacity = 0printVector("v1",v1);for (int j = 1; j <= 5; j++)v1.push_back(j); // v1 = (1 2 3 4 5), 大小size = 5, 当前最大存储能力 capacity = 8// 注意,向量没有 push_front()成员函数。vector<int> v2(3,7); // v2 = (7 7 7)vector<int> ::iterator i1 = v1.begin()+1;vector<int> v3(i1,i1+2); // 截取赋值 v3 = (2 3), size = 2, capacity = 2vector<int> v4(v1); // 拷贝赋值 v4 = (1 2 3 4 5), size = 5, capacity = 5vector<int> v5(5); // v5 = (0 0 0 0 0)v5[1] = v5.at(3) = 9; // 指定位置赋值 v5 = (0 9 0 9 0)// 向量的容量 可以通过函数 reserve()来改变(尽力改变)。v3.reserve(6); // v3 = (2 3), size = 2, capacity = 6v4.resize(7); // v4 = (1 2 3 4 5 0 0), size = 7, capacity = 10v4.resize(3); // v4 = (1 2 3), size = 3, capacity = 10v4.clear(); //清空 数据但是 分配的内存为减少 v4 is empty, size = 0, capacity = 10 !!!! // 向量的插入 v4.insert(v4.end(),v3[1]); // v4 = (3)v4.insert(v4.end(),v3.at(1)); // v4 = (3 3)v4.insert(v4.end(),2,4); // v4 = (3 3 4 4)v4.insert(v4.end(),v1.begin()+1,v1.end()-1); // v4 = (3 3 4 4 2 3 4)// 删除指定元素 v4.erase(v4.end()-2); // v4 = (3 3 4 4 2 4)v4.erase(v4.begin(), v4.begin()+4); // v4 = (2 4)// assign替换 先删除原有元素,在插入元素 v4.assign(3,8); // v4 = (8 8 8)v4.assign(a,a+3); // v4 = (1 2 3)// 逆 迭代器 从尾部向前 迭代 vector<int>::reverse_iterator i3 = v4.rbegin();for ( ; i3 != v4.rend(); i3++)cout << *i3 << ' '; // print: 3 2 1cout << endl;// 算法 algorithmsv5[0] = 3; // v5 = (3 9 0 9 0)// 条件替换   <4 的都被替换成 7 replace_if(v5.begin(),v5.end(),f1,7); // v5 = (7 9 7 9 7)//  replace_if(v5.begin(),v5.end(), bind2nd(less<int>(),4) ,7);//  bind2nd(op, a)是一个通用函数//直接替换 v5[0] = 3; v5[2] = v5[4] = 0; // v5 = (3 9 0 9 0)// 指定元素替换 0 -> 7 replace(v5.begin(),v5.end(),0,7); // v5 = (3 9 7 9 7)// sort 排序  快排 堆排 sort(v5.begin(),v5.end()); // v5 = (3 7 7 9 9)  升序排序 sort(v5.begin(),v5.end(),greater<int> ()); // v5 = (9 9 7 7 3)  降序排序呢// 前方插入 // 例如对于整型向量,成员函数 front()的原 型为:int& front() ; 可以 放在 左边 也可以放在右边  v5.front() = 2; // v5 = (2 9 7 7 3)return 0;}

使用自定义的类  作为 容器的元素  来使用 容器的一些算法

定义自己的类

 class Person {public:// 默认构造函数 Person(char *n = "", int a = 0) {name = strdup(n);// 复制字符串age = a;//复制年龄}// 默认析构函数~Person(){free(name);//释放 字符串指向的空间}// 重载 等号判断 运算符  返回布尔量  输入为常量 的引用 避免拷贝 同时 常量 避免修改bool operator==(const Person& p) const {return strcmp(name,p.name) == 0 && age == p.age;// 名字 和年龄都必须相等}// 重载 小于号  运算符  返回布尔量bool operator<(const Person& p) const {return strcmp(name,p.name) < 0;//这里 使用 名字字符串 来比较}// 重载 大于号  运算符  返回布尔量bool operator>(const Person& p) const {return !(*this == p) && !(*this < p);// 使用了 ==  和 小于号}private:// 私有变量char *name;int age;friend bool lesserAge(const Person&, const Person&);//有元函数  使用年龄来比较两个对象的大小};

使用向量 容器来 存储 自定义的 Person类

 vector<Person> vp(1, Person("Golg",26));//Person("Golg",26)使用 默认构造函数创建一类对象存放在向量容器内// 增加两个对象vp.push_back(Person("Any",20));vp.push_back(Person("Bil",30));// 使用向量容器的 排序算法  默认需要类对象 提供 小于运算符的重载(比较函数)sort(vp.begin(), vp.end());//  vp=(("Golg",26)("Any",20))("Bil",30)) --> (("Any",20))("Bil",30)("Golg",26))// 逆序排列sort(vp.begin(), vp.end(), greater<Person>());// vp= (("Any",20))("Bil",30)("Golg",26)) --> (("Golg",26)("Bil",30)("Any",20)))// 那么如何 使用 年龄来排序呢 1提供比较函数(要是有元函数)  2直接修改 小于运算符的重载 函数 方法// 1提供比较函数(要是有元函数)bool lesserAge(const Person& p1, const Person& p2){return  p1.age < p2.age;//小于时为真}// 传递比较函数sort(vp.begin(), vp.end(), lesserAge);// vp=  (("Golg",26)("Bil",30)("Any",20))) ---> (("Any",20)("Bil",30)("Golg",26)))

相关文章:

vector向量类使用

向量是最简单的 STL 容器&#xff0c;其数据结构与数组相似&#xff0c;占据着一个连续的内存块。 由于内存位置是连续的&#xff0c;所以向量中的元素可以随机访问&#xff0c;访问向量中任何一个元素的时间也是固定的。存储空间的管理是自动的&#xff0c;当要将一个元素插入…...

【Java 进阶篇】MySQL多表查询:内连接详解

MySQL是一种强大的关系型数据库管理系统&#xff0c;允许您在多个表之间执行复杂的查询操作。本文将重点介绍MySQL中的多表查询中的一种重要类型&#xff1a;内连接&#xff08;INNER JOIN&#xff09;。内连接用于检索满足两个或多个表之间关联条件的行&#xff0c;它能够帮助…...

C理解(四):链表

本文主要探讨单链表与双链表相关知识。 linux内核链表(include/linux/list.h) 内核链表中纯链表封装,纯链表的各种操作函数&#xff08;节点创建、插入、删除、遍历&#xff09;,纯链表内嵌在驱动结构体中,实现驱动的创建、插入、删除、遍历等 单链表 单链表链表头插…...

新手教程,蛋糕小程序的搭建流程一网打尽

作为一名新手&#xff0c;想要搭建一个蛋糕小程序可能会觉得有些困惑。但是&#xff0c;不用担心&#xff01;今天我将为大家详细介绍蛋糕小程序的搭建流程&#xff0c;并带大家一步步完成。 首先&#xff0c;我们需要登录乔拓云网的后台。在登录成功后&#xff0c;点击进入商城…...

springcloud之自我介绍

写在前面 在这篇文章 中我们分析了单体应用的问题&#xff0c;以及用来解决这些问题的解决的方案微服务&#xff0c;并接着看了微服务需要考虑的各种&#xff0c;如服务调用&#xff0c;负载均衡&#xff0c;服务治理&#xff0c;链路追踪&#xff0c;分布式事务&#xff0c;等…...

机器学习之神经网络的层次

文章目录 神经网络组成神经网络根据结构分类神经网络的信号传递 神经网络组成 大脑是一个巨大的神经元网络&#xff0c;所以神经网络是一个节点网络。根据节点的连接方式&#xff0c;可以创建多种神经网络。最常用的神经网络类型之一采用了如图所示的节点分层结构 正方形节点组…...

力扣每日一题(+日常水几道题)

每日一题1333. 餐厅过滤器 - 力扣&#xff08;LeetCode&#xff09; 简单的按规则排序,去除几个不满足的条件然后排序返回即可 #include<algorithm> class Solution { public:vector<int> filterRestaurants(vector<vector<int>>& restaurants, …...

百度SEO不稳定的原因及解决方法(百度SEO不稳定因素的5大包括)

百度SEO优化不稳定介绍&#xff1a;蘑菇号-www.mooogu.cn 随着百度SEO算法的不断变化和升级&#xff0c;许多网站的SEO排名经常出现不稳定的情况&#xff0c;这种情况在一定程度上影响了网站的流量和排名&#xff0c;导致网站的质量评分降低。因此&#xff0c;深入分析百度SEO…...

深度学习(1)---卷积神经网络

文章目录 一、发展历史1.1 CNN简要说明1.2 猫的视觉实验1.3 新认知机1.4 LeNet-51.5 AlexNet 二、卷积层2.1 图像识别特点2.2 卷积运算2.3 卷积核2.4 填充和步长2.5 卷积计算公式2.6 多通道卷积 三、池化层 一、发展历史 1.1 CNN简要说明 1. 卷积神经网络&#xff08;Convolut…...

探索社会工程的深度:从定义到高级攻击策略

在广阔的网络安全领域&#xff0c;社会工程作为一种微妙的威胁而出现&#xff0c;它利用人类的漏洞来访问敏感信息或实施欺诈。网络安全背景下的社会工程的定义很明确&#xff1a;它包括使用欺骗手段操纵个人泄露机密或个人信息&#xff0c;然后将这些信息用于欺诈目的。 此类…...

CTF 入门指南:从零开始学习网络安全竞赛

文章目录 写在前面CTF 简介和背景CTF 赛题类型介绍CTF 技能和工具准备好书推荐 写作末尾 写在前面 CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几…...

Spring整合第三方框架

目录 Spring整合第三方框架 加载外部properties文件 自定义命名空间解析原理 自定义命名空间总结和案例需求 总结 案例 Spring整合第三方框架 加载外部properties文件 Spring整合第三方框架不像MyBatis那么简单了&#xff0c;例如Dubbo框架在与Spring框架整合时&#xf…...

Linux Shell 无vi获取文件某行指定内容和修改某行指定内容

注意&#xff1a;操作之前一定要先备份&#xff01;&#xff01;&#xff01;一定要先备份&#xff01;&#xff01;&#xff01;一定要先备份&#xff01;&#xff01;&#xff01; 1. 获取某配置文件中某一行某项的值 cat /sshd_config |grep "PermitRootLogin" …...

在EXCEL中构建加载项之创建加载项的目的及规范要求

【分享成果&#xff0c;随喜正能量】一句南无阿弥陀佛&#xff0c;本是释迦牟尼佛所证的无上正等正觉法&#xff0c;洒在娑婆世界的众生海中&#xff0c;只为末世众生能够以信愿之心抓住此救命稻草&#xff0c;要知道今世人此生的处境&#xff0c;可能只剩这道要么极乐要么三涂…...

Hive【Hive(三)查询语句】

前言 今天是中秋节&#xff0c;早上七点就醒了&#xff0c;干啥呢&#xff0c;大一开学后空教室紧缺&#xff0c;还不趁着假期来学校等啥呢。顺便偷偷许个愿吧&#xff0c;希望在明年的这个时候&#xff0c;秋招不知道赶不赶得上&#xff0c;我希望拿几个国奖&#xff0c;蓝桥杯…...

商场做小程序商城的作用是什么?

商场是众多商家聚集在一起的购物公共场所&#xff0c;大商场也往往入驻着众多行业商家&#xff0c;是每个城市重要的组成部分。 随着互联网电商深入及客户消费行为改变&#xff0c;不少商场如今的客流量非常有限&#xff0c;甚至可以说是员工比客人多&#xff0c;这就导致撤店…...

XPD738协议系列-USB Type-C PD 和 Type-A 双口控制器

产品描述&#xff1a; XPD738 是一款集成 USB Type-C、USB Power Delivery&#xff08;PD&#xff09;2.0/3.0 以及 PPS、QC3.0/QC3.0/QC2.0 快充协议、华为 FCP/SCP/HVSCP 快充协议、三星 AFC 快充协议、BC1.2 DCP 以及苹果设备 2.4A 充电规范的多功能 USB Type-C 和 Type-A …...

【面试八股】IP协议八股

IP协议八股 子网掩码的作用为什么IP协议需要分片IP协议什么时候需要分片IP协议是怎么进行分片的那么IP协议是如果进行标识属于同一个分片呢&#xff1f;TCP协议和UDP协议将数据交给IP协议之后&#xff0c;是否需要分片传输&#xff1f; 子网掩码的作用 用来标识网络号和主机号…...

【冰糖R语言】创建R包(打包R程序)

目标&#xff1a;将现有R程序打包 可能涉及知识点&#xff1a;devtools包、usethis包、Rstudio软件 一、R包的类型 通常一个R包中包含以下元素&#xff1a; 1&#xff09;R文件夹&#xff1a;函数代码 2&#xff09;man文件夹&#xff1a;存放每个函数的注释文件 3&#x…...

照片后期处理软件DxO FilmPack 6 mac中文说明

DxO FilmPack 6 for Mac是一款照片后期处理软件。它可以模拟超过60种著名胶片品牌和类型的色彩和颗粒感&#xff0c;使照片具有复古、艺术和时尚风格。 ​DxO FilmPack 6 mac支持RAW和JPG格式的照片&#xff0c;并提供丰富的调整选项&#xff0c;如亮度、对比度、曝光、阴影和高…...

Firefox用户福音:免破解!一键安装HackBar 2.1.3旧版本完整教程

Firefox用户福音&#xff1a;免破解&#xff01;一键安装HackBar 2.1.3旧版本完整教程 在安全测试领域&#xff0c;HackBar作为一款经典的渗透测试工具&#xff0c;长期受到开发者和安全研究人员的青睐。然而&#xff0c;随着版本的迭代更新&#xff0c;新版本开始引入许可证验…...

XL6008直流升压电路设计与应用指南

基于XL6008的直流升压电路设计指南 1. 项目概述 1.1 应用背景 便携式电子设备对电源系统提出了特殊要求&#xff1a;在保持轻量化的同时&#xff0c;需要提供稳定的工作电压。由于单节锂电池的标称电压为3.7V&#xff08;满电4.2V&#xff09;&#xff0c;而许多电子元件需要…...

从HBuilder到npm:UniApp项目迁移与打包实战指南

1. 为什么需要从HBuilder迁移到npm&#xff1f; 很多UniApp开发者最初都是通过HBuilder这个集成开发环境入门&#xff0c;毕竟它提供了开箱即用的UniApp开发体验。但随着项目规模扩大&#xff0c;团队协作需求增加&#xff0c;或者需要更灵活的构建配置时&#xff0c;基于npm的…...

果园灌溉施肥控制系统改造之西门子 S7 - 1200 PLC 实战

果园灌溉施肥控制系统改3 西门子s7-1200plc程序博途v16&#xff0c;带 选型表 io表接线图CAD和运行效果视频最近搞了个果园灌溉施肥控制系统的改造项目&#xff0c;用的是西门子 S7 - 1200 PLC&#xff0c;编程软件是博途 V16&#xff0c;这过程还挺有意思&#xff0c;跟大家…...

从卡顿到实时:Shenyu网关WebSocket通知系统如何解决微服务配置同步难题

从卡顿到实时&#xff1a;Shenyu网关WebSocket通知系统如何解决微服务配置同步难题 你是否遇到过这样的困境&#xff1a;API网关配置更新后&#xff0c;客户端需要等待数分钟甚至更长时间才能生效&#xff1f;在秒杀活动等高并发场景下&#xff0c;这种延迟可能导致流量分配不…...

微信公众号自动回复避坑指南:如何高效处理用户关键词匹配(PHP版)

微信公众号自动回复进阶实战&#xff1a;PHP高效关键词匹配与消息处理 在运营微信公众号时&#xff0c;自动回复功能是与用户互动的第一道门槛。一个响应迅速、匹配精准的自动回复系统不仅能提升用户体验&#xff0c;还能有效减轻人工客服压力。本文将深入探讨如何用PHP构建一个…...

so-vits-svc声压级标准化技术解析:从原理到实践的7个关键维度

so-vits-svc声压级标准化技术解析&#xff1a;从原理到实践的7个关键维度 【免费下载链接】so-vits-svc SoftVC VITS Singing Voice Conversion 项目地址: https://gitcode.com/gh_mirrors/so/so-vits-svc 声压级标准化是so-vits-svc&#xff08;SoftVC VITS Singing Vo…...

用ChatTTS打造你的专属AI语音助手:从音色定制到批量合成音频的完整工作流

用ChatTTS打造你的专属AI语音助手&#xff1a;从音色定制到批量合成音频的完整工作流 在内容创作领域&#xff0c;音频正成为越来越重要的媒介形式。无论是知识付费课程的讲解、播客节目的制作&#xff0c;还是智能设备的语音交互&#xff0c;一个稳定、个性化的语音合成系统都…...

关于腾讯广告算法大赛2025项目分析1 - dataset.py

把原始 jsonl 用户行为序列&#xff0c;转成模型能直接吃的张量tensor和特征字典 一、整体定位 MyDataset 读取训练数据&#xff0c;产出: 用户序列 seq正样本 pos负样本 negtoken 类型各类特征时间特征相关原始时间戳 MyTestDataset 读取测试/推理数据&#xff0c;产出 用户序…...

isac毕设选题效率提升实战:从任务调度到自动化部署的全流程优化

最近在忙 ISAC 相关的毕业设计选题&#xff0c;和不少同学交流后发现&#xff0c;大家的时间很大一部分都耗在了“重复劳动”上&#xff1a;环境配半天跑不起来&#xff0c;代码改一点就要手动重启服务测试&#xff0c;版本一多自己都忘了哪个是能用的。这哪是做毕设&#xff0…...