STL--vector

news/2024/11/29 19:44:25/

vector

头文件

#include<vector>

向量的定义:

vector<int> vec;//定义一个vec型的向量a
vector<int> vec(5); //定义一个初始大小为5的向量
vector<int> vec(5,1); //初始大小为5,值都为1的向量

二维数组:

vector<vector<int>> vec(100);
vector<vector<int>> vec(100,vector<int>(100,0)); //定义100行100列值均为0的二维vector数组

vector的下标和数组一样从0开始的

  • vec.size(); //返回向量的实际大小

  • vec.begin(); //返回向量的开始指针的位置

  • vec.end(); //返回向量的结束指针的下一个位置

  • vec.push_back(x); //在对象末尾插入数据x

  • vec.pop_back(); //在对象末尾删除数据

  • vec.clear(); //清除对象中的所有数据

  • vec.at(i); //访问容器中第i个数的值

  • vec[i]: //访问容器中第i个数的值

  • vec.back(): //返回最后一个元素的值

在第i+1个数前面插入一个数x:

vec.insert(vec.begin()+i,x);

删除第i+1个数:

vec.erase(vec.begin()+i);

以上删除,插入操作复杂度都是log(n)的,因为vector下标是从0开始的,所以下标为i的数实际上就是第i+1个数

排序操作:

sort(vec.begin(),vec.end()); //默认从小到大排序
sort(vec.begin(),vec.end(),cmp); //自己定义的排序方式

查找元素个数:

count(vec.begin(),vec.end(),'a'); //返回数组中字符a的个数
count_if(vec.begin(),vec.end(),compare); //返回符合一定条件compare(自己定义)的的元素个数
#include<algorithm>

结合vector使用的库函数

lower_bound();

upper_bound();

unique();//判重

1.lower_bound(a,a+len,x);

二分查找有序表中第一个大于等于x的数的位置

仅适用于升序序的有序表,如果是降序序的有序表,则需要重载:

lower_bound(a,a+len,x,greater<int>());

返回有序表中第一个小于等于x的数的位置,仅适用于降序序的有序表

2.upper_bound(a,a+len,x);

二分查找有序表中第一个大于x的数的位置

仅适用于非降序的有序表,如果是非升序的有序表,则需要重载:

upper_bound(a,a+n+len,x,greater());

返回有序表中第一个小于x的数的位置,仅适用于非升序的有序表

3.unique(a,a+len):

STL的去重函数,他的时间复杂度和手动去重(先排序,后去重)一样,都是nlog(n),但是他的原理和手动去重不一样,他是把重复的元素放到序列的末尾,序列的前k个数都是不重复的有效元素,所以输出的时候只需要输出有效长度就可以了。
PS:因为是判断当前元素是否等于上一个元素,所以要去重的容器必须是经过排序的有序容器。
unique返回值为去重以后vector中没有重复元素的下一个位置的迭代器。

int k=unique(a,a+len)-a;//得到有效长度for(int i=1;i<=k;i++) //输出有效长度内的元素printf("%d ",a[i]);

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

相关文章

手写一个简单的RPC框架

学习RPC框架&#xff0c;由繁化简&#xff0c;了解其本质原理 文章目录项目简介什么是RPC&#xff1f;项目模块项目代码common模块client模块server模块framework模块测试项目简介 什么是RPC&#xff1f; RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&am…

【Nginx二】——Nginx常用命令 配置文件

Nginx常用命令 配置文件常用命令启动和重启 Nginx配置文件maineventshttp常用命令 安装完成nginx后&#xff0c;输入 nginx -&#xff1f;查询nginx命令行参数 nginx version: nginx/1.22.1 Usage: nginx [-?hvVtTq] [-s signal] [-p prefix][-e filename] [-c filename] [-…

从0到1深度学习环境搭建

目录第一步&#xff1a;安装anaconda第二步&#xff1a;创建一个虚拟环境试一下第三步&#xff1a;确定cuda算力&#xff0c;配置cudapytorch官网找版本pycharm配置pycharm进行设置setting 能够打开conda的shell终端如何给下载的项目设置合适的环境如果必须要低版本的pytorch才…

Windows安装Redis7

文章目录Redis下载与安装访问Redis官网下载Redis7 for Windows解压Redis7压缩包配置Redis7环境变量启动Redis7服务Redis可视化工具使用建立连接查看ip和端口还有用户认证修改Redis.conf守护进程关闭保护模式设置密码Redis是一款高性能的NoSQL数据库&#xff0c;常用于缓存、消息…

go-zero学习及使用中遇到的问题

go-zero学习及使用中遇到的问题1 go-zero入门--单体服务demo1.1 单体服务【官方示例】1.1.1 创建greet服务1.1.2 目录结构1.1.3 编写逻辑1.1.4 启动并访问服务1.2 修改GET入参1.2.1 去除options限制的入参值1.2.2 重启并访问服务1.3 添加post请求【新增方法】1.3.1 修改 greet/…

Vue3 学习总结补充(一)

文章目录1、Vue3中为什么修改变量的值后&#xff0c;视图不更新&#xff1f;2、使用 ref 还是 reactive&#xff1f;3、reactive 为什么会有响应性连接丢失情况&#xff1f;4、watch的不同使用方法5、watchEffect和 watch 的区别区别1&#xff1a;数据源的区别区别2&#xff1a…

第十三届蓝桥杯省赛 python B组复盘

文章目录前言主要内容&#x1f99e;试题 A&#xff1a;排列字母思路代码&#x1f99e;试题 B&#xff1a;寻找整数思路代码&#x1f99e;试题 C&#xff1a;纸张尺寸思路代码&#x1f99e;试题 D&#xff1a;数位排序思路代码&#x1f99e;试题 E&#xff1a;蜂巢思路代码&…

day74【代码随想录】二刷链表

文章目录前言一、重排链表&#xff08;力扣143&#xff09;二、旋转链表&#xff08;力扣61&#xff09;三、删除排序链表中的重复元素 II&#xff08;力扣82&#xff09;四、重复的DNA序列&#xff08;力扣187&#xff09;【滑动窗口】前言 1、重排链表 2、旋转链表 3、删除排…