您现在的位置是:首页 > 短信大全

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

作者:康由时间:2024-03-23 15:05:55分类:短信大全

简介  文章浏览阅读5.6w次,点赞230次,收藏1.1k次。vector容器名如储存int型的值vectorv;储存double型的值vectorv;储存string型的值vectorv;储存结构体或者类的值的值vectorv;当然也可以定义vector数组储存in

点击全文阅读

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 2v.front()=3v.back()=2排序后 :1 2 3 4v.front()=1v.back()=4v.size()=4插入5、6后: 1 2 5 6 3 4倒置后: 4 3 6 5 2 1逆序排序后 :6 5 4 3 2 1v.empty()=0(v.size()==0)=0v清空后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);//插入元素3v.emplace_back(2);//插入元素2vector<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);//插入元素3v.emplace_back(2);//插入元素2for(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);//插入元素3v.emplace_back(2);//插入元素2for(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);//插入元素3v.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 12 3 1

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

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

是不是很简单呢?

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

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

感谢观看,点个赞吧

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句