C++中vector的用法

news/2024/11/23 5:14:21/

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。
博主主页:@陈童学哦
所属专栏:C++STL

在这里插入图片描述

前言:Hello各位小伙伴们好!欢迎来到本专栏C++STL的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉所以大家赶紧订阅一起学起来叭!那么话不多说接下来就进入本文C++中vector的学习。

📢📢📢站点

  • ⭐一、vector的简介
  • ⭐二、vector的定义及初始化
  • ⭐三、vector中常用的成员函数
  • ⭐四、vector的遍历
  • ⭐五、vector的真题巩固
  • ⭐六、写在最后

⭐一、vector的简介

vector的中文译为向量,因此vector是C++STL中一个向量类型的容器。vector还是C++STL中最常用也很实用的一个容器,它的功能十分的强大,可以容纳多种类型的数据。在一些特定的情况下普通的数组使用起来会比较局限,因为普通数组只能实现一对一的映射而不能实现一对多的映射,而vector的引入就可以很好的帮助我们解决这个问题。vector的大小是实时更新变化的,非常的灵活多用,因此vector也可以称之为动态数组

使用vector时需要包含头文件:

#include<vector>

⭐二、vector的定义及初始化

  • 定义:
    vector<数据类型>变量名
    例:
//vector的定义 
vector<int> v1; //定义一个储存数据类型为int的vector容器v1 
vector<double> v2; //定义一个储存数据类型为double的vector容器v2 
vector<string> v3; //定义一个储存数据类型为string的vector容器v3
vector<int> v4[N]; //定义一个储存数据类型为int的vector数组,N为大小,相当于二维数组 
vector<double> v5[N]; //定义一个储存数据类型为double的vector数组,N为大小,相当于二维数组 
vector<vector<int> > v6; //定义一个储存数据类型为int的vector动态数组,相当于二维数组 

⭐三、vector中常用的成员函数

关于vector的常用函数:

begin()//返回头部迭代器
end()//返回尾部+1迭代器
size()//返回容器中元素个数
rbegin()//返回逆头部迭代器
rend()//返回逆尾部-1迭代器
front()//返回第一个元素
back()//返回最后一个元素
push_back()//在容器末尾添加一个数据 
emplace_back()//同push_back()作用一样 
pop_back()//删除最后一个元素
empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器中所有元素 

⭐四、vector的遍历

vector的遍历一般有三种方法,接下来就我们就来一一看一下吧!

  • 1.通过迭代器iterator遍历
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> v1; //定义一个vector容器v1.push_back(1); //放入数据v1.push_back(2);v1.push_back(3);v1.push_back(4);vector<int>::iterator it;  //定义一个迭代器itfor(it=v1.begin();it!=v1.end();it++) //通过迭代器遍历输出{cout<<*it<<" ";}
}
  • 2.通过下标遍历
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for(int i=0;i<v1.size();i++){cout<<v1[i]<<" ";}	
}
  • 3.通过foreach遍历
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);for(int k:v1){cout<<k<<" ";}
}

需要注意的一点是,foreach虽然简单易用,但却不支持逆序遍历哦,切记!

⭐五、vector的真题巩固

下面是PTA中团体程序设计天梯赛-练习集的一道L2二阶题目,难度不大,在学完本文后正好合适拿来给大家练练手!

下方为题目链接!!!!!!!!

--------------------L2-015 互评成绩--------------------
题目详情:
学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。

输入格式:
输入第一行给出3个正整数N(3 < N ≤10
4
,学生总数)、k(3 ≤ k ≤ 10,每份作业的评审数)、M(≤ 20,需要输出的学生数)。随后N行,每行给出一份作业得到的k个评审成绩(在区间[0, 100]内),其间以空格分隔。

输出格式:
按非递减顺序输出最后得分最高的M个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。

输入样例:
6 5 3
88 90 85 99 60
67 60 80 76 70
90 93 96 99 99
78 65 77 70 72
88 88 88 88 88
55 55 55 55 55
输出样例:
87.667 88.000 96.000

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{int n,m,k;cin>>n>>k>>m;vector<int>stu[n+1];double final[n+1];double x;for(int i=1;i<=n;i++){double sum=0;for(int j=1;j<=k;j++){cin>>x;sum+=x;stu[i].push_back(x);}sort(stu[i].begin(),stu[i].end());sum=sum-stu[i][0]-stu[i][k-1];final[i]=sum/(stu[i].size()-2);	}sort(final+1,final+n+1);for(int i=n-m+1;i<=n;i++){printf("%.3lf",final[i]);if(i!=n)cout<<" ";}		
}

⭐六、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们不要吝惜手里的三连哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。

🍁🍁🍁那么我们下期再见!拜拜ヾ(•ω•`)o
在这里插入图片描述


http://www.ppmy.cn/news/81781.html

相关文章

从开源框架到微服务架构:Spring Cloud的演进历程

从开源框架到微服务架构&#xff1a;Spring Cloud的演进历程 一、开源框架1. 开源框架的定义和背景2. 开源框架的优势与挑战3. 开源框架对软件开发的影响和发展 二、Spring框架1. Spring框架的诞生背景和发展历程2. Spring框架的特点和优势3. Spring框架在企业级应用中的应用场…

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测 目录 多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多…

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用 1 Nin-Net的简述 1.1 Nin-Net的概述 LeNet、AlexNet和VGG都有⼀个共同的设计模式&#xff1a;通过⼀系列的卷积层与汇聚层来提取空间结构特征&#xff1b;然后通过全连接层对特征的表征进⾏处理。AlexNet和VGG对Le…

【08】Nginx之负载均衡

负载均衡的作用 1、解决服务器的高并发压力&#xff0c;提高应用程序的处理性能。 2、提供故障转移&#xff0c;实现高可用。 3、通过添加或减少服务器数量&#xff0c;增强网站的可扩展性。 4、在负载均衡器上进行过滤&#xff0c;可以提高系统的安全性。 实现方式 方式…

微服务架构初探

大家好&#xff0c;我是易安&#xff01;我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出&#xff0c;他们定义了微服务是由单一应用程序构成的小服务&#xff0c;拥有自己的…

effective c++ 52 写了placement new也要写placement delete

effective c 52 写了placement new也要写placement delete 分析 "placement new"通常是专指指定了位置的new(std::size_t size, void *mem)&#xff0c;用于vector申请capacity剩余的可用内存。 但广义的"placement new"指的是拥有额外参数的operator ne…

day19 - 使用高通滤波提取图像边缘

在OpenCV中&#xff0c;对于图像或者视频的处理都或多或少的会涉及傅里叶变换的概念。在数学上&#xff0c;傅里叶变换是指所有的波形都可以由一系列简单且频率不同的正弦曲线叠加得到。也就是说&#xff0c;人们所看到的波形都是由其他波形叠加得到的。这个概念对操作图像非常…

java按照模板导出pdf或者word

一、java按照模板导出pdf &#xff08;一&#xff09;制作模板 1、在word里制作模板 因为PDF常用的软件不支持编辑&#xff0c;所以先用Word工具&#xff0c;如WPS或者Office新建一个空白Word文档&#xff0c;里面制作出自己想要的样式。 2、 将Word转换成PDF形式 将设置好的W…