C++学习 --vector
目录
1, 什么是vector
2, 创建vector
2-1, 标准数据类型
2-2, 自定义数据类型
2-3, 其他创建方式
3, 操作vector
3-1, 赋值
3-2, 添加元素
3-2-1, 添加元素(assign)
3-2-1-1, 标准数据类型
3-2-1-2, 自定义数据类型
3-2-2, 添加元素(insert)
3-2-2-1, 标准数据类型
3-2-2-2, 自定义数据类型
3-2-3, 添加元素(push_back)
3-2-3-1, 标准数据类型
3-2-3-2, 自定义数据类型
3-3, 查询(at)
3-3-1, 标准数据类型
3-3-2, 自定义数据类型
3-4, 获取容量(capacity)
3-5, 获取长度(size)
3-6, 交换(swap)
3-7, 删除元素(erase)
3-8, 清空元素(clear)
4, 嵌套vector
1, 什么是vector
C++中的一种容器数据类型, 也叫单端数组, 可动态扩展, 并不是在原空间上进行扩展,而是重新找更合适的内存空间, 将原来的数据拷贝到新空间,并释放原来的空间, 迭代器支持随机访问
2, 创建vector
通过vector<数据类型> 对象名, 可创建vector, 数据类型可以是标准数据类型, 也可以是自定义类型
2-1, 标准数据类型
//指定容器中元素数据类型为string
vector<string> v1;
2-2, 自定义数据类型
class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};Myclass m("aaa", 1);
//容器中元素的类型为Myclass
vector<Myclass> v1;
2-3, 其他创建方式
Myclass m("aaa", 1);
vector<Myclass> v1;
//拷贝构造方式创建
vector<Myclass> v2(v1);
//通过迭代器容器方式创建
vector<Myclass> v3(v1.begin(), v1.end());
//创建v4, 并插入5个m对象
vector<Myclass> v4(5, m);
3, 操作vector
3-1, 赋值
通过vector<数据类型> 对象名2 = 对象名1, 进行赋值
vector<Myclass> v1;
vector<Myclass> v2 = v1;
3-2, 添加元素
3-2-1, 添加元素(assign)
assign是用新的元素替换原来vector的元素
3-2-1-1, 标准数据类型
//通过迭代器区间方式进行赋值
v2.assign(v1.begin(), v1.end());
//给容器v1, 赋值5个字符串a
v1.assign(5, "a");
3-2-1-2, 自定义数据类型
//通过迭代器区间方式进行赋值
v2.assign(v1.begin(), v1.end());Myclass m("aaa", 1);
//容器中元素的类型为Myclass
vector<Myclass> v1;
//给容器v1, 赋值5个m对象
v1.assign(5, m);
3-2-2, 添加元素(insert)
insert是向vector指定位置, 添加元素, 支持一次添加多个元素
3-2-2-1, 标准数据类型
//表示在首元素位置, 以此插入3个字符串b
v1.insert(v1.begin(), 3, "b");
//表示在首元素位置, 插入字符串c
v1.insert(v1.begin(), "c");
3-2-2-2, 自定义数据类型
Myclass m1("aaa", 1);
vector<Myclass> v1;
//在首元素处插入m1
v1.insert(v1.begin(), m1);
//在首元素处插入2个m1
v1.insert(v1.begin(), 2, m1);
3-2-3, 添加元素(push_back)
push_back是在vector的尾部添加元素, 只能单个添加
3-2-3-1, 标准数据类型
vector<string> v1;
v1.assign(3, "a");
//在尾部添加c
v1.push_back("c");
3-2-3-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
vector<Myclass> v1;
v1.assign(3, m1);
//在尾部添加m2
v1.push_back(m2);
3-3, 查询(at)
通过对象名[索引]或者对象名.at(索引), 获取vector中的元素
3-3-1, 标准数据类型
//通过索引方式查询
cout << v1[0] << endl;
//通过at方式查询
cout << v1.at(1) << endl;
//获取首元素
cout << v1.front() << endl;
//获取尾元素
cout << v1.back() << endl;
3-3-2, 自定义数据类型
Myclass m1("aaa", 1);
Myclass m2("bbb", 2);
Myclass m3("ccc", 3);
vector<Myclass> v1;
v1.push_back(m1);
v1.push_back(m2);
v1.push_back(m3);//通过索引方式查询
cout << v1[0].m_name << endl;
//通过at方式查询
cout << v1.at(1).m_name << endl;
//获取首元素
cout << v1.front().m_name << endl;
//获取尾元素
cout << v1.back().m_name << endl;
3-4, 获取容量(capacity)
通过对象名.capacity(), 获取vector的容量大小
cout << v1.capacity() << endl;
3-5, 获取长度(size)
通过对象名.size(), 获取vector的元素个数
cout << v1.size() << endl;
3-6, 交换(swap)
通过对象名1.size(对象名2), 交换两个vector的元素, 两个vector的数据类型需要一致
v1.swap(v2);
3-7, 删除元素(erase)
通过对象名.erase(迭代器位置), 删除元素
//指定迭代器位置删除元素
v1.erase(v1.begin());
//删除尾部元素
v1.pop_back();
3-8, 清空元素(clear)
通过对象名.clear(), 清空vector元素
v1.clear();
//指定迭代器区间清空元素
v1.erase(v1.begin(), v1.end());
4, 嵌套vector
通过vector<vector<数据类型>> 对象名, 可实现嵌套vector
#include <iostream>
#include <string>
#include <vector>using namespace std;class Myclass
{
public:Myclass() {};Myclass(string name, int age) :m_name(name), m_age(age) {};string m_name;int m_age;
};void print_v(vector<vector<Myclass>>& v)
{//it为外层vector的第一个元素迭代器for (vector<vector<Myclass>>::iterator it = v.begin(); it != v.end(); it++){//vit为内层vector的第一个元素迭代器for (vector<Myclass>::iterator vit = (*it).begin(); vit != (*it).end(); vit++){cout << vit->m_name << endl;}}
}int main()
{Myclass m1("aaa", 1);vector<Myclass> v1;vector<vector<Myclass>> v2;v1.push_back(m1);v2.push_back(v1);print_v(v2);system("pause");return 0;
}
相关文章:
C++学习 --vector
目录 1, 什么是vector 2, 创建vector 2-1, 标准数据类型 2-2, 自定义数据类型 2-3, 其他创建方式 3, 操作vector 3-1, 赋值 3-2, 添加元素 3-2-1, 添加元素(assi…...
Android图片涂鸦,Kotlin(1)
Android图片涂鸦,Kotlin(1) import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.PointF import android.…...
upload-labs(1-17关攻略详解)
upload-labs pass-1 上传一个php文件,发现不行 但是这回显是个前端显示,直接禁用js然后上传 f12禁用 再次上传,成功 右键打开该图像 即为位置,使用蚁剑连接 连接成功 pass-2 源码 $is_upload false; $msg null; if (isse…...
《 机器人基础 》期末试卷(A)
一、填空题(30分,每空2分) 1. 按照相机的工作方式,机器人常用相机分为1)__ 单目摄像头 2)__ 双目摄像头 _ 3)_深度摄像头_ 三类。 2. 度量地图强调…...
Azure Machine Learning - Azure AI 搜索中的矢量搜索
矢量搜索是一种信息检索方法,它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本,因此搜索引擎会匹配与查询最相似的矢量,而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…...
3 redis实现一个消息中间件
使用list实现一个队列,可以从左侧入队,也可以从右侧入对 即可以从左侧读取,也可以从右侧读取 1、Lindex Lindex 命令用于通过索引获取列表中的元素 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的…...
js添加dom到指定div之后,并给添加的dom类名,然后设置其样式,以及el-popover层级z-index过高问题解决。
遇到一个需求,Vue项目做一个表格,要求表头与表格内容分开,如下效果所示,表头与表格有个高度间隔边距(箭头所示),因为默认我们的el-table的表头与内容是一起的: 思路:通过querySelector获取el-table__header-wrapper元素,通过createElement创建一个div,通过 newElem…...
C语言结构体
#include <stdio.h> #include <string.h> #include <stdlib.h>//struct Student_s { // int num; // char name[20]; // char gender; // int age; // float Chinese; // float Math; // float English; // char addr[30]; //}; //最后的分号一定要写&#x…...
【Python大数据笔记_day10_Hive调优及Hadoop进阶】
hive调优 hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation hive命令和参数配置 hive参数配置的意义: 开发Hive应用/调优时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问…...
React经典初级错误
文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者,我们创造bug,传播bug,毫不留情地消灭bug,在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案,感兴…...
C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别
System.Array.CopyTo() 和 System.Array.Clone() 是用于数组复制的两种不同方法,它们在实现和用途上有一些区别。 System.Array.CopyTo() 方法: CopyTo() 方法用于将数组的元素复制到另一个数组。它是 Array 类的实例方法,可以用于复制一个…...
Stable Diffusion 启动时 got an unexpected keyword argument ‘socket_options‘ 错误解决
Stable Diffusion 启动时 got an unexpected keyword argument socket_options 错误解决 问题解决方法 问题 Launching Web UI with arguments: Traceback (most recent call last):File "launch.py", line 48, in <module>main()File "launch.py"…...
CSS 文本属性篇
文字颜色 属性名:color作用:控制文字的颜色可选值: 1.颜色名 color: blue; 2.rgb或rgba color:rgb(132, 220, 254); color:rgba(132, 220, 254,0.5); 3.hex或hexa(十六进制) color:#0078d4; color:#0078d48b; 4.hsl或h…...
Activiti,Apache camel,Netflex conductor对比,业务选型
Activiti,Apache camel,Netflex conductor对比,业务选型 1.activiti是审批流,主要应用于人->系统交互,典型应用场景:请假,离职等审批 详情可见【精选】activti实际使用_activiti通过事件监听器实现的优势_记录点滴…...
pythom导出mysql指定binlog文件
要求 要求本地有py环境和全局环境变量 先测试直接执行binlog命令执行命令 Windows 本地直接执行命令 # E:\output>E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqlbinlog binglog文件地址 # --no-defaults 不限制编码 # -h mysql链接地址 # -u mysql 链接名称 # -p m…...
TDengine 跨版本迁移实战
TDengine 3.0 已经退出了近一年,目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。 如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。 目前数据迁移有三种方法: 使用官方推荐工具 taosx。使用 taosdump 工具。自己写程序。 迁移…...
FPGA设计时序约束八、others类约束之Set_Case_Analysis
目录 一、序言 二、Set Case Analysis 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中,存在一类特殊的约束,划分在others目录下,可用于设置忽略或修改默认的时序…...
xftp连接wsl2
在WSL中默认是没有安装OpenSSH,需要自己安装。 安装 sudo apt update sudo apt install openssh-server检查是否安装成功 ssh -V配置ssh sudo vim /etc/ssh/ssh_config设置端口 Port 22启动ssh服务 sudo service ssh startxftp连接 主机地址:127.…...
Cross-View Transformers for Real-Time Map-View Semantic Segmentation 论文阅读
论文链接 Cross-View Transformers for Real-Time Map-View Semantic Segmentation 0. Abstract 提出了 Cross-View Transformers ,一种基于注意力的高效模型,用于来自多个摄像机的地图视图语义分割使用相机感知的跨视图注意机制隐式学习从单个相机视…...
MySQL InnoDB 引擎底层解析(一)
6. InnoDB 引擎底层解析 MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL 是以什么方式来访问的这些数据?这些问题我们统统不知…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
