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

STL--vector

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.kler.cn/a/2963.html

相关文章:

  • 团体程序设计天梯赛-练习集——L1-028 判断素数
  • 游戏开发领域 - 游戏引擎 UE 与 Unity
  • openssl 生成证书 windows导入证书
  • 【16届蓝桥杯寒假刷题营】第2期DAY4
  • C语言------数组从入门到精通
  • < OS 有关 > Android 手机 SSH 客户端 app: connectBot
  • 【C语言初阶】循环语句
  • 5G将在五方面彻底改变制造业
  • 【vue3】小小入门介绍
  • Celery使用:优秀的python异步任务框架
  • Spring Bean的定义(含创建Bean的三种方式)
  • CentOS 7 安装 mysql 8.0 客户端
  • [攻城狮计划]如何优雅的在RA2E1上运行RT_Thread
  • MySQL 常见的面试题及其答案
  • 【数据结构】哈希表
  • matlab代码规范(自用)
  • 动态规划专题(明天继续)
  • 4万字企业数字化转型大数据湖项目建设和运营综合解决方案WORD
  • 谈谈低代码的安全问题,一文全给你解决喽
  • 美国Linux服务器系统增强安全的配置
  • JVM学习.03 类加载机制
  • 力扣-银行账户概要 II
  • C语言——动态内存管理 malloc、calloc、realloc、free的使用
  • WPF WPF布局元素
  • 百万级 Excel导入数据库 效率太低? 基于 SAX 的事件模型 导入,将会解决 效率问题
  • 【Linux】基于阻塞队列的生产者消费者模型