C++动态数组(vector)

news/2024/6/3 19:34:39 标签: c++, 容器, vector

动态数组简介

有时候,我们在做题时会思考数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。这也就出现了所谓的动态数组,动态数组是指在声明时没有确定数组大小的数组。动态数组可以在任何时候改变大小,既灵活又方便,有助于有效管理内存。

但是大部分情况下,我们还是使用静态数组的,尤其是在打比赛的时候。但是有时如果我们用静态数组空间会炸,所以只好用动态数组。但是动态数组又不太好写,因此C++的SLT给出了一个容器vector来帮助我们。

vector_5">vector容器

所在头文件:vector

定义:(其中Type为类型,如int,char,结构体,string等等)

vector <Type> v; //默认初始化 v为空
vector <Type> v(v1); //用v1定义v
vector <Type> v(n); //v有n个值为0的元素
vector <Type> v(n, x); //v有n个值为x的元素
vector <Type> v[MAXN + 10]; //第一维大小是(MAXN + 10),第二维是动态的二维数组

常用操作:

v[i]; //v的第i个元素
v.clear() //清空v
v.push_back(x); //在尾部添加元素
v.pop_back() //删除末尾元素
v.insert(a.begin() + i, x) //在v[i]前面插入一个元素x
v.insert(a.begin() + i, n, x) //在v[i]前面插入n个元素x
v.insert(a.end(), x) //在v尾部插入一个元素x
v.insert(a.end(), n, x) //在v尾部插入n个元素x
v.erase(a.begin() + i) //删除v[i]
v.erase(a.begin() + i, a.begin() + j) //删除v[i]到v[j - 1]
v.erase(a.begin() + i, a.end()) //删除v[i]到最后一个元素
v.resize(n) //将数组大小调整为n
int vsz = v.size(); //v中元素的个数
bool isEmpty = v.empty(); //判断v是否为空,如果为空则是true,否则是false

注意:vector在插入或删除某项时,需要将后面的值全部前移,算法时间复杂度是O(n)级别的。如果频繁移动,效率极低。


http://www.niftyadmin.cn/n/1690366.html

相关文章

如何在GitHub搭建属于自己的Hugo博客

# 前言 首先附上自己的GitHub博客 HoryBlog 看一下效果&#xff01;如果满意您就继续… # 安装 homebrew 工具 接下来用brew这个工具来安装hugo&#xff08;博客工具&#xff09; 安装完之后&#xff0c;终端输入brew # 安装Hugo ## Windows 如果是windows点击 往下拉… …

初学者之用IDEA建一个JavaWeb项目

# 前言 虽然Servlet已经被抛弃了&#xff0c;但是现在的一些框架仍然是建立在Servlet的基础上&#xff0c;比如SpringMVC&#xff0c;其实就是为了开发效率&#xff0c;在Servlet又封装了一层。 在理解了Sevelet的基础上&#xff0c;再理解SpringMVC就相对简单了。 接来通过创建…

算法:插入排序

插入排序是一种简单直观且稳定的排序算法&#xff0c;顾名思义&#xff0c;就是每次将待排序序列中的一个数插入到已排序的数列中&#xff0c;也是非常有名的算法。 例题 洛谷1177 排序 题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第 1 行为一个正整数 N。 第…

JVM中方法调用的内部实现原理

本文算是《深入理解Java 虚拟机》的学习笔记 # 符号引用和直接引用 首先来了解一下符号引用和直接引用的概念&#xff1a; Java类从加载到虚拟机内存开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期包括&#xff1a;加载、验证、准备、解析、初始化、使用、卸…

深刻理解重载和覆盖

# 重载和覆盖的区别 定义不同 重载是指不同的函数使用相同的函数名&#xff0c;但是函数的参数个数或类型不同。调用的时候根据参数来区分不同的函数。 覆盖&#xff08;也叫重写&#xff09;是指在派生类中重新对基类中的虚函数&#xff08;注意是虚函数&#xff09;重新实现。…

算法:归并排序

归并排序是一种非常经典的分治算法&#xff0c;也是非常精美的算法。学习归并排序&#xff0c;对于理解分治法思想、提高算法思维能力十分有帮助。 例题 洛谷1177 排序 题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第 1 行为一个正整数 N。 第 2 行包含 N 个空…

为什么使用加密盐

什么是加密盐&#xff1f; 百度给出的解释是&#xff1a;加盐加密是一种对系统登录口令的加密方式&#xff0c;它实现的方式是将每一个口令同一个叫做”盐“&#xff08;salt&#xff09;的n位随机数相关联。 无论何时只要口令改变&#xff0c;随机数就改变。 随机数以未加密的…

算法:快速排序

快速排序&#xff0c;顾名思义就是速度很快的排序&#xff0c;平均时间复杂度仅为O(n * log2(n))。 例题 洛谷1177 排序 题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第 1 行为一个正整数 N。 第 2 行包含 N 个空格隔开的正整数 a[i]&#xff0c;为你需要进行排…