C++ vector 动态 向量/数组

文章目录

  • 【 1. vector 的声明与初始化 】
    • 1.1 vector 的声明
    • 1.2 vector 的初始化
      • 1.2.1 构造一个空的 vector
      • 1.2.2 指定数量初值的方式初始化 vector
      • 1.2.3 迭代器的方式初始化
      • 1.2.4 构造一个相同的 vector
  • 【 2. vector 的相关操作 】
    • 2.1 插入元素
      • 2.1.1 在vector的末尾插入新元素
      • 2.1.2 在迭代器的前面插入新元素
      • 2.1.3 覆盖原有的 vector
    • 2.2 删除元素

  • vector数组是可以 存放任意数据类型 动态数组
    和普通数组类似,可以通过下标对数组中的元素进行引用。
  • 使用vector数组要在 头文件中加 #include <vector>
  • vectors 包含着一系列连续存储的元素,其行为和数组类似。访问 vector 中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在vector中插入元素则是线性时间复杂度。

【 1. vector 的声明与初始化 】

1.1 vector 的声明

  • 声明
vector<int> vec;//声明一个存放int型的向量vec

1.2 vector 的初始化

1.2.1 构造一个空的 vector

  • 基本语法
    构造一个空的vector。
vector<int> myvector();
//或者
vector<int> myvector;
  • 举例1
    构造一个空的 vector myvector。
#include<iostream>
#include<vector>

using namespace std;
int main()
{ 
	vector<int> myvector();
	return 0;
}

在这里插入图片描述

1.2.2 指定数量初值的方式初始化 vector

  • 基本语法
    构造一个初始放入num个值为val的元素的vector。
  vector( size_type num, const TYPE &val );
  • 举例1
    构造一个 5 个 3 的 vector。这里 myvec.size() 返回 myvec 元素数量大小
#include<iostream>
#include<vector>

using namespace std;
int main()
{ 
	vector<int> myvec(5, 3);
	for (int j=0;j<myvec.size();++j)
		cout << myvec[j]<<endl;
	return 0;
}

在这里插入图片描述

1.2.3 迭代器的方式初始化

  • 基本语法
    构造一个初始值为 [start,end) 区间元素的vector。
vector( input_iterator start, input_iterator end );
  • 举例1
    将 myvec 初始化为 [地址a,地址a+3)的元素 。
#include<iostream>
#include<vector>

using namespace std;
int main()
{ 
	int a[5] = { 1, 2, 3, 4, 5 };
	vector <int>myvec( a,a+3 );
	for (int j=0;j<myvec.size();++j)
		cout << myvec[j]<<endl;
	return 0;
}

在这里插入图片描述

  • 举例2
    将 myvec 初始化为 [地址&a[1],地址&a[4])的元素 。
#include<iostream>
#include<vector>

using namespace std;
int main()
{ 
	int a[5] = { 1, 2, 3, 4, 5 };
	vector<int> myvec(&a[1], &a[4]);
	for (int j=0;j<myvec.size();++j)
		cout << myvec[j]<<endl;
	return 0;
}

在这里插入图片描述

1.2.4 构造一个相同的 vector

  • 基本语法
    构造一个与 AnthorVector 相同的vector 。
vector( const vector &AnthorVector);
  • 举例1
    构造一个与 myvec 相同的 myvec2 。
#include<iostream>
#include<vector>

using namespace std;
int main()
{ 
	int a[5] = { 1, 2, 3, 4, 5 };
	vector<int> myvec(&a[1], &a[4]);
	vector <int>myvec2(myvec);
	for (int j=0;j<myvec.size();++j)
		cout << myvec2[j]<<endl;
	return 0;
}

在这里插入图片描述

【 2. vector 的相关操作 】

在这里插入图片描述
下面给出几个常用的操作及案例。

2.1 插入元素

2.1.1 在vector的末尾插入新元素

  • 基本语法
    在 myvec 的末尾添加元素newvalue。
myvec.push_back(newvalue);
  • 举例1
    在 myvec 的末尾添加元素1。
#include<vector>

using namespace std;
int main()
{
	vector<int> myvec(5, 3);
	myvec.push_back(1);
	for (int j = 0; j <myvec.size(); ++j)
		cout << myvec[j] << endl;
	return 0;
}

在这里插入图片描述

2.1.2 在迭代器的前面插入新元素

  • 基本语法
    在 myvec 的前面添加元素newvalue。
vector<int>::iterator it;
it=vec.begin();
vec.insert(it,newvalue);
  • 举例1
    在 myvec 的前面添加元素1。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> myvec(5, 3);
	vector<int>::iterator it;
	it = myvec.begin();
	myvec.insert(it, 1);
	for (int j = 0; j <myvec.size(); ++j)
		cout << myvec[j] << endl;
	return 0;
}

在这里插入图片描述

2.1.3 覆盖原有的 vector

  • 基本语法
    在vector中加入NewNum个NewValue元素,同时清除掉以前的元素。
vec.assign(NewNum,NewValue);//现在vec中只有NewNum个NewValue
  • 举例1
    现在vector中只有2个1。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> myvec(5, 3);
	myvec.assign(2, 1);//现在vector中只有2个1
	for (int j = 0; j <myvec.size(); ++j)
		cout << myvec[j] << endl;
	return 0;
}

在这里插入图片描述

2.2 删除元素

  • 基本语法
//删除最后一个元素
vec.pop_back();

//删除指定位置的元素
vec.erase(vec.begin());//删除第一个位置的元素值

//清除所有元素
vec,clear();
  • 举例1
    删除 myvec 的最后一个元素
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> myvec(5, 3);
	myvec.pop_back();
	for (int j = 0; j <myvec.size(); ++j)
		cout << myvec[j] << endl;
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ios 之 netty版本swiftNio(socket创建)

SwiftNio 简介 用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。 SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 这就像Netty&#xff0c;但是为Swift写的。 Xcode引入swiftNio 在实…

【Linux】常见命令

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 常用命令 1. ls2. pwd3. cd4. touch5. cat6. mkdir7. rm8. cp9. mv10. tail11. vim12.…

idea使用docker将Java项目生成镜像并使用

1&#xff1a;开启docker 远程访问 使用 vim 编辑docker服务配置文件 vim /lib/systemd/system/docker.service [Service] Typenotify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not suppor…

2024-04-02 在使用QtRemoteObject 过程中遇到的问题记录

前言 QtRemoteObject 的使用分为静态和动态使用&#xff0c;静态使用需要定义rep文件&#xff0c;相当于通信协议&#xff0c;保证源端和节点端类型的统一。 这些可以参考这两文章&#xff1a; https://zhuanlan.zhihu.com/p/36501814 https://zhuanlan.zhihu.com/p/3710817…

校园圈子系统-论坛,跑腿,地图找伴,二手市场,语音交友,APP小程序H5三端源码交付,支持二开!

2024年最新版推荐一个论坛社区系统 /社区论坛小程序/商城论坛小程序/源码。 带热门,带算法推荐 &#xff0c;低成本上线的&#xff0c;论坛社区小程序源码强大售后&#xff0c;持续更新 功能&#xff1a;小程序授权登陆&#xff0c;支持app双端&#xff0c;小程序&#xff0c;…

qt5-入门-自定义委托-简单例子

参考&#xff1a; Qt 自定义委托_w3cschool https://www.w3cschool.cn/learnroadqt/ov8h1j4z.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 理论知识 Qt的model/view架构中&#xff0c;view只是…

FastAPI Web框架教程 第14章 部署

14-1 在Linux上安装Python 【环境】 腾讯云服务器 Centos 8 【安装方式】 源码编译安装 安装步骤&#xff1a; 第1步&#xff1a;更新yum源 cd /etc/yum.repos.d/ sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* sed -i s|#baseurlhttp://mirror.centos.…

RESTful的优点

优点 1.通过url对资源定位&#xff0c;语义清晰&#xff1b; 2.通过HTTP谓词表示不同的操作&#xff0c;接口自描述&#xff1b; 3.可以对GET、PUT、DELETE请求重试&#xff08;幂等的&#xff09;&#xff1b; 4.可以对GET请求做缓存&#xff1b; 5.通过HTTP状态码反映服务器端…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个共同点是…

Java面试必问题24:线程池的拒绝策略有哪些 synchronized 和 lock 的区别 (重点)

以上列出的是Java线程池中常见的拒绝策略&#xff0c;具体可以根据实际情况选择合适的拒绝策略&#xff0c;也可以自定义实现RejectedExecutionHandler接口来定义自己的拒绝策略。默认的拒绝策略是AbortPolicy&#xff0c;即直接抛出异常。 最简回答&#xff1a;线程池的拒绝策…

6000000IOPS!FASS×kunpeng920全新突破

实测数据详见下文 网络环境 前端和后端网均采用100GE网络&#xff0c;管理网采用1Gbps以太网。 前端网和后端网通过不同网段隔离&#xff0c;与管理网物理隔离。 软硬件配置 存储端配置&#xff1a; 客户端配置&#xff1a; 软件配置&#xff1a; 存储集群配置&#xff1a; …

EasyExcel 复杂表头的导出(动态表头和静态表头)

问题&#xff1a;如图&#xff0c;1部分的表头是动态的根据日期变化&#xff0c;2部分是数据库对应的字段&#xff0c;静态不变的&#xff1b; 解决方案&#xff1a;如果不看1的部分&#xff0c;2部分内容可以根据实体类注解的方式导出&#xff0c;那么我们是不是可以先将动态表…

选精益制造咨询公司,牢记这几点,轻松避开陷阱!

众所周知&#xff0c;选择一家合适的精益制造咨询公司&#xff0c;可以帮助企业实现转型升级&#xff0c;提升生产效率和市场竞争力。然而&#xff0c;市场上的咨询公司众多&#xff0c;如何选择一家真正专业、有实力的公司&#xff0c;避免踩坑呢&#xff1f; 一、看准公司背景…

MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记

以前微处理器&#xff08;MPU&#xff09;与微控制器&#xff08;MCU&#xff09;是截然不同的两种设备&#xff0c;MPU支持丰富的软件系统&#xff0c;如Linux和相关的软件堆栈&#xff0c;而MCU通常将专注于裸机和RTOS。近年来&#xff0c;随着MCU的性能越来越高&#xff0c;…

前端二维码生成工具小程序:构建营销神器的技术解析

摘要&#xff1a; 随着数字化营销的不断深入&#xff0c;二维码作为一种快速、便捷的信息传递方式&#xff0c;已经广泛应用于各个领域。本文旨在探讨如何通过前端技术构建一个功能丰富、操作简便的二维码生成工具小程序&#xff0c;为企业和个人提供高效的营销支持。 一、引言…

数字化助力乡村振兴:数字乡村展现新活力

目录 一、数字乡村的概念与内涵 二、数字化助力乡村振兴的具体表现 1、促进农村产业升级 2、提升农民生活质量 3、优化农村治理体系 三、数字乡村展现的新活力 1、创新发展模式的活力 2、激发农民内生动力的活力 3、提升乡村整体形象的活力 四、数字乡村发展面临的挑…

记一次Cannot deploy POJO class [xxx$$EnhancerBySpringCGLIB$$xxx]的错误

最近项目上需要使用websocket做服务端&#xff0c;那好说啊&#xff0c;直接springboot集成的websocket 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><versi…

Linux_进程通信_管道_system V共享内存_6

文章目录 一、进程通信分类二、管道1.什么是管道1.原理2.管道的特点 2.匿名管道3.命名管道1.创建命名管道文件 - mkfifo (命令)2.创建命名管道文件 - mkfifo (函数) 三、system V共享内存1.原理2.共享内存函数1.fotk2.shmget1.如何知道有哪些IPC资源 - ipcs &#xff08;命令&a…

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时&#xff0c;它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程&#xff0c;能管理主机系…

Day78:服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE漏洞

目录 前置知识 数据库应用-Redis-未授权访问&CVE漏洞 未授权访问&#xff1a;CNVD-2015-07557 未授权访问-CNVD-2019-21763 未授权访问-沙箱绕过RCE-CVE-2022-0543 数据库应用-Couchdb-未授权越权&CVE漏洞 Couchdb 垂直权限绕过&#xff08;CVE-2017-12635&…