C++ vector类成员函数介绍

目录

🤔vector模板介绍:

🤔特点:

🤔vector的成员函数:

🔍vector构造函数:

 🔍vector赋值函数

 🔍vector容器的判断函数

    resize函数的重点内容:

🔍 vector的删除和插入

🔍 vector数据存取功能:

🔍vector互换容器

     swap 实际用途:

🤔结束!


🤔vector模板介绍:

          📖vector模板C++标准库中的一个容器类,被设计为动态数组,即它可以根据需要自动分配内存空间来存储元素。vector模板的本质是一个类模板,它使用了C++语言中的模板技术,使其能够适应不同的数据类型,提供了一种通用的容器类实现。
          📖具体而言,vector类使用连续的内存来存储元素,它提供了访问和操作元素的方法,如push_back()、pop_back()、at()、[]等,同时还提供了一些其他的方法,如size()、capacity()、empty()等,以帮助用户管理容器的大小和内存分配等问题。在实际编程中,vector模板可以作为一种通用的容器使用,可以方便地存储和管理各种类型的数据。

🤔特点:

📖1.动态扩容:vector模板可以动态地扩充容器大小,当容器中元素数量增加时,vector会自动分配更多的内存空间来存储元素。这样可以避免手动分配内存空间带来的麻烦和错误。

📖2.随机访问:vector中的元素是连续存储的,因此,可以通过下标的方式(使用[]操作符)来访问任何一个元素。这使得vector可以高效地进行随机访问。

📖3.内存管理:vector会自动管理内存,当元素被删除或者容器的大小被缩小时,vector会自动回收不再需要的内存。这种管理方式可以避免内存泄漏问题。

📖4.插入和删除元素:vector提供了多种插入和删除元素的方法,如push_back()  pop_back()、erase()等。这些方法可以方便地操作容器中的元素。

📖5.大小变化:vector中的元素数量可以随时变化,因此可以方便地进行动态管理。同时,vector还提供了一些方法,如size()、capacity()、empty()等,以帮助用户管理容器的大小和内存分配等问题。

🤔vector的成员函数:

🔍vector构造函数:

📖1.采用模板实现类实现,默认构造函数:vector <T> v;

vector<类型>名称;

📖2.将v[begin(),end())区间中的元素拷贝给自身:vector<v.begin(),v.end()>;

vector<int>v1;
vector<int>v2(v1.begin(), v1.end());

📖3.将n个elem元素拷贝给自身:vector(n,elem);

vector<int>v3 (n, elem);

📖4.将另外一个vector类对象拷贝给自身:vector(const vector &vec);

	vector<int> v4(v3);

📖代码实例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << "";}
}
void test01()
{	//默认构造  无参构造vector<int>v1;for (int i = 0; i < 9; i++){v1.push_back(i);}cout << "默认构造:";printv(v1);cout << endl;//区间拷贝构造vector<int>v2(v1.begin(), v1.end());cout << "区间拷贝构造:";printv(v2);cout << endl;//n个elem构造vector<int>v3 (10, 8);cout << "n个elem构造:";printv(v3);cout << endl;//拷贝构造vector<int> v4(v3);cout << "拷贝构造:";printv(v4);cout << endl;}
int main()
{test01();
}

📖运行结果:


 

 🔍vector赋值函数

📖1.将n个elem拷贝赋值给本身:assign(n,elem);

vector<int>v1;
v1.assign(n, elem);

📖2.将[beg,end)区间中的数据拷贝赋值给本身:assign(begin,end);

vector<int>v2;
v2.assign(v1.begin(), v1.end());

📖3.重载等号运算符:vector &operator =(const vector &vec)

vector<int>v3=v2;

📖代码实例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{	//将n个elem拷贝赋值给本身vector<int>v1;v1.assign(10, 8);cout << "将n个elem拷贝赋值给本身";printv(v1);//将[beg,end)区中的数据拷贝复制给自己vector<int>v2;v2.assign(v1.begin(), v1.end());cout << "将[beg,end)区中的数据拷贝复制给自己";printv(v2);//重载等号赋值运算符vector<int>v3=v2;cout << "重载等号赋值运算符";printv(v3);}
int main()
{test01();
}

📖运行结果:

 🔍vector容器的判断函数

📖1.判断容器是否为空:empty();

📖2.容器的容量:capacity();

📖3.返回容器中元素的个数:size();

📖4.重新指定容器的长度,如果容器变长,就以默认值填充,如果容器变短,则末尾超过容器长度的元素被删除:resize(int num);

📖5.重新指定容器的长度为num,如果容器的长度变长,就以elem值填充新位置,如果容器变短,则末尾超出容器长度元素被删除:resize(int num,elem);

📖代码实例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{vector<int>v1;v1.assign(8, 4);printv(v1);cout <<"该容器是否为空? " << v1.empty() << endl; //1为空,0为不空cout <<"该容器的容量是" << v1.capacity() << endl;cout <<"该容器中的元素个数是: " << v1.size() << endl;v1.resize(12);printv(v1);v1.resize(14, 8);printv(v1);}
int main()
{test01();
}

📖运行结果:

resize函数的重点内容:

📖1.编译器扩容会比你要求扩容的,例如你写resize(2000),编译器实际可能扩到2300。

📖2.resize函数的缩放机制不一样❌,如下:

 

📖 代码验证:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
void test02()
{vector <int> v;for (int i = 0; i < 100000; i++){v.push_back(i);}v.resize(4);cout << "v的容量为:" << v.capacity() << endl;;cout << "v的大小为:" << v.size() << endl;v.resize(200000);cout << "v.resize(200000)后v的容量为:" << v.capacity() << endl;;cout << "v.resize(200000)后v的大小为:" << v.size() << endl;v.resize(4);cout << "v.resize(4)后v的容量为:" << v.capacity() << endl;;cout << "v.resize(4)后v的大小为:" << v.size() << endl;}
int main()
{test02();
}

📖运行结果:

🔍 vector的删除和插入

📖1.对容器尾部元素进行插入:push_back();

📖2.删除最后一个 元素:pop_back();

📖3.从pos位置删除元素elem:insert(const_iterator pos,elem);

📖4.从pos位置上插入count个elem:insert(const _interator pos,int count,ele);

📖5.删除迭代器指向的元素:erase(const_iterator pos);

📖6.删除迭代器从start到end的所有元素:earse(const_iterator start,const_iterator end);

📖7.删除容器中所有元素:clear();

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
int main()
{vector<int>v1(10, 8);printv(v1);//向末尾插入一个元素9v1.push_back(9);cout << "插入元素后:";printv(v1);//删除末尾元素	v1.pop_back();cout << "删除元素后:";printv(v1);//在开头的位置插入元素1v1.insert(v1.begin(), 1);cout << "开头插入元素后:";printv(v1);//在末尾的位置插入5个6v1.insert(v1.begin(), 5, 6);cout << "末尾插入元素后:";printv(v1);//删除开头的第一个元素v1.erase(v1.begin());cout << "删除开头元素后:";printv(v1);//删除区间内的所有元素v1.erase(v1.begin(), v1.end());cout << "删除指定区间元素后:";printv(v1);//先赋值再清空avector<int>v2(10, 8);v1.clear();cout << "清空容器元素后:";printv(v1);
}

📖运行结果:

🔍 vector数据存取功能:

📖1.取出第idx+1个元素 :at(int idx);

📖2.取出第idx+1个元素:operator[];

📖3.取出容器中第一个元素:front();

📖4.取出容器中最后一个元素:back();

📖元素下标是从0开始的。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
int main()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);printv(v1);cout <<"第三个元素为:" << v1.at(2) << endl;cout <<"第四个元素为" << v1[3] << endl;cout <<"第一个元素为" << v1.front() << endl;cout <<"最后一个元素为" << v1.back() << endl;}

📖运行结果:

🔍vector互换容器

📖1.将另一个容器与自身进行交换:swap(vec);

📖代码实例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
int main()
{cout << "互换前:" << endl;vector<int>v1(10, 8);printv(v1);vector<int>v2(10, 6);printv(v2);cout << "互换后:" << endl;v1.swap(v2);printv(v1);printv(v2);
}

swap 实际用途:

📖在上面我们已经讲过resize在缩小容器的时候,只能缩小容器的实际使用大小,而不能修改他的容量,这样就会造成大量的内存浪费,而swap函数就提供了一种解决方法:
 代码实例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printv(vector<int >& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{vector<int>v1(10, 8);printv(v1);vector<int>v2(10, 6);printv(v2);v1.swap(v2);printv(v1);printv(v2);
}
void test02()
{vector <int> v;for (int i = 0; i < 100000; i++){v.push_back(i);}v.resize(4);cout << "v的容量为:" << v.capacity() << endl;;cout << "v的大小为:" << v.size() << endl;cout << "巧用swap收缩内存";v.resize(4);vector<int>(v).swap(v);cout << "v的容量为:" << v.capacity() << endl;;cout << "v的大小为:" <<   v.size()   << endl;
}
int main()
{test02();
}

📖运行结果:

📖 我们来详细讲解一下原理:
📖先看缩小时用到的代码:

vector<int>(v).swap(v);

📖这串代码实际上是利用拷贝构造,创建了一个匿名对象,将v拷贝给这个匿名对象,此时匿名对象的容量使用大小都等于v实际使用大小,再在让这个匿名对象使用内置swap函数实现容量的转换。

📖图示:

 

🤔结束!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

燃尽图、甘特图、鱼骨图

1. 燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作的一种可视化表示。燃尽图有一个Y轴&#xff08;工作&#xff09;和X轴&#xff08;时间&#xff09;。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着…

java 鱼刺图_使用java实现鱼刺图

刚毕业了&#xff0c;这是毕业设计的java web项目中的一个功能&#xff0c;使用鱼刺图进行辅助管理&#xff0c;在做的过程中&#xff0c;没有找到国内有公开的研究资料&#xff0c;不管是哪一种语言&#xff0c;所以就自己做了一个java的鱼刺图生成插件&#xff0c;虽然毕业设…

燃尽图,甘特图,鱼骨图

1. 燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作的一种可视化表示。燃尽图有一个Y轴&#xff08;工作&#xff09;和X轴&#xff08;时间&#xff09;。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着…

1500_什么是鱼骨图以及鱼骨图如何使用

全部学习汇总&#xff1a; GreyZhang/g_project_management: some knowledge about project management. (github.com) 鱼骨图在过去多年的工作中我是看到过的&#xff0c;但是相关的工作中其实一直没有接触到。我所遇到的问题&#xff0c;一般也不到了需要总结分析的程度。这对…

如何有效理清对象间逻辑关系?XMind鱼骨图帮你轻松搞定!

从效果开始&#xff0c;鱼骨图的每个分支都代表问题的一个原因。主分支显示所有可能的原因&#xff0c;而子分支则在背后挖掘“为什么”。因此&#xff0c;鱼骨图也被称为“因果图”。 鱼骨图有何用呢&#xff1f; 鱼骨图是逻辑图的派生。他们看起来很相似。鱼骨是分析问题的思…

大咖驾到!5A学霸教你如何使用鱼骨图解决项目难题

在船舶制造行业从业9年&#xff0c;并以5A的好成绩完美通过PMP考试的学霸来了&#xff01; 小编今天邀请到了1903级的学员刘艺为大家讲解鱼骨图在实际生活中的应用&#xff0c;来跟着我们一起学习用鱼骨图来分析项目运行过程中出现的问题吧。 个人介绍 INTRODUCTION 我所在…

质量工具之鱼骨图

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 1. 什么是鱼骨图 鱼骨图&#xff0c;因其形状如鱼骨&#xff0c;所以叫鱼骨图&#xff08;以下称鱼骨图&#xff09;。由日本管理大师石川馨先生所发明&#xff0c;故又名石川图。&#xff0c;它是一种透过现象看本质的分析…

鱼骨图介绍及制作

鱼骨图 什么是鱼骨图 鱼骨图是一种图表&#xff0c;用来展示分支关系或流程。它通常以中心为起点&#xff0c;由中心向外延伸出若干条脊梁&#xff0c;再由脊梁连接相关的分支&#xff0c;形成一个树状结构。鱼骨图常用于解释流程、组织结构、产品规划等。 下面列举一个例子: 如…

视频剪辑工具,批量处理视频中的声音,教你添加新音乐

拍摄好或者收集好的一些视频素材&#xff0c;可能需要进行剪辑&#xff0c;那么该如何对视频中的声音去色&#xff0c;并添加新的音乐呢&#xff1f;或者在不声的基础上加上背景音乐呢&#xff1f;下面随小编一起来试试&#xff0c;希望能给大家带来帮助。 需要哪些工具&#…

如何剪辑音频,音频剪辑的简单操作

怎么剪出自己喜欢的一段音频&#xff0c;我们在网上下载下来的片段&#xff0c;怎么将它剪辑出一段独特的音乐。很多视频片段里的音频会出现几段不一样的音乐&#xff0c;是将一段音乐剪辑下来一小段&#xff0c;再将它们放在视频上。其实&#xff0c;有时候我们会发现&#xf…

PR卡点插件 Premiere自动卡点自动剪辑插件 音乐鼓点节拍插件BeatEdit v1.0.10.2+使用教程

BeatEdit是一个音乐鼓点节拍自动剪辑扩展插件&#xff0c;这款插件可以自动检测音频文件根据音乐的节拍鼓点生成时间线&#xff0c;然后选择需要剪辑的素材&#xff0c;自动完成剪辑工作&#xff0c;还可自动/手动选择鼓点位置&#xff0c;编辑开始位置&#xff0c;让剪辑变得简…

音乐剪辑软件哪个比较好用?

电脑上怎么剪辑音乐&#xff1f;一般想要对音乐进行剪辑&#xff0c;在电脑上操作是比较方便的。音乐可以是一首歌曲&#xff0c;一段录音&#xff0c;剪辑音乐就是剪辑音频&#xff0c;剪辑的目的就是把需要的片段截取出来&#xff0c;那么如何截取音乐中的一段或者多段&#…

第三章 添加背景音乐与音频剪辑

​第三章 添加背景音乐与音频剪辑 3.1为视频添加音乐的方法 音乐是短视频的重要组成部分之一&#xff0c;一段适合视频的音乐能为视频锦上添花&#xff0c;本节主要讲解添加背景音乐的多种操作方法。 3.1.1给视频添加背景音乐 VESDK Deluxe APP中有多种音乐类型&#xff0c…

网易云音乐怎么剪辑音乐并保存,酷狗音乐怎么截取一段音乐并保存

我们在使用音乐软件播放音乐时&#xff0c;听到好听的歌曲会将其下载保存到本地。但是通过音乐软件下载的歌曲多是整首音乐&#xff0c;若是我们需要其中的一部分&#xff0c;就需要用到专业的音频编辑软件了&#xff0c;那么下面就来给大家介绍网易云音乐怎么剪辑音乐并保存&a…

这篇文章教你如何音频剪辑制作,快学起来

当我们的视频剪辑完好&#xff0c;通常会给它加入一些背景音乐&#xff0c;从而来增添整体内容的趣味性。然而我们想要添加的音频经常只是歌曲的一个片段&#xff0c;如果将整首歌曲导入&#xff0c;可能在视频结束的时候还没有播放到想要的歌曲片段。那有什么好的办法可以解决…

如何通过抖音剪辑热门音乐,每天赚1000元,适合新手操作。

其实很多人都知道玩抖音能赚钱&#xff0c;但不知道怎么去入行。 就拿音乐号来说吧&#xff0c;只需要把你喜欢的音乐下载下来&#xff0c;配上视频画面&#xff0c;上传到抖音就可以了。 操作的好&#xff0c;一个月几万块很正常&#xff0c;而且是属于长期正规网络兼职项目…

视频剪辑配乐技巧 视频剪辑配音推荐

视频是视觉加听觉的艺术&#xff0c;视频的背景音乐不同&#xff0c;所呈现的效果也不同。接下来为大家带来大家视频剪辑配乐技巧&#xff0c;视频剪辑配音推荐的相关内容。 一、视频剪辑配乐技巧 视频剪辑时选好了配乐&#xff0c;视频就成功了一半。那如何找到合适的配乐呢…

C#,码海拾贝(29)——求解“大型稀疏方程组”的“全选主元高斯-约去消去法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

大型稀疏矩阵线性化方程组的数值求解问题 广泛存在于工程实践尤其是计算机仿真领域 如水力管网计算&#xff0c;电力系统的大型导纳矩阵计算&#xff0c;高阶偏微分方程的数值求解&#xff0c;以及铸件充型过程与凝固过程的数值模拟等。 经常出现在科学和工程计算中, 因此寻找稀…

maya超大图分区渲染

需求 使用maya 一般是用来渲染影视动画&#xff0c;分辨率一般是1080P&#xff0c;2k&#xff0c;或者4K。有时候渲染的图片会用来做海报等打印使用&#xff0c;需要渲染一些超大图&#xff0c;虽然maya支持8K的渲染输出。 但是由于内存等限制&#xff0c;低配电脑往往出现“/…

Maya灯光【电影级灯光渲染-基础光】

平行光&#xff1a; 1、色温&#xff08;一般白炽灯色温是8000&#xff09;&#xff1a; 2、Exposure: 调整幅度大&#xff0c; 3、idensity&#xff1a; 强度变化更柔和 4、angle&#xff08;太阳光本来是平行光&#xff0c;因为空气中含有灰尘颗粒&#xff0c;导致照射过…