std vector 用法

        使用vector,需添加头文件#include,要使用sort或find,则需要添加头文件#include。函数封装在命名空间std中,使用:using namespace std;

1、vector的初始化

std::vector<int> nVec;     // 空对象
std::vector<int> nVec(5,-1);  // 创建了一个包含5个元素且值为-1的vector
std::vector<std::string> strVec{"a", "b", "c"};  // 列表初始化   
std::vector<int> nVec;  nVec.push_back(i);    // 压入元素

  要注意“()”和“{}”这样的初始化情况,如:

std::vector<int> nVec(10,1);    // 包含10个元素,且值为1
std::vector<int> nVec{10,1};    // 包含2个元素,值分别为10,1

2、vector访问

方法1,数组下标访问

for(size_t i = 0; i < nVec.size(); ++i)std::cout << nVec[i] << std::endl; // 输出元素

方法2,迭代器访问

std::vector<int>::iterator itr = nVec.begin();
for(; itr != nVec.end(); ++itr)std::cout << (*itr)  << std::endl; 

方法3,使用auto

for(auto &it: nVec)std::cout << it  << std::endl; 

3、vector删除元素

  针对于非array容器有多种删除方式,以erase为例,比如:

c.erase(p); // 删除迭代器p所指定的元素,返回一个指向被删除元素之后的迭代器。
c.erase(begin,end); // 删除b,e所指定范围内的元素,返回一个指向被删除元素之后的迭代器。
c.clear(); // 删除所有元素

  注意,删除元素,会导致迭代器无效。正确的删除元素示例:

std::vector<int>::iterator iter = nVec.begin();
for(auto it = nVec.begin(); iter != nVec.end();)
{if(*it == delVal){it = nVec.erase(iter);continue;}it++;
}

  删除容器内某一个特定的元素,编写方式可为:

std::vector<int>::iterator iter = std::find(nVec.begin(),nVec.end(),5);
if(iter != nVec.end())nVec.erase(iter);

  删除容器内所有元素,当然可以这样:

nVec.erase(nVec.begin(),nVec.end());
nVec.clear();

4、vector的容量与大小

  vector并非随着每个元素的插入而增长自己,它总是分配一些额外的内存容量,这种策略使得vector的效率更高些。若要获取当前vector的大小,可调用size()函数,而获取当前vector的容量,可调用capcity()。

5、vector排序

        sort函数包含在头文件为#include的c++标准库中, #include。

sort函数的三个参数:

        a)待排序的数组的起始地址;

        b)待排序数组的结束地址;

        c)排序的方法,可以从大到小,也可以从小到大,还可以不写,默认为从小到大。

5.1、默认排序

int cNum[10] = {0,4,6,8,9,2,3,5,6,7}; 
sort(cNum, cNum+10);vector<int> vecNum{0,4,6,8,9,2,3,5,6,7}; 
sort(vecNum.beigin()), vecNum.end());

5.2、自定义排序

bool complare(int a,int b)
{return a>b; // 从大到小排序
}vector<int> vecNum{0,4,6,8,9,2,3,5,6,7}; 
sort(vecNum.beigin()), vecNum.end(), complare);sort(vecNum.begin(), vecNum.end(),[](int a ,int b){return a>b;
}); //使用lambda表达式

5.3、结构体排序

struct node
{int a;int b;double c;
}bool cmp(node x,node y)
{if(x.a!=y.a) return x.a<y.a;if(x.b!=y.b) return x.b>y.b;return x.c>y.c;
}

6、vector的交集、并集、补集

#include "iostream"
#include "vector" 
#include "algorithm" //sort函数、交并补函数
#include "iterator" //求交并补使用到的迭代器
using namespace std;// 容器vector中元素的去重
vector<int> unique_element_in_vector(vector<int> v)
{vector<int>::iterator vector_iterator;sort(v.begin(),v.end());vector_iterator = unique(v.begin(),v.end());if(vector_iterator != v.end()){v.erase(vector_iterator,v.end());}return v;
}// 两个vector求交集
vector<int> vectors_intersection(vector<int> v1, vector<int> v2)
{vector<int> v;sort(v1.begin(),v1.end());   sort(v2.begin(),v2.end());   set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 return v;
}// 两个vector求并集
vector<int> vectors_set_union(vector<int> v1, vector<int> v2)
{vector<int> v;sort(v1.begin(),v1.end());   sort(v2.begin(),v2.end());   set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集 return v;
}//判断vector的某一元素是否存在
bool is_element_in_vector(vector<int> v,int element)
{vector<int>::iterator it;it=find(v.begin(),v.end(),element);if (it!=v.end()){return true;}else{return false;}
}//两个vector求补集
std::vector<int> d1;
std::vector<int> d2;
std::cout << "set_different" << std::endl;
//Copies the elements from the sorted range [first1, last1) 
//which are not found in the sorted range [first2, last2) to the range beginning //at d_first
std::set_difference(v1.begin(),v1.end(),result.begin(),result.end(),std::back_inserter(d1));
std::set_difference(v2.begin(),v2.end(),result.begin(),result.end(),std::back_inserter(d2));

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

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

相关文章

【Eigen 1】Eigen中的norm、normalize、normalized三者对比

一、norm() 1. 对于Vector&#xff0c;norm返回的是向量的二范数 即: ∣ ∣ x ∣ ∣ 2 ∑ i 1 N x i 2 ||x||_2 \sqrt{\sum_{i1}^{N} {x}^{2}_{i} } ∣∣x∣∣2​i1∑N​xi2​ ​ Vector2d vec(3.0,4.0); cout << vec.norm() << endl; /输出52. 对于Matrix&…

redis常见面试汇总

目录 Redis 适合的场景 Redis 不适合的场景 3、Redis 有哪些常见的功能&#xff1f; 什么是缓存穿透&#xff1f;怎么解决&#xff1f; 什么是缓存雪崩&#xff1f;该如何解决&#xff1f; 参考文献&#xff1a; Redis 适合的场景 缓存&#xff1a;减轻 MySQL 的查询压力…

matlab多线程,parfor循环进度,matlab互斥锁

一. 内容简介 matlab多线程&#xff0c;parfor循环进度&#xff0c;matlab互斥锁 二. 软件环境 2.1 matlab 2022b 2.2代码链接 https://gitee.com/JJW_1601897441/csdn 三.主要流程 3.1 matlab多线程 有好几种&#xff0c;最简单的&#xff0c;最好理解的就是parfor&am…

不可错过的家装服务预约小程序商城开发指南

在当今社会&#xff0c;家装行业发展迅速&#xff0c;越来越多的人开始寻求专业的家装预约和咨询服务。对于不懂技术的新手来说&#xff0c;创建一个自己的家装预约咨询平台可能听起来很困难&#xff0c;但实际上通过一些第三方制作平台和工具&#xff0c;这个过程可以变得简单…

ARM 循环阻塞延迟函数

串行驱动的关键是双方能够按照既定的时序进行检测、设置相关引脚上的电平&#xff0c;比如单总线、I2c这样基本的可以用GPIO模拟的时序协议&#xff0c;需要主从双方&#xff0c;必须在链路接口内严格按照微妙级的延迟单位进行时序同步。 所以&#xff0c;在这种对时间要求很敏…

C++引用

1 引用的基本使用 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 &别名 原名 示例&#xff1a; int main() {int a 10;int &b a;cout << "a " << a << endl;cout << "b " << b << endl;…

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

Django使用WebSocket

1、websocket 相关 实现一个系统&#xff0c;20 个用户同时打开网站&#xff0c;呈现出来一个群聊界面 解决方案 轮询&#xff1a;让浏览器每隔2s向后台发送一次请求&#xff0c;缺点&#xff1a;延迟&#xff0c;请求太多网站压力大 长轮询&#xff1a;客户端向服务端发送请…

Vue2 第九节 过滤器

&#xff08;1&#xff09;定义&#xff1a;对要显示的数据进行特定格式化后再显示 &#xff08;2&#xff09;语法&#xff1a; ① 注册过滤器 1&#xff09;Vue.filter(name, callback) 全局过滤器 2&#xff09; new Vue({filters:{}}) 局部过滤器 ② 使用过滤器 1&…

14. Spring AOP 的组成和实现

目录 1. Spring AOP 简介 2. AOP 的组成 2.1 切面&#xff08;Aspect&#xff09; 2.2 连接点&#xff08;Join Point&#xff09; 2.3 切点&#xff08;Pointcut&#xff09; 2.4 通知&#xff08;Advice&#xff09; 3. Spring AOP的实现 3.1 新建项目 3.2 添加 AOP …

Stable Doodle:Stability AI推出的一款零门槛AI绘画神器

Stable Doodle是由Stability AI推出的一款零门槛AI绘画神器&#xff0c;可以将简单的草图转化为精美的图像。它可以将随手的塗鴉草稿转化为高畫質的完成圖&#xff0c;让用户能够以更快的速度将想法转化为精美的艺术作品。Stable Doodle利用最新的Stable Diffusion模型&#xf…

C#实现读写CSV文件的方法详解

目录 CSV文件标准 文件示例RFC 4180简化标准读写CSV文件 使用CsvHelper使用自定义方法总结 项目中经常遇到CSV文件的读写需求&#xff0c;其中的难点主要是CSV文件的解析。本文会介绍CsvHelper、TextFieldParser、正则表达式三种解析CSV文件的方法&#xff0c;顺带也会介绍一…

框架的知识点整理

目录 1、什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f; 2 、 使用Spring框架有什么好处&#xff1f; 3、Spring MVC 工作原理 1、什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f; Spring框架是一个开源的轻量级的Java应用程序开…

x86架构ubuntu22下运行WILL模拟器dophin

0. 环境 i5实体机ubuntu22 1. 安装依赖 $ sudo apt install build-essential git cmake ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libevdev-dev libusb-1.0-0-dev libxrandr-dev libxi-dev libpangocairo-1.0-0 qt6-base-private-dev libblueto…

封装一个公用的【Echarts图表组件】的3种模板

一、安装echarts npm install echarts --save 二、在需要的页面引入 import * as echarts from "echarts" 三、创建组件 1、模板1&#xff1a;vue2javascript <template><div><div class"echart_size" :id"id"></div…

腾讯云—自动挂载云盘

腾讯云&#xff0c;稍微麻烦了点。 腾讯云服务器&#xff0c;镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令&#xff0c;能够看到新的数据盘&#xff0c;如果不能需要通过腾讯云控制台卸载后&#xff0c;重新挂载&#xff0c;并重启服务器。 fdisk -l#为 /dev…

BES2700 SDK绝对时间获取方法

1 代码 2 实验 log 需要换算下

Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks&#xff0c;可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…

【Unity2D】粒子特效

为什么要使用粒子特效 Unity 的粒子系统是一种非常强大的工具&#xff0c;可以用来创建各种各样的游戏特效&#xff0c;如火焰、烟雾、水流、爆炸等等。使用粒子特效可以使一些游戏动画更加真实或者使游戏效果更加丰富。 粒子特效的使用 在Hierarchy界面右键添加Effects->…

shell执行mkdir build \ cd build\ cmake.. \ make命令

新建rebuild.sh&#xff0c;放入脚本代码 代码如下&#xff1a; #!/bin/bash if [ ! -d "build" ]; thenmkdir build elserm -rf build/* fi cd build Local_Dir$(cd "$(dirname "$0")"; pwd) echo "Now work at Dir:$Local_Dir" cm…