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

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&#xff0c; 什么是vector 2&#xff0c; 创建vector 2-1&#xff0c; 标准数据类型 2-2&#xff0c; 自定义数据类型 2-3&#xff0c; 其他创建方式 3&#xff0c; 操作vector 3-1&#xff0c; 赋值 3-2&#xff0c; 添加元素 3-2-1&#xff0c; 添加元素(assi…...

Android图片涂鸦,Kotlin(1)

Android图片涂鸦&#xff0c;Kotlin&#xff08;1&#xff09; 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文件&#xff0c;发现不行 但是这回显是个前端显示&#xff0c;直接禁用js然后上传 f12禁用 再次上传&#xff0c;成功 右键打开该图像 即为位置&#xff0c;使用蚁剑连接 连接成功 pass-2 源码 $is_upload false; $msg null; if (isse…...

《 机器人基础 》期末试卷(A)

一、填空题&#xff08;30分&#xff0c;每空2分&#xff09; 1. 按照相机的工作方式&#xff0c;机器人常用相机分为1&#xff09;__ 单目摄像头 2&#xff09;__ 双目摄像头 _ 3&#xff09;_深度摄像头_ 三类。 2. 度量地图强调…...

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法&#xff0c;它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本&#xff0c;因此搜索引擎会匹配与查询最相似的矢量&#xff0c;而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…...

3 redis实现一个消息中间件

使用list实现一个队列&#xff0c;可以从左侧入队&#xff0c;也可以从右侧入对 即可以从左侧读取&#xff0c;也可以从右侧读取 1、Lindex Lindex 命令用于通过索引获取列表中的元素 也可以使用负数下标&#xff0c;以 -1 表示列表的最后一个元素&#xff0c; -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应用/调优时&#xff0c;不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率&#xff0c;或帮助定位问…...

React经典初级错误

文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者&#xff0c;我们创造bug&#xff0c;传播bug&#xff0c;毫不留情地消灭bug&#xff0c;在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案&#xff0c;感兴…...

C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别

System.Array.CopyTo() 和 System.Array.Clone() 是用于数组复制的两种不同方法&#xff0c;它们在实现和用途上有一些区别。 System.Array.CopyTo() 方法&#xff1a; CopyTo() 方法用于将数组的元素复制到另一个数组。它是 Array 类的实例方法&#xff0c;可以用于复制一个…...

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 文本属性篇

文字颜色 属性名&#xff1a;color作用&#xff1a;控制文字的颜色可选值&#xff1a; 1.颜色名 color: blue; 2.rgb或rgba color:rgb(132, 220, 254); color:rgba(132, 220, 254,0.5); 3.hex或hexa&#xff08;十六进制&#xff09; color:#0078d4; color:#0078d48b; 4.hsl或h…...

Activiti,Apache camel,Netflex conductor对比,业务选型

Activiti,Apache camel,Netflex conductor对比&#xff0c;业务选型 1.activiti是审批流&#xff0c;主要应用于人->系统交互&#xff0c;典型应用场景&#xff1a;请假&#xff0c;离职等审批 详情可见【精选】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 已经退出了近一年&#xff0c;目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。 如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。 目前数据迁移有三种方法&#xff1a; 使用官方推荐工具 taosx。使用 taosdump 工具。自己写程序。 迁移…...

FPGA设计时序约束八、others类约束之Set_Case_Analysis

目录 一、序言 二、Set Case Analysis 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时序…...

xftp连接wsl2

在WSL中默认是没有安装OpenSSH&#xff0c;需要自己安装。 安装 sudo apt update sudo apt install openssh-server检查是否安装成功 ssh -V配置ssh sudo vim /etc/ssh/ssh_config设置端口 Port 22启动ssh服务 sudo service ssh startxftp连接 主机地址&#xff1a;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 &#xff0c;一种基于注意力的高效模型&#xff0c;用于来自多个摄像机的地图视图语义分割使用相机感知的跨视图注意机制隐式学习从单个相机视…...

MySQL InnoDB 引擎底层解析(一)

6. InnoDB 引擎底层解析 MySQL 对于我们来说还是一个黑盒&#xff0c;我们只负责使用客户端发送请求并等待服务器返回结果&#xff0c;表中的数据到底存到了哪里&#xff1f;以什么格式存放的&#xff1f;MySQL 是以什么方式来访问的这些数据&#xff1f;这些问题我们统统不知…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...