Vector的用法

2023-05-16

我不知道大家是怎么理解Vector和怎样使用的,这篇文章主要是发表我自己对于Vector的看法,仅仅属于个人理解,如果有什么错误,也希望大家指正哈

目录

1:Vector的概念

2:Vector的使用


1:Vector的概念:

我个人把它当成数组来理解,当成一种可以操作的数组(一般数组我们没法快速操作,但用vector可以,使用内置函数就行了),那我们暂时就把它叫做向量。

vector<int>a;//这是一维数组
vector<int>a[10];//这个是二位数珠,后面的以此类推

2:Vector的使用:

(1)初始化:

我一般就单纯使用push_back()来添加元素(没有什么特别情况下)。

push_back()函数:在末尾添加元素

在这里输出vector中的元素呢,我们就是用数组下标来输出(前面不是说把vector当成数组理解蛮,嘿嘿嘿,其实就是我不懂滴!!!)当然了,还可以用迭代器来进行输出,这里不懂我们就把它当成死知识来记忆也行,后面遇到的多了,就懂了(其实是我自己说不明白,嘿嘿嘿)。具体我们看代码段!!!

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}

(2)pop_back()函数

pop_back()函数:删除向量中的最后一个元素,无参数。

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	a.pop_back();
	cout<<endl;
	for(it=a.begin();it!=a.end();it++){
		cout<<*it<<" "; 
	}
	return 0;
}

(3)front()和back()

front()函数和back()函数:具有返回值,返回的分别是向量中的第一个元素和最后一个元素

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"第一个元素="<<a.front()<<" 最后一个元素="<<a.back();
	return 0;
}

 

 (4)size()和empty()

size()和empty():分别表示向量的大小和判断该向量是否为空,返回值分别是向量的大小和bool类型的值(如果为空,则返回True)

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"该向量的大小="<<a.size()<<endl;;
	if(!a.empty()){
		cout<<"该向量不是空的"<<endl;
	}
	return 0;
}

 (5)find()函数

find()函数:查找要寻找的数第一次出现的位置。find()函数用到三个参数,分别是查找位置的头地址,以及尾地址和要查找的元素返回值是第一次出现该元素的地址(我们暂时可以把它理解成迭代器)

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	cout<<endl;
	a.push_back(20);
	vector<int>::iterator iu,io;
	iu=find(a.begin(),a.end(),20);
	io=find(a.begin(),a.end(),10000);
	if(iu==a.end()){//注意哈,位置是从0开始计算的
		cout<<"没有找到20"<<endl;
	}
	else{
		cout<<"查找到,并且位置是"<<iu-a.begin()<<endl;//看不到位置,我们就暂时把它当成死知识来记忆
	}
	if(io==a.end()){
		cout<<"没有找到1000"<<endl;
	}
	else{
		cout<<"查找成功,并且位置是"<<io-a.begin()<<endl;
	}
	return 0;
}

 (6)insert()函数

insert()函数:添加元素,与push_back不同的是,它可以在任意位置添加元素

格式:第一个参数是迭代器的位置,第二个参数是添加的元素。(这里我就暂且只说一个,还有insert()函数的其他格式,比如插入多种元素,在一段区间中插入)注意哈,它是有返回值的,返回值是指向新元素的迭代器。

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	cout<<endl;
	a.insert(a.begin(),18);//在第一个位置插入了18
	a.insert(a.begin()+4,99);//在第5个位置插入了99
	for(it=a.begin();it!=a.end();it++){
		cout<<*it<<" ";
	}
	return 0;
}

 

(7)erase()函数和clear()函数

clear()函数:清空向量中的元素

erase()函数:删除指定位置的函数(用法与insert()函数一样)参数是一个,就是迭代器的位置。

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	cout<<endl;
	a.erase(a.begin()+5);//删除第六个位置
	for(it=a.begin();it!=a.end();it++){
		cout<<*it<<" ";
	}
	return 0;
}

(8)访问Vector中的元素

一:数组下标法访问(第一个元素都是从0开始的)

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
    for(int i=0;i<a.size();i++)cout<<a[i]<<" ";
	return 0;
}

 

二:迭代器访问法(可以当成死知识来记忆)

#include<bits/stdc++.h>
using namespace std;
vector<int>a;
int main()
{
	for(int i=1;i<=10;i++){
		a.push_back(i*10);
	}
	vector<int>::iterator it;
	for(it=a.begin();it!=a.end();it++){//这些就是迭代器用法输出,死记硬背哦
		cout<<*it<<" ";
	}
	return 0;
}

Vector中的函数当然不仅有这么多,这篇文章主要是介绍经常使用的,其它函数大家有兴趣的可以自己去找找,学习学习(其实是我懒并且菜,哈哈哈哈)!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vector的用法 的相关文章

  • C# 等价于 C++ 向量或双端队列

    我几乎可以肯定这应该是重复的 但我搜索了一段时间但找不到答案 我应该在 C 中使用什么来替换 C 向量和双端队列有效率的 也就是说 我需要一种有效支持直接索引的结构 并且还支持以有效的方式再次从一端或两端删除 取决于向量或双端队列的情况 在
  • 如何推回向量的向量?

    我正在输入 20 行 我想用空格分隔每一行的内容并将其放入向量的向量中 如何制作向量的向量 我很难把它推回来 我的输入文件 Mary had a little lamb lalala up the hill the sun is up 该向
  • 如何在 C++ 中为 MPL 向量的所有成员显式实例化模板?

    考虑以下头文件 Foo h class Foo public template
  • 如何在 C++ 中获取两个向量共有的字符?

    我正在尝试比较两个向量对象 并返回一个包含两个向量中出现的所有字符的向量 如果不编写一些非常复杂的手动方法 将第一个向量中的每个字符与第二个向量中的每个字符进行比较 并使用 if 将其添加到第三个向量 如果它们匹配 将返回 我将如何解决这个
  • std::vector 迭代器失效

    之前有几个关于这个问题的问题 我的理解是调用std vector erase只会使位于某个位置的迭代器无效after被擦除的元素 然而 擦除一个元素后 该位置的迭代器是否仍然有效 当然 前提是它不指向end 擦除后 我对向量如何实现的理解似
  • 从 x,y 屏幕空间坐标查找 2D 等距网格上的列、行(将方程转换为函数)

    我试图在屏幕空间点 x y 的二维等距网格中找到行 列 现在我几乎知道我需要做什么 即找到上图中红色向量的长度 然后将其与表示网格边界的向量的长度 由黑色向量表示 进行比较 现在我在数学堆栈交换中寻求帮助 以获得用于计算点 x y 与黑色边
  • 将字符串解析为结构变量

    我试图将字符串解析为其中包含不同变量的结构向量 这是我到目前为止所拥有的 但似乎不起作用 struct client string PhoneNumber string FirstName string LastName string Ag
  • 如果元素 id 与搜索参数匹配,如何从 std::vector 中删除元素

    我正在尝试编写一种算法 如果项目 ID 与参数匹配 该算法将搜索项目向量并从项目向量中删除项目 请参阅下面的示例代码 struct item item int newID id newID bool operator const item
  • 在 gnuplot 中创建仅带有箭头的向量

    如何创建一个没有线条而只有箭头的矢量 有一个名为 nohead 的选项 它删除了箭头的头部 但我想做相反的事情 删除矢量的线并只保留头部 最优选地还能够基于单个数字重新缩放该箭头的大小 找到了一些有用的建议TeX交换 https tex s
  • Rust 是否包含一种直接检查一个向量是否是另一个向量的“子串”的方法?

    你可以用String using contains它搜索一个模式 但是Vec contains是针对单个元素的 我能够做到这一点的唯一方法是直接实现某种子字符串函数 但我有点希望有一种内置的方法 let vec1 vec 1 2 3 4 5
  • 使用 OpenCV 描述符与 findFundamentalMat 匹配

    我之前发布了有关同一程序的问题 但没有收到答案 我已经纠正了当时遇到的问题 但又面临新的问题 基本上 我使用未校准的方法自动校正立体图像对的旋转和平移 我使用 SURF 等特征检测算法来查找两个图像 左右立体图像对 中的点 然后再次使用 S
  • 向量和常量

    考虑一下这个 void f vector
  • Godot 3d 得到向前矢量

    我想知道是否有办法获取 godot 3d 中空间节点的前向向量 统一起来 这就是transform forward Godot 给了我一个旋转向量 但我不知道如何将其转换为方向向量 戈多版本的transform forward是什么 前进是
  • 按偶数和奇数索引对向量进行排序。由 小码哥发布于

    是否有一种单行 或简单的无循环 解决方案可以按偶数和奇数索引对向量进行排序 例子 long entries 0 1 2 10 11 indices 0 1 2 3 4 std vector
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • 带有 std::vector 的 VBO

    我用 C 和 OpenGL 编写了一个模型加载器 我用过std vectors 来存储我的顶点数据 但现在我想将其传递给glBufferData 但是数据类型却截然不同 我想知道是否有办法可以相互转换std vector至已记录的const
  • 带有向量的 unique_ptr:错误:调用 XXX 的隐式删除复制构造函数

    我想管理一个二维数组 如下所示 std vector
  • LibGDX 将 Vector2 与浮点值相乘

    有没有办法将 Vector2 与浮点值相乘 我曾经在 XNA 中这样做 通过将归一化方向向量与速度浮点数相乘来计算运动 这几乎是我的代码中使事情正常工作的最后一步 但似乎没有用于接受浮点值的 Vector2 的乘法函数 我可以手动将 x 和
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3

随机推荐

  • windows下怎么查看exe是32位还是64位

    xxx exe用记事本或notepad打开 xff0c 找有字符的第二行中 PE 字符串旁边 xff0c 如果是 d xff0c 则为64位 xff1b 如果是 L xff0c 则为32位
  • 无法定位程序输入点 _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev于动态链接库

    在执行编译出来的exe时 xff0c 报了 无法定位程序输入点 ZNSt7 cxx1118basic stringstreamIcSt11char traitsIcESaIcEEC1Ev于动态链接库 的异常 出现这个问题时 xff0c 应该
  • 踩了个C++的未定义标识符"cout"的坑

    问题表现 没怎么用过C 43 43 写过完整的项目 xff0c 今天闲来无事 xff0c 便创建个c 43 43 的工程玩玩 xff0c 结果一个简单的打印输出就给卡住了 xff0c 无法打开文件 iostream h xff0c cout
  • Electron-Vue之安装流程

    近期摒弃了熟悉的WPF xff0c 选用了新的一套工具 xff08 Electron Vue xff09 来开发桌面软件 xff08 我是连html都没用过的猿 xff0c no zuo no die xff09 接触新的东西 xff0c
  • vscode的调试配置

    文章目录 vscode的调试配置文件调试配置选项 vscode的调试配置文件 vscode的调试配置存储在 vscode文件夹的launch json文件中 通过以下步骤可以创建一个调试配置 xff1a 切换到调试视图单击create a
  • C/C++实现strcpy和strcat两个功能

    strcpy和strcat是string h头文件中分别实现字符串数组拷贝与拼接功能的函数 xff0c 详细使用相信大家都了解了 xff0c 如果还不了解看看实例 C C 43 43 笔试必须熟悉掌握的头文件系列 xff08 四 xff09
  • C/C++锁机制(boost)的认知和使用

    锁扩充 加锁的必需考虑三个问题 该锁的不锁 xff0c 将会导致各种莫名其妙的错误 xff1b 加锁范围太大 xff0c 虽然能避免逻辑错误 xff0c 但如果锁了不该锁的东西 xff0c 难免会降低程序的效率 xff1b 加锁方式不合适
  • QT之GPS

    http blog sina com cn s blog 7da13b510100xtgr html 前几天发现手里还闲着一块GPS 佳明的15W 也不知道是好的还是坏的呵呵一时兴起我就趁周六日没什么事情 用qt做了一个界面 现在已经调试完
  • 关于tcp/udp网络调试助手错误提示

    最近在学习网络调试助手与虚拟机中的Ubuntu系统通信 xff0c 在使用Ubuntu做服务器端时 xff0c tcp以及udp协议都遇到了问题 1 tcp协议遇到的问题是 xff1a 网络调试助手提示 xff1a 1035未知错误 xff
  • 结构体和结构体链表

    在c语言表针中有多种数据类型 xff0c 他们的应用使变量的应用变得灵活多变 而除了c语言默认的int xff0c float 等类型外 xff0c 我们还可以自己定义一些数据的类型 xff0c 结构体类型便是可以实现数据类型自定义的类型
  • 串口通信UART

    串口基本概念 串口通讯 Serial Communication 是指外设和计算机间 xff0c 通过数据信号线 地线等 xff0c 按位进行传输数据的一种通讯方式 其通讯协议可分层为协议层和物理层 物理层规定通信协议中具有机械 电子功能的
  • 一、Fmcw毫米波雷达原理

    0 概念 FMCW Frequency Modulated Continuous Wave xff0c 即调频连续波 FMCW技术和脉冲雷达技术是两种在高精度雷达测距中使用的技术 其基本原理为发射波为高频连续波 xff0c 其频率随时间按照
  • Makefile和CMake

    Makefile makefile主要规则 xff1a 伪对象 PHONY clean 规则1 main main o gcc main o o main 规则2 main o main c gcc c main c o main o 规则
  • C语言基础——结构体

    结构体的作用 在需要表示一些复杂信息时 xff0c 使用单纯的数据类型很不方便 比如 xff1a 学生信息 xff08 学号 xff0c 姓名 xff0c 班级 xff0c 电话 xff0c 年龄 xff09 xff1b GPIO信息 xf
  • Nginx 通过 header 中的标识进行分发

    Nginx可以根据请求头中自定义的标识将请求分发到不同的服务器 具体来说 xff0c 可以使用map指令将请求头中的自定义标识映射为不同的后端服务器地址 xff0c 然后使用proxy pass指令将请求转发到对应的后端服务器 以下是一个示
  • DB9接口详解---DB9引脚在 UART,CAN,RS485中的定义

    DB9的公母如下 xff1a 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 超强整理!PCB设计之电流与线宽的关系

    关于pcb线宽和电流的经验公式 xff0c 关系表和软件网上都很多 xff0c 本文把网上的整理了一下 xff0c 旨在给广大工程师在设计PCB板的时候提供方便 以下总结了八种电流与线宽的关系公式 xff0c 表和计算公式 xff0c 虽然
  • nginx 主动健康检查搭建详解(nginx_upstream_check_module)

    版本信息 nginx 1 21 1 下载nginx upstream check module模块 nginx upstream check module master zip wget https codeload github com
  • paddle推理部署(cpu)

    我没按照官方文档去做 xff0c 吐槽一下 xff0c 官方文档有点混乱 一 概述 总结起来 xff0c 就是用c 43 43 示例代码 xff0c 用一个模型做推理 二 示例代码下载 https www paddlepaddle org
  • Vector的用法

    我不知道大家是怎么理解Vector和怎样使用的 xff0c 这篇文章主要是发表我自己对于Vector的看法 xff0c 仅仅属于个人理解 xff0c 如果有什么错误 xff0c 也希望大家指正哈 目录 1 xff1a Vector的概念 2