Vector容器的详细介绍

一、vector基本概念

1.1 功能:

  -vector 数据结构和数组非常相似,也称单端数组

1.2 vector与普通数组区别:

  - 不同之处在于数组是静态空间,而vector可以动态拓展

1.3 动态拓展:

  并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。
vector容器的迭代器是支持随机访问的迭代器

二、vector的初始构造(四种方式)

#include<iostream>
#include<vector>  // 1、导入vector头文件 
using namespace std;
void printVector(vector<int>&v){for(vector<int>::iterator it = v.begin();it != v.end();it++){cout << *it<<" ";}cout<<endl;
}
// vector容器构造
void test(){vector<int> v1; // 1、默认构造  无参构造for(int i = 0; i < 10; i++){v1.push_back(i);} printVector(v1);// 2、通过区间方式进行构造(复制v1的值给v2)vector<int>v2(v1.begin(),v1.end()); printVector(v2);// 3、n 个 elem方式构造vector<int> v3(10,100);printVector(v3);// 4、拷贝构造方式vector<int>v4(v3);printVector(v4);} int main(){test();return 0;
} 

二、vector的容器_赋值操作(=、assign() 两种方法)

2.1   vector的容器的赋值:

1、vector & operator = (const vector &vec); // 重载等号操作符。
2、assign(beg,end); // 将[beg,end] 区间中的数据拷贝赋值给本身。
3、assign(n,elem); // 将n个elem拷贝赋值给本身。

**

#include<iostream>
#include<vector>  // 1、导入vector头文件 
using namespace std;
void printVector(vector<int>&v){for(vector<int>::iterator it = v.begin();it != v.end();it++){cout << *it<<" ";}cout<<endl;
}
// vector容器构造
void test(){vector<int> v1; // 1、默认构造  无参构造for(int i = 0; i < 10; i++){v1.push_back(i);} printVector(v1);vector<int> v2; // 1、第一种赋值方式 operator =v2 = v1; printVector(v2);// 2、被赋值的向量.assign(v1.begin(),v1.end())的赋值方式 vector<int> v3;v3.assign(v1.begin(),v1.end()); printVector(v3);// 3、n个ele方式赋值vector<int> v4;v4.assign(10,100);printVector(v4);
} 
int main(){test();return 0;
} 

2.2  vector 容量和大小,认识 empty()、capacity()、size()、resize()

  功能描述:对vector 容器和大小操作。
    1、 向量对象.empty(): 为真,代表容器为空
    2、向量对象.capacity() : 统计向量对象的容量。> 向量对象.size();
    3、向量对象.size(): 统计向量对象里的元素个数
    4、重新指定大小 : 向量对象. resize(指定的大小,默认填充值) : 重新指定 向量对象的大小;

#include<iostream>
#include<vector>  // 1、导入vector头文件 
using namespace std;
void printVector(vector<int>&v){for(vector<int>::iterator it = v.begin();it != v.end();it++){cout << *it<<" ";}cout<<endl;
}void test(){vector<int> v1; // 1、默认构造  无参构造for(int i = 0; i < 10; i++){v1.push_back(i);} printVector(v1);// 向量对象.empty(): 为真,代表容器为空 if(v1.empty()){ //  cout << "v1为空" <<endl;		} else {cout << "v1不为空"<<endl;// 1、向量对象.capacity() : 统计向量对象的容量。> 向量对象.size(); cout<< "v1的容量为:"<<v1.capacity() <<endl;// 2、向量对象.size(): 统计向量对象里的元素个数 cout<< "v1的大小:"<< v1.size() <<endl; }// 3、重新指定大小 : 向量对象. resize(指定的大小,默认填充值) : 重新指定 向量对象的大小; v1.resize(15);printVector(v1); // 如果重新指定的比原来长了,默认用0填充新的位置;v1.resize(3); // 如果重新执行的比原来长了,超出部分会被删除; }int main(){test();return 0;
} 

2.2  vector 插入和删除,认识 push_back()、pop_back()、insert()、erase()等

1、push_back(ele) :   // 尾部插入元素ele。
2、pop_back();   // 删除最后一个元素。
3、insert(迭代器位置,ele);   // 迭代器指向位置pos插入元素ele。
4、insert(迭代器位置,插入个数(n),ele);  // 迭代器指向位置pos插入指定个数的元素ele,即在指定位置插入 n 个 ele 元素。
5、erase(pos);   // 删除pos位置上的元素
6、erase(start,end);  // 删除迭代器从start 到 end之间的元素
7、clear();  //删除容器中所有的元素

#include<iostream>
#include<vector>  // 1、导入vector头文件 
using namespace std;
void printVector(vector<int>&v){for(vector<int>::iterator it = v.begin();it != v.end();it++){cout << *it<<" ";}cout<<endl;
}void test(){vector<int> v1; for(int i = 0; i < 10; i++){// 1、尾插 v1.push_back(i);} // 遍历 printVector(v1);//  2、尾删v1.pop_back();printVector(v1);// 3、插入   第一个参数一定是  迭代器(类似指针) v1.insert(v1.begin(),200); printVector(v1);v1.insert(v1.begin(),2,100); // 在迭代器的位置 添加 2个 100 printVector(v1);// 4、删除  : 参数也是迭代器哈! v1.erase(v1.begin());printVector(v1);// 5、删除: 清空  起点  到 终点 v1.erase(v1.begin(),v1.end()); printVector(v1);// 6、清空v1.clear(); }int main(){test();return 0;
} 

2.2  vector 数据存取,认识 at()、operator()、insert()、front()、back()等

  1、at(int idx); // 返回索引 idex 所指向的数据
  2、operator[]; // 返回索引idex 所指的数据
  3、front(); // 返回容器中第一个数据元素
  4、back(); // 返回容器中最后一个数据元素

#include<iostream>
#include<vector>  // 1、导入vector头文件 
using namespace std;
void printVector(vector<int>&v){for(vector<int>::iterator it = v.begin();it != v.end();it++){cout << *it<<" ";}cout<<endl;
}void test(){vector<int> v1; for(int i = 0; i < 10; i++){// 1、尾插 v1.push_back(i);} // 遍历 printVector(v1);// 1、利用[] 方式访问数组中元素for(int j=0;j < v1.size();j++) {cout << v1[j] << " ";}cout<<endl;// 2、利用at方式访问元素for(int a =0; a < v1.size();a++) {cout << v1.at(a) <<" ";}cout << endl;// 3、获取第一个元素cout << "第一个元素为:"<< v1.front() << endl; // 4、获取 最后一个元素cout << "第二个元素为:" << v1.back() << endl; 
}int main(){test();return 0;
} 

2.3  vector互换容器
功能描述:

 实现两个容器内元素进行互换
 函数原型:swap(vec);   // 将vec与本身的元素进行互换

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题03——CAS

1.什么是CAS CAS英文全(Compare And Swap)指比较并交换。 CAS算法包含3个参数&#xff08;V,E,N&#xff09; V表示要更新的变量E表示预期的值N表示新值 在且仅在V值等于E值时&#xff0c;才会将V值设为N&#xff0c;如果V值和E值不同&#xff0c;则说明已经有其他线程做了更新…

如何做好培训管理?推荐使用这款培训管理系统(内附详细步骤+免费模板)

本文将为大家讲解&#xff1a;1、如何做好培训管理&#xff1f;2、如何使用零代码平台搭建培训管理系统&#xff1f; 培训管理&#xff0c;作为企业人力资源管理的核心环节&#xff0c;对于确保员工具备完成任务所需的专业知识和技能发挥着至关重要的作用。它不仅是提升员工绩…

北斗卫星为野外科考人员提供安全保障

北斗卫星为野外科考人员提供安全保障 自第二次青藏高原综合科学考察研究启动以来&#xff0c;青海不断提升科考服务保障能力&#xff0c;推动科考全程信息化&#xff0c;有效促进科考成果转化。 为保障科考人员的人身安全&#xff0c;青海省青藏科学考察服务中心开发了基于北…

CF1630A And Matching 题解

And Matching 传送门 You are given a set of n n n ( n n n is always a power of 2 2 2) elements containing all integers 0 , 1 , 2 , … , n − 1 0, 1, 2, \ldots, n-1 0,1,2,…,n−1 exactly once. Find n 2 \frac{n}{2} 2n​ pairs of elements such that: Ea…

宝藏api推荐,热门、免费、好用

台风信息查询&#xff1a;提供西北太平洋及南海地区过去两年及当前年份所有编号台风的信息查询&#xff0c;包括台风实时位置、过去路径、预报路径及登陆信息等要素。短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可…

第08章_面向对象编程(高级)(static,单例设计模式,理解mian方法,代码块,final,抽象类与抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程(高级)本章专题与脉络1. 关键字&#xff1a;static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式1.4.2 静态方法的特点1.4.3 举例 1.5 练习 …

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

高频一体式读写器的应用及其原理

高频一体式读写器作为一款读写设备&#xff0c;将RFID读写模块和天线集于一体&#xff0c;通过天线与RFID标签进行无线通信&#xff0c;实现对标签的识别和内存数据的读出或写入操作。具备安全、准确、快速、扩展、兼容性强等特点&#xff0c;具备非接触识别、远距离识别、环境…

Laravel 10.x 里如何使用ffmpeg

原理上很简单&#xff0c;就是使用命令行去调用ffmpeg&#xff0c;然后分析一下输出是不是有错误。 安装 首先安装 symfony/process&#xff0c;主要用于包装一下&#xff0c;用来代替 exec, passthru, shell_exec and system 。 composer require symfony/process composer…

PowerShell install 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…

linux性能优化-磁盘I_O优化

1.文件系统 1.1.文件系统的工作原理 文件系统是在磁盘的基础上&#xff0c;提供了一个用来管理文件的树状结构。 接下来我们就看看Linux 文件系统的工作原理。 1.1.1索引节点和目录项 在 Linux 中一切皆文件 ,文件系统,本身是对存储设备上的文件&#xff0c;进行组织管理的…

【Linux】—— 共享内存

本期我将要带大家学习的是有关进程间通信的另一种方式——共享内存。共享内存是一种用于进程间通信的高效机制&#xff0c;允许多个进程访问和操作同一块内存区域。 目录 &#xff08;一&#xff09;深刻理解共享内存 1.1 概念解释 1.2 共享内存原理 1.3 共享内存数据结构 …

基于SpringBoot的药品管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

2024年华为OD机试真题-最大坐标值-Python-OD统一考试(C卷)

题目描述: 小明在玩一个游戏,游戏规则如下: 在游戏开始前,小明站在坐标轴原点处(坐标值为0)。 给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指定的要求前进或者后退指定的步数。前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走。 幸运数为一个整数…

【css技巧】css实现边框渐变

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在CSS中实现边框渐变效果&#xff0c;你不能直接应用渐变到border属性上&#xff0c;因为CSS标准不支持这样的操作。但是&#xff0c;你可以使用一些技巧来模拟边框渐变的效果。以…

数据治理能解决AI疲劳问题吗?

这篇文章强调了AI疲劳开始的两个阶段&#xff0c;并介绍了数据质量报告等数据治理措施如何能够推动构建值得信赖和健壮的模型。 数据治理和AI疲劳听起来像是两个不同的概念&#xff0c;但两者之间有着内在的联系。为了更好地理解它&#xff0c;让我们从它们的定义开始。 数据治…

JS 将字符串‘10.3%‘ 经过运算加2转换为 ‘12.3%‘

文章目录 需求分析 需求 已知 字符串 a ‘10.3%’&#xff0c;现需将转换为 字符串’12.3%’ 分析 去掉百分号&#xff0c;将字符串转换为数字 const aNumber parseFloat(10.3%); const resultNumber aNumber 2;将结果转换为带百分号的字符串 const resultString re…

【算法题】67. 二进制求和

题目 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a; 输入&#xff1a;a "1010", b "1011" 输出…

【OpenCV】P1 开发环境搭建

目录 OpenCV 简介OpenCV 安装*Windows* 下载安装*Macos* 下载安装*Ubuntu* 下载安装 OpenCV is the word’s biggest computer vision library. It’s open source, contains over 2500 algorithms and is operated by the non-profit Open Source Vision Foundation. – From …

灰度图像的自动阈值分割

第一种&#xff1a;Otsu &#xff08;大津法&#xff09; 一、基于cv2的API调用 1、代码实现 直接给出相关代码&#xff1a; import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…