c++ vector用法 入门必看 超详细

这篇具有很好参考价值的文章主要介绍了c++ vector用法 入门必看 超详细。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、vector的作用

vector是最常用的容器之一,功能十分强大,可以储存、管理各种类型的数据。在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现一对多的映射,vector就是专门为了解决这个问题而诞生的。vector也可以称为动态数组,因为其大小是根据实时更新而变化的,正因为如此vector显得更加灵活易用。

举个例子
小明拥有一根香蕉和两个苹果
小芳拥有一根棒棒糖个三个梨
那么你试着思考一下,应当如何在程序中表示这种结构呢?这就是一对多映射的例子,学完vector就可以轻松解决这个问题了。

2、vector的定义

vector<储存的类型> 容器名
如:
储存int型的值 vector<int> v;
储存double型的值 vector<double> v;
储存string型的值 vector<string> v;
储存结构体或者类的值的值 vector<结构体名> v;

当然也可以定义vector数组:
储存int型的值 vector<int> v[n];
储存double型的值 vector<double> v[n];
等等,n为数组的大小

3、vector常用的成员函数

//这些都是必会的成员函数
size()//返回返回容器中元素个数
begin()//返回头部迭代器
end()//返回尾部+1迭代器
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器
front()//返回首个元素
back()//返回尾部元素
push_back()//在末尾添加一个元素
emplace_back()//和push_back()是一样的作用
pop_back()//弹出最后一个元素
empty()//判断是否为空
insert()//在指定位置插入元素
erase()//在指定位置删除元素
clear()//清空容器

详细解析:
(1)size()
size()是最常用的成员函数了,常用于vector的遍历和元素个数的查询

(2)push_back()
除了初始化以外,push_back()是vector最重要的修改函数了,复杂度为O(1),而insert()的复杂度为O(n),差距明显

(3)front()、back()
查询首元素和未元素,其实通过随机访问,v[0]、v[v.size()-1]是可以达到相同效果的,用front()和back()显得专业点

(4)begin()、end()
通常用来方便排序的,也可以用来遍历,但没必要,通过下标遍历更简单快捷,rbegin()、rend()则可以用来逆序排序

(5)insert()
insert (position, x );
insert (position, n, x );
insert (position, first, last );
插入新的元素,
第一个函数,在迭代器指定的位置前插入值为x的元素
第二个函数,在迭代器指定的位置前插入n个值为x的元素
第三个函数,在迭代器指定的位置前插入另外一个容器的一段序列迭代器first到last
复杂度很高,迫不得已不使用

(6)erase()
erase ( position );
erase (first, last );
删除元素或一段序列
同样地,复杂度很高,迫不得已不使用

示例代码:

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
#include<vector>//使用vector时需要的头文件 
#include<algorithm>//包含许多内置函数,如排序、倒置、交换等函数 
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
//遍历函数 
void print(auto v){
	for(auto c:v){
		cout<<c<<' ';
	}
	cout<<endl;
}
int main(){
	vector<int> v;//定义一个 int型vector 
	
	v.emplace_back(3);
	v.emplace_back(4);
	v.emplace_back(1);
	v.emplace_back(2);
	cout<<"现在有的元素 :";
	print(v);
	cout<<endl;
	
	cout<<"v.front()="<<v.front()<<endl;
	cout<<"v.back()="<<v.back()<<endl;
	cout<<endl;
	
//	排序
	sort(v.begin(),v.end());
	cout<<"排序后 :";
	print(v);
	cout<<"v.front()="<<v.front()<<endl;
	cout<<"v.back()="<<v.back()<<endl;
	cout<<"v.size()="<<v.size()<<endl;
	cout<<endl;
	
//	插入5、6 
	v.insert(v.begin()+2,{5,6}); 
	cout<<"插入5、6后: ";
	print(v);
	cout<<endl;
	
//	倒置
	reverse(v.begin(),v.end());
	cout<<"倒置后: ";
	print(v);
	cout<<endl;
	
//	逆序排序 
	sort(v.rbegin(),v.rend());
	cout<<"逆序排序后 :";
	print(v);
	
//	判断是否为空
	cout<<"v.empty()="<<v.empty()<<endl; 
	cout<<"(v.size()==0)="<<(v.size()==0)<<endl;
	cout<<endl;
	
	v.clear();
	cout<<"v清空后"<<endl; 
	cout<<"v.empty()="<<v.empty()<<endl; 
	cout<<"(v.size()==0)="<<(v.size()==0)<<endl;
} 

运行结果:

现在有的元素 :3 4 1 2

v.front()=3
v.back()=2

排序后 :1 2 3 4
v.front()=1
v.back()=4
v.size()=4

插入56: 1 2 5 6 3 4

倒置后: 4 3 6 5 2 1

逆序排序后 :6 5 4 3 2 1
v.empty()=0
(v.size()==0)=0

v清空后
v.empty()=1
(v.size()==0)=1

4、vector的三种遍历方法

(1)迭代器iterator

代码:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v;//定义 
	v.emplace_back(1);//插入元素1 
	v.emplace_back(3);//插入元素3
	v.emplace_back(2);//插入元素2
	vector<int>::iterator it;//使用迭代器
	for(it=v.begin();it!=v.end();it++){
		cout<<*it<<' ';
	} 
} 

运行结果:

1 3 2

(2)下标遍历

代码:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v;//定义 
	v.emplace_back(1);//插入元素1 
	v.emplace_back(3);//插入元素3
	v.emplace_back(2);//插入元素2
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<' ';
	}
} 

运行结果:

1 3 2

(3)foreach遍历

代码:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v;//定义 
	v.emplace_back(1);//插入元素1 
	v.emplace_back(3);//插入元素3
	v.emplace_back(2);//插入元素2
	for(int c:v){
		cout<<c<<' ';
	}
} 

运行结果:

1 3 2

两种逆序遍历:
代码:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v;//定义 
	v.emplace_back(1);//插入元素1 
	v.emplace_back(3);//插入元素3
	v.emplace_back(2);//插入元素2
	
//	迭代器法 
	vector<int>::reverse_iterator it;//使用迭代器
	for(it=v.rbegin();it!=v.rend();it++){
		cout<<*it<<' ';
	} 
	cout<<endl;
	
//	下标遍历法
	for(int i=v.size()-1;i>=0;i--){
		cout<<v[i]<<' ';
	} 
} 

运行结果:

2 3 1
2 3 1

foreach虽然简单易用,但是不支持逆序遍历

有小伙伴发现dev不能编译部分代码,那是因为dev还未支持c++11,可以看这篇文章解决
dev使用c++11教程

是不是很简单呢?

刚接触肯定会觉得难,多些做题多些用,熟悉了就容易了,兄弟萌,加油!!!

文章尚有不足,欢迎大牛们指正

感谢观看,点个赞吧文章来源地址https://www.toymoban.com/news/detail-789942.html

到了这里,关于c++ vector用法 入门必看 超详细的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++ priority_queue用法 入门必看 超详细

    priority_queue即优先级队列,它的使用场景很多,它底层是用大小根堆实现的,可以用log(n)的时间动态地维护数据的有序性。适用于许多场景,比如简化哈夫曼树算法、dijkstra算法等等 priority_queue是不允许随机访问,只能访问队列首部的元素,也只能对首部元素进行出队,下面进

    2024年02月12日
    浏览(37)
  • 数据结构 (入门必看)

      1、学习C语言是如何写程序,学习数据结构如何简洁高效的写程序 2、遇到一个实际问题,需要写程序,需要解决两个方面的问题 1)如何表达数据之间的逻辑规律以及如何将数据存储到计算机中 数据结构 数据:不是单纯的数值,而是一个类似于集合的概念(结构体(节点))

    2024年02月02日
    浏览(37)
  • [入门必看]数据结构5.4:树、森林

    小题考频:30 大题考频:8 难度:☆☆☆ 5.4.1 树的存储结构 5.4.2 树、森林与二叉树的转化 5.4.3 树和森林的遍历 树的逻辑结构 树是一种递归定义的数据结构 一棵树要么是空树,要么至少有一个根结点,根结点的下方可能有零棵或多棵互不相交的子树。 二叉树 :一个分支结点

    2024年02月03日
    浏览(43)
  • 【数据结构】——单链表超详细介绍(小白必看!!!)

     c语言中的小小白-CSDN博客 c语言中的小小白关注算法,c++,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域. https://blog.csdn.net/bhbcdxb123?spm=1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行!!! 铁铁们,成功的路上必然是孤

    2024年04月11日
    浏览(68)
  • C++数据结构之vector

    vector数组是一个能存放任意数据类型(类,结构体,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性表,寻找元素非常快,但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据时速度很快,但是查找的速度就会慢很多) 和普

    2024年02月04日
    浏览(50)
  • [入门必看]数据结构4.2:串的模式匹配

    小题考频:2 大题考频:0 难度:☆☆☆☆☆ 4.2.1_朴素模式匹配算法 4.2.2_1_KMP算法 4.2.2_2_求next数组 4.2.3_KMP算法的进一步优化 什么是字符串的模式匹配 ——在字符串内搜索某一段内容 查找功能 搜索引擎 字符串模式匹配:在主串中找到与模式串相同的⼦串,并返回其所在位置

    2023年04月23日
    浏览(40)
  • [入门必看]数据结构6.1:图的基本概念

    小题考频:33 大题考频:11 难度:☆☆☆☆ 6.1.1 图的基本概念 图的定义 A、B、C……这些元素的集合就是顶点集V,图G中顶点个数也成为图G的阶; 连接各个顶点的边的集合就是边集E 注意。图里面的一条边,连接的u,v两个顶点必须是刚才给出的顶点集中的顶点,边的两头必须

    2024年02月06日
    浏览(44)
  • 【数据结构】——单链表超详细介绍(独家介绍,小白必看!!!)

    被滑走别滑走 ,我这 一万字 的文章,写的真的很痛苦的,希望能得到 一点点支持 !!! 重点内容 和 易错点 都用 彩笔 标注了,干货满满,耐心看完,我真的真的有在 认真更新o(╥﹏╥)o 上一篇文章介绍完顺序表后,我们就要开始学习链表了,链表的种类有很多,比如说

    2024年02月02日
    浏览(41)
  • 【数据结构】二叉树遍历的实现(超详细解析,小白必看系列)

    目录 一、前言 🍎为何使用链式二叉树   🍐何为链式二叉树  🍉二叉树的构建 💦创建二叉链结构 💦手动构建一颗树  🍓二叉树的遍历 (重点) 💦前序遍历  💦中序遍历  💦后续遍历  🍌二叉树的经典问题(重点) 💦二叉树节点个数  💦二叉树叶子节点的个数  💦

    2024年02月02日
    浏览(49)
  • C++中的vector的详细用法

    目录 C++中的vector的详细用法 一、vector的介绍 二、存储类型 三、函数 四、vector二维数组两种方法 五、vector中find()用法 六、vector的访问 七、vector中insert()函数增加元素操作 八、vector中erase()函数删除元素操作 头文件:#include vector 向量(Vector)是一个封装了动态大小数组的顺

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包