当前位置: 首页 > 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…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

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…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...