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

如何熟练使用vector?

在这里插入图片描述

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:介绍vector的使用

vector官网链接:传送门

目录

  • 一、构造函数
    • (1)无参构造
    • (2)初始化为n个值
    • (3) 迭代器区间初始化
    • (4)拷贝构造
  • 二、容量操作
    • (1) 一览表
    • (2) 代码演示
  • 三、修改与访问
    • (1) push_back && pop_back
      • assign()
    • (2) insert()
    • (3) erase()函数
    • (4) swap()
    • (5) `[]`运算符重载

一、构造函数

在这里插入图片描述

构造函数含义
vector (const allocator_type& alloc = allocator_type());无参构造
vector(size_type n, const value_type& val = value_type())初始化为nval
vector (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type())迭代器区间初始化
vector (const vector& x);拷贝构造

(1)无参构造

默认什么元素也没有.
有效元素个数:size=0
容量:capacity=0;

	//无参构造vector<int> v1;//auto it1 = v1.begin();//可以使用auto自动推导类型vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1 ++ ;}cout << "v1.size=" << v1.size() << endl;cout << "v1.capacity=" << v1.capacity() << endl;cout << endl;

运行结果:

v1.size=0
v1.capacity=0

(2)初始化为n个值

nval去初始化vector;

	//初始化为n个值vector<int> v2(4,0);//auto it2 = v2.begin();vector<int>::iterator it2 = v2.begin();while (it2 != v2.end()){cout << *it2 << " ";it2++;}cout << endl;

运行结果:

0 0 0 0

(3) 迭代器区间初始化

用一个迭代器区间进行初始化,这里采用数组的头和尾作为迭代器区间.

	//迭代器区间初始化int a3[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v3(a3, a3 + 10);//注意这里给的是+10,因为迭代器的end是指向最后一个有效元素的下一个位置,左闭右开auto it3 = v3.begin();while (it3 != v3.end()){cout << *it3 << " ";it3++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

(4)拷贝构造

	//拷贝构造vector<int> v4(v3);//v3就是上面的迭代器区间初始化好的v3auto it4 = v4.begin();while (it4 != v4.end()){cout << *it4 << " ";it4++;}cout << endl;

运行结果:

1 3 4 5 6 7 8 98 100 11

二、容量操作

在这里插入图片描述

(1) 一览表

接口说明
size()有效数据的个数
resize()改变有效数据的个数
capacity()容量大小
empty()判空
reserve()改变容量大小

(2) 代码演示

void test2()
{int a1[10] = { 1,3,4,5,6,7,8,98,100,11 };vector<int> v1(a1, a1 + 10);cout << "v1.size()=" << v1.size() << endl;//显示有效数据的个数cout << "v1.capacity()=" << v1.capacity() << endl;//显示容量的大小cout << "v1.empty()=" << v1.empty() << endl;//判断容器是否为NULLcout << endl;v1.resize(5);//改变有效数据的个数cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;vector<int>::iterator it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.resize(15,66);cout << "v1.size()=" << v1.size() << endl;cout << "v1.capacity()=" << v1.capacity() << endl;cout << endl;it1 = v1.begin();while (it1 != v1.end()){cout << *it1 << " ";it1++;}cout << endl;v1.reserve(10);//改变容量的大小.cout << "v1.capacity()=" << v1.capacity() << endl;v1.reserve(50);cout << "v1.capacity()=" << v1.capacity() << endl;}

运行结果:
在这里插入图片描述

三、修改与访问

在这里插入图片描述

接口说明
assign()将新内容覆盖给容器,替换其当前内容,并相应地修改其大小。
push_back()尾插
pop_back()尾删
insert()指定位置pos之前插入
erase()删除指定位置pos的值
swap()交换两个容器
operator[ ]()下标访问运算符重载

(1) push_back && pop_back

尾插和尾删相信大家已经比较熟悉了.

assign()

assign函数需要注意.
void assign (size_type n, const value_type& val);

如果n<size,则是将nval将原有数据覆盖,令size=n,而不修改容量.
如果n>size,则先扩容,再将nval值存入.

	//push_back &&pop_backint a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){	//1 2 3 4 5cout << itt << " ";}cout << endl;//尾插v1.push_back(6);v1.push_back(7);for (auto itt : v1){	//1 2 3 4 5 6 7cout << itt << " ";}cout << endl;//尾删v1.pop_back();for (auto itt : v1){	//1 2 3 4 5 6cout << itt<<" ";}cout << endl;//将新内容覆盖给容器,替换其当前内容,并相应地修改其大小v1.assign(5, 2);for (auto itt : v1){	//2 2 2 2 2cout << itt << " ";}cout << endl << v1.size() << " " << v1.capacity() << endl;//5 7cout << endl;

运行结果:

1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6
2 2 2 2 2
5 7

(2) insert()

指定位置pos之前插入.
在这里插入图片描述

代码演示:

	int a1[5] = { 1,2,3,4,5 };vector<int> v1(a1, a1 + 5);for (auto itt : v1){cout << itt << " ";}cout << endl;//iterator insert(iterator position, const value_type & val);v1.insert(v1.begin() + 2, 66);//在第三个位置的前面插入数据.for (auto itt : v1){cout << itt<<" ";}cout << endl;//void insert(iterator position, size_type n, const value_type & val);v1.insert(v1.begin() + 5, 5, -1);//在第六个位置的前面插入5个-1.for (auto itt : v1){cout << itt << " ";}cout << endl;int a2[5] = { 1,2,3,4,5 };int a3[5] = { 6,7,8,9,10 };vector<int> v2(a2, a2 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;//void insert (iterator position, InputIterator first, InputIterator last);v2.insert(v2.begin()+5,a3 ,a3 + 5);for (auto itt : v2){cout << itt << " ";}cout << endl;

运行结果:
在这里插入图片描述

(3) erase()函数

在这里插入图片描述

删除指定位置pos的值

	//eraseint a4[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v4(a4, a4 + 10);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator position);v4.erase(v4.begin() + 1);for (auto itt : v4){cout << itt << " ";}cout << endl;//iterator erase (iterator first, iterator last);v4.erase(v4.begin()+4, v4.begin() + 9);for (auto itt : v4){cout << itt << " ";}cout << endl;

运行结果:
在这里插入图片描述

(4) swap()

用于交换两个容器,注意观察交换后容量的变化.

//swap//void swap(vector & x);int a5[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v5(a5, a5 + 10);int a6[10] = { 2,4,6,8,10 };vector<int> v6(a6, a6+5);cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;swap(v5, v6);cout << endl;cout << "v5=";for (auto itt : v5){cout << itt << " ";}cout << endl;cout << "v6=";for (auto itt : v6){cout << itt << " ";}cout << endl;cout << "v5.capacity()" << v5.capacity();cout << endl;cout << "v6.capacity()" << v6.capacity();cout << endl;

运行结果:
在这里插入图片描述

(5) []运算符重载

可以像数组一样通过下标直接访问.

	//[]int a7[10] = { 1,2,3,4,5,6,7,8,9,10 };vector<int> v7(a5, a5 + 10);cout << "v7=";for (int i = 0; i < 10; i++){cout << v7[i] << " ";}

v7=1 2 3 4 5 6 7 8 9 10

vector的使用就分享到这里了.下一期vector模拟实现见.

在这里插入图片描述

相关文章:

如何熟练使用vector?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…...

gitlab-rake gitlab:backup:create 执行报错 Errno::ENOSPC: No space left on device

gitlab仓库备份执行 gitlab-rake gitlab:backup:create报错如下&#xff1a; 问题分析&#xff1a;存储备份的空间满 解决方法&#xff1a; 方法1&#xff1a;清理存放路径&#xff0c;删除不需要文件&#xff0c;释放空间。 方法2&#xff1a;创建一个根目录的挂载点&#x…...

【Nginx】负载均衡当其中一台服务器宕机之后

搭建一个简单的负载均衡&#xff0c;然后关闭其中一台再来访问&#xff0c;会发现我们的浏览器卡住一直转圈圈&#xff0c;过了很久才会显示结果。由此我们可以得出结论Nginx负载的时候如果其中一台服务挂掉了&#xff0c;它会把请求转发到另一个可以提供服务的机器&#xff0c…...

每日一题 2511. 最多可以摧毁的敌人城堡数目

难度&#xff1a;简单 翻译&#xff1a;寻找距离最远的 1 和 -1 的组合&#xff0c;要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…...

NLP(六十七)BERT模型训练后动态量化(PTDQ)

本文将会介绍BERT模型训练后动态量化&#xff08;Post Training Dynamic Quantization&#xff0c;PTDQ&#xff09;。 量化 在深度学习中&#xff0c;量化&#xff08;Quantization&#xff09;指的是使用更少的bit来存储原本以浮点数存储的tensor&#xff0c;以及使用更少的…...

机器学习和数据挖掘04-PowerTransformer与 MinMaxScaler

概念 PowerTransformer&#xff08;幂变换器&#xff09; PowerTransformer 是用于对数据进行幂变换&#xff08;也称为Box-Cox变换&#xff09;的预处理工具。幂变换可以使数据更接近正态分布&#xff0c;这有助于某些机器学习算法的性能提升。它支持两种常用的幂变换&#x…...

1.15 自实现GetProcAddress

在正常情况下&#xff0c;要想使用GetProcAddress函数&#xff0c;需要首先调用LoadLibraryA函数获取到kernel32.dll动态链接库的内存地址&#xff0c;接着在调用GetProcAddress函数时传入模块基址以及模块中函数名即可动态获取到特定函数的内存地址&#xff0c;但在有时这个函…...

总结ADX指标交易的好处

股神巴菲特从一个穷小子变成世界富豪&#xff0c;而闻名世界。anzo capital昂首资本以为这辈子再也不会和巴菲特产生任何交集&#xff0c;直到我看了巴菲特的发家史&#xff0c;才发现原来我们都使用过ADX指标盈利过&#xff0c;下面anzo capital昂首资本就总结一下使用ADX指…...

ConsoleApplication815项目(直接加载+VEH Hook Load)

上线图 ConsoleApplication815.cpp #include <iostream> #include<Windows.h> #include "detours.h" #include "detver.h" #pragma comment(lib,"detours.lib")#pragma warning(disable:4996)LPVOID Beacon_address; SIZE_T Beacon…...

事务(SQL)

事务概述 事务是一组操作的集合&#xff0c;他是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向西永提交或撤销操作请求。这组操作&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败。 事务操作 查看/设置事务提交方式 -- 查看/设置事务…...

原型,原型链,继承(圣杯模式)

经典模式和圣杯模式区别 经典模式和圣杯模式都是用于解决构造函数继承和原型继承的问题&#xff0c;但它们在实现继承的方式上有所不同。 经典模式是通过将子类的原型对象设置为父类的实例来实现继承&#xff0c;然后将子类的构造函数设置为子类本身。这样子类既可以继承父类…...

远程方法调用中间件Dubbo在spring项目中的使用

Dubbo是一个分布式服务框架&#xff0c;它可以帮助我们快速开发和提供高性能、高可靠性的分布式服务&#xff0c;同时提供服务治理、容错、负载均衡等功能。 使用Dubbo可以分为以下步骤&#xff1a; 引入Dubbo依赖&#xff1a;在项目的pom.xml文件中引入Dubbo的依赖。编写服务…...

MFC -- Date Time Picker 控件使用

当前环境&#xff1a;VS2015 Windows 10 //&#xff08;一&#xff09;使用普通函数&#xff0c; 获取当前时间CString strCurrentTime; COleDateTime m_time COleDateTime::GetCurrentTime(); strCurrentTime m_time.Format(_T("%Y-%m-%d %H:%M:%S")); SetDlgIt…...

zookeeper 集群

zookeeper 集群 1、zookeeper 集群说明 initLimit 是Zookeeper用它来限定集群中的Zookeeper服务器连接到Leader的时限 syncLimit 限制了follower服务器与leader服务器之间请求和应答之间的时限 服务器名称与地址&#xff1a;集群信息&#xff08;服务器编号&#xff0c;服务器…...

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改4.2 固定某个人物-修改背景 三、差异随机种子1. webUI位置2. 什么…...

大数据可视化大屏实战项目(4)物流数据云看台(包括动态登陆页面)—HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)

大数据可视化大屏实战项目&#xff08;4&#xff09;物流数据云看台&#xff08;包括动态登陆页面&#xff09;—HTMLCSSJS【源码在文末】&#xff08;可用于比赛项目或者作业参考中&#x1f415;&#x1f415;&#x1f415;&#xff09; 一&#xff0c;项目概览 ☞☞☞☞☞☞…...

在ubuntu下远程链接仓库gitte/github

后期适当加点图片&#xff0c;提高可读性。 本教程是最基础的连接教程&#xff0c;设计git的操作也仅仅局限于push/pull&#xff0c;如果想全面了解&#xff0c;可以参考廖雪峰git教程 在Ubuntu上初始化本地Git仓库并链接到远程Gitee仓库(github同理)&#xff0c;需要按照以下步…...

一些自己整理的工具实用参数

工具实用参数 sqlmap -u: 指定需要测试的目标URL&#xff08;格式&#xff1a;http://www.example.com/test.php?id1&#xff09; --cookie: 设置需要发送的 HTTP Cookie&#xff0c;例如&#xff1a;--cookie"sid123456;PHPSESSID654321" --threads&#xff1a;…...

C# Timer定时器

C# Timer定时器 Timer定时器定时器主要用到的就是Timer的Tick事件&#xff0c;另外还要设置时间间隔&#xff1a; 下面这个实力演示了每隔一秒&#xff0c;picturebox中的图片来回切换&#xff0c;每隔一秒&#xff0c;文本框中显示当前时间。 using System; using System.Co…...

oracle怎么删除表索引

Oracle是目前常用的企业级关系型数据库管理系统&#xff0c;用于存储和管理大量数据。在Oracle中&#xff0c;表索引是用于提高查询效率的重要组成部分&#xff0c;但也有时候需要删除表索引。本文将介绍如何在Oracle中删除表索引。 一、查看表索引 在删除表索引之前&#xff…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...