[C++] vector 用法

news/2024/12/30 1:20:47/

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;可以更全面的对软件进行测试…