[C++] vector 用法

news/2024/7/24 13:08:15/

leetcode 上刷题的时候,vector 是最常用的容器,记录一下用法。

初始化

// 空数组
vector<int> array;// 长度为 10 的数组
vector<int> array(10);// 长度为 10 的数组,每个元素初始值为 1
vector<int> array(10, 1);// 长度为 3 的数组,花括号内为元素值
vector<int> array{1, 2, 3};// 先声明,后初始化
vector<int> array;
array = vector<int>(10, 1);// 复制另一个数组
vector<int> array(10, 0);
vector<int> array2(array);// 直接使用或作为返回值
vector<vector<int>> martix;
martix.push_back(vector<int>{1, 2});
return vector<int>{1, 2};

vector 完全可以当作栈来使用,push_back 与 pop_back

排序

// 默认升序
sort(array.begin(), array.end());// greater 表示降序
sort(array.begin(), array.end(), greater<int>());// 自定义,强烈建议使用地址符 &,省得参数传入时复制导致速度慢
// 小于号,升序
static bool comp(T& a, T& b) {return a < b;
}
sort(array.begin(), array.end(), comp);

删除元素

函数功能
erase(pos)删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器。该容器的大小(size)会减 1
erase(begin, end)删除 vector 容器中迭代器 [begin, end) 内的元素,并返回指向被删除区域下一个位置元素的迭代器。该容器的大小(size)会相应减少
remove(begin, end, target)不是vector的类内函数,可以删除 vector 容器中和 target 相等的所有元素,返回新的结尾迭代器,size不会变化。该函数不常用

remove的实质不是删除,而是把 target 后的元素前移,这里举个例子:

vector<int> array {1, 2, 1, 3, 4, 5};
auto newend = remove(array.begin(), array.end(), 1);
// 删除过程
// 1 2 1 3 4 5
// 2 2 1 3 4 5 (2 覆盖第一个 1)
// 2 3 4 5 4 5 (3 4 5 覆盖前面的 2 1)
// newend 指向第二个 4
// 2 3 4 5
for (auto it = array.begin(); it != newend; it++) {cout << *it << endl;
}
// 2 3 4 5 4 5
for (auto it = array.begin(); it != array.end(); it++) {cout << *it << endl;
}

因此,remove 需要搭配 erase 才能完全删除元素

// 2 3 4 5
array.erase(remove(array.begin(), array.end(), 1), array.end());

有序数组原地去重

// array 是有序数组
auto it = array.begin();
while(it != array.end()) {if (it > array.begin() && *it == *(it-1)) {it = array.erase(it);}else {it++;}
}

http://www.ppmy.cn/news/10126.html

相关文章

SpringMVC 定义 Controller 的几种简单方式

实现 Controller 接口 可以通过实现 Controller 接口定义 Controller &#xff0c;代码如下&#xff1a; Controller("/controller") public class HelloBeanNameUrlController implements Controller {Overrideprotected ModelAndView handleRequest(HttpServletRe…

软测复习01:软件测试概述

文章目录软件测试的目的软件测试的定义软件测试与软件开发软件测试发展软件测试的目的 基于不同的立场&#xff0c;存在着两种完全不同的测试目的 从用户的角度出发&#xff0c;希望通过软件测试暴露软件中隐藏的错误和缺陷&#xff0c;以考虑是否可接受该产品。从软件开发者的…

MAT-内存泄漏工具使用

目录 一、MAT简介 1.1 MAT介绍 1.2 MAT工具的下载安装 二、使用MAT基本流程 2.1 获取HPROF文件 2.2 MAT主界面介绍 2.3 MAT中的概念介绍 2.3.1 Shallow heap 2.3.2 Retained Heap 2.3.3 GC Root 2.4 MAT中的一些常用的视图 2.4.1 Thread OvewView 2.4.2 Group 2.…

CSS权威指南(五)字体

文章目录1.字体族2.font-face3.字重&#xff08;font-weight&#xff09;4.字号&#xff08;font-size&#xff09;5.字形&#xff08;font-style&#xff09;6.字体拉伸&#xff08;font-stretch&#xff09;7.字距&#xff08;font-kerning&#xff09;8.字体变形&#xff08…

实战攻防之紫队视角下的实战攻防演习组织

声明 本文是学习实战攻防之紫队视角下的实战攻防演习组织. 下载地址 http://github5.com/view/55010而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 什么是紫队 紫队&#xff0c;一般是指网络实战攻防演习中的组织方。 紫队是在实战攻防演习中&#…

软件测试~测试分类

目录 1.按照是否查看代码划分 ① 黑盒测试(Black-box Testing) ② 白盒测试(White-box Testing) ③ 灰盒测试(Gray-Box Testing) 2.按照开发阶段划分 ① 单元测试(Unit Testing) ② 集成测试(Integration Testing) ③ 系统测试(System Testing) ④ 验收测试(Acceptance…

select、poll、epoll的简要对比

select select的几大缺点&#xff1a; &#xff08;1&#xff09;每次调用select&#xff0c;都需要把fd集合从用户态拷贝到内核态&#xff0c;这个开销在fd很多时会很大 &#xff08;2&#xff09;同时每次调用select都需要在内核遍历传递进来的所有fd&#xff0c;这个开销在…

续集来了丨UI自动化测试(二):带视频,实在RPA高效进行web项目UI自动化测试

一、什么是web项目ui自动化测试&#xff1f; 通过测试工具模拟人为操控浏览器&#xff0c;使软件按照测试人员的预定计划自动执行测试的一种方式&#xff0c;可以完成许多手工测试无法完成或者不易实现的繁琐工作。 正确使用自动化测试&#xff0c;可以更全面的对软件进行测试…

[C语言]初步的来了解一下指针(多图详解)

目录 1.指针是什么 2.指针类型 2.1指针类型的意义(-整数) 2.2指针的解引用 3.野指针 3.1野指针出现的情况 3.2 如何规避野指针 4.指针运算 4.1指针-整数 4.2指针-(减)指针 5.二级指针 1.指针是什么 指针是内存中最小的单元编号&#xff0c;也就是地址。指针还可以是一种…

【Linux】make/Makefile的使用

本文目录 背景简介 使用方法 为什么执行的指令是make和make clean呢&#xff1f; gcc如何判断文件是否需要重新执行&#xff1f; 背景简介 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefifile定义了一系列的规则来指定…

学习笔记6:字符串库函数(下)

目录 一. strstr模拟实现 二. strtok模拟实现 三.关于strerror和perror的说明 一. strstr模拟实现 库函数strstr函数首部&#xff1a;char * strstr ( const char *str1, const char * str2); 函数的功能是在str1指向的主字符串中寻找子串str2&#xff0c;并且返回主字符串中…

【经典面试题】

TC经典面试题1.赛马问题 WY经典面试题2.:烧香问题 砝码称重问题 有36匹马&#xff0c;6个跑道&#xff0c;在没有计时器的情况下&#xff0c;至少需要赛马多少次&#xff0c;才能比出前三名&#xff1f; 答案&#xff1a;至少需要比较8次。 解题思路&#xff1a; 先把36匹…

2023年中职网络安全竞赛Windows操作系统渗透测试解析(超详细)

B-12:Windows操作系统渗透测试 任务环境说明: 服务器场景:Server2305(关闭链接)服务器场景操作系统:Windows(版本不详)通过本地PC中渗透测试平台Kali对服务器场景进行系统服务及版本扫描渗透测试,并将该操作显示结果中445端口对应的服务版本信息字符串作为Flag值提交…

c++入门(命名空间+缺省参数+函数重载)

文章目录1. 命名空间1. c语言的两个域2. 命名空间的使用1.类型问题命名空间A和B的实现2. 变量问题3.三种访问方法1.指定命名空间访问2. 全局展开using namespace std 的含义尽量不使用using namespace std的原因3. 部分展开2. 缺省参数(备胎)1. 概念2.全缺省参数3.半缺省参数错…

【07】概率图推断之信念传播

概率图推断之信念传播 文章目录将变量消除视为信息传递信息传递算法加总乘积信息传递因子树上的加总乘积信息传递最大乘积信息传递总结在《概率图推断之变量消除算法》中&#xff0c;我们讲了变量消除算法如何对有向图和无向图求P(Y∣Ee)P(Y \mid E e)P(Y∣Ee)的边缘概率。 …

IDEA启动项目通过https进行访问,nginx配置https访问

一、IDEA启动项目通过https进行访问 1、获取证书 证书申请网络有很多方法&#xff0c;这里腾讯云的nginx版证书举列 2、证书转换 springboot是识别p12证书的&#xff0c;所有这里需要吧pem证书进行转换。转换工具OpenSSL-Win64&#xff08;自行百度下载&#xff09;下载完…

一步步实现React-Hooks核心原理

React Hooks已经推出一段时间&#xff0c;大家应该比较熟悉&#xff0c;或者多多少少在项目中用过。写这篇文章简单分析一下Hooks的原理&#xff0c;并带大家实现一个简易版的Hooks。 这篇写的比较细&#xff0c;相关的知识点都会解释&#xff0c;给大家刷新一下记忆。 Hooks…

回顾2022年的历程,展望2023年目标

这里写目录标题回顾2022年博客之星你参加了吗&#xff1f;学习方面写博客方面在涨粉丝方面展望2023回顾2022年 时间如梭&#xff0c;转眼间已经2023年了。 你开始做总结了吗&#xff1f; 博客之星你参加了吗&#xff1f; 这是 2022 博客之星 的竞选帖子&#xff0c; 请你在这…

非对称加密实战(一):JDK生成keystore获取公钥私钥及代码验证【附源码】

目录使用说明非对称加密生成keystore文件公钥私钥互相解密获取fd-alias.keystore中的公钥私钥使用生成公钥私钥进行解密源码地址使用说明 非对称加密 非对称加密算法主要有&#xff1a;RSA、Elgamal、背包算法、Rabin、D-H、ECC&#xff08;椭圆曲线加密算法&#xff09;。下…

JEECGboot数据规则篇

使用 一、功能说明 列表数据权限&#xff0c;主要通过数据权限控制行数据&#xff0c;让不同的人有不同的查看数据规则&#xff1b; 比如&#xff1a; 销售人员只能看自己的数据&#xff1b;销售经理可以看所有下级销售人员的数据&#xff1b;财务只看金额大于5000的数据等等…