C++标准模板库(STL)整理之vector

vector
vector也叫变长数组,即“长度根据需要而自动改变的数组”。
在编写C++程序时使用vector,需要加上以下头文件和语句:

#include<vector>
using namespace std;

1.vector的定义

vector<typename> name;

其中typename指的是类型,name则指变长数组名。在使用时,typename可以是int,double,char等任意的基本类型,也可以是结构体类型,除此之外,还可以是STL标准容器,如vector、set、queue等。举例如下:

vector<int> name1;//定义一个int类型的变长数组
vector<double> name2;//定义一个double类型的变长数组
vetctor<char> name3;//定义一个char类型的变长数组
vector<stru> name4;//定义一个结构体类型的变长数组 
vector<vector<int> > name3;//类似于定义一个二维数组,每一个维度都是可变的;为避免编译器将>>识别为移位操作,写为> >.

定义固定长度的vector数组

vector<typename> name[size];

举例如下:

vector<int> array[100];//相当于定义了具有100个变长数组的数组,每一个arr[0]~arr[99]都是一个vector<int>

2.访问vector容器内的元素
(1)可以通过下标访问
例:

#include<cstdio>
#include<vector>
using namespace std;
int main()
{
	vector<int> name;
 	for(int i=0;i<3;i++)
 	{
 		name.push_back(6);//注意不要用name[i]=6;name[index]是取元素用的,注入元素用push_back
  		printf("%d",name[i]);
  	}
  	return 0;
}
  	

(2)通过迭代器访问
之前看到迭代器两个字就不想往下看了,听这个名字就感觉很复杂,其实是写的方式比较复杂,道理很简单,将迭代器变量理解为一个指针,每次指向变长数组中的一个元素的地址,要想取出该元素与指针取元素值的方式相同。
定义迭代器的方式为:

vector<typename>::iterator it;

举例:

vector<int>::itarator it;//变长数组定义的是什么类型,前面就写什么
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
 	vector<int> name;
 	for(int i=0;i<3;i++)
  	{
 	  name.push_back(6);//注意不要用name[i]=6;name[index]是取元素用的,注入元素用push_back
 	}
 	 for(vector<int>::iterator it=name.begin();it<name.end();it++)
 	{
 		printf("%d",*it);
 	}
 	//因为迭代器和指针的用法相同,也可用下面方法获取name数组的值
 	vector<int>::iterator it=name.begin();
 	for(int i=0;i<3;i++)
 	{
 		printf("%d",*(it+i));
 	}
 
   	return 0;
}
   

name.begin()指向的是name数组的第一个元素的地址,name.end指向的是name数组最后一个元素的下一个地址,*(name.begin()+i)等价于name[i]。
3.vector相关函数
(1)push_back(x)
表示向vector数组中添加一个元素x,时间复杂度为O(1)。

用法:

vector<int> arr;
arr.push_back(10);

(2)pop_back()
表示删除vector数组的最后一个元素,时间复杂度O(1)。
用法:

vector<int> arr;
arr.push_back(10);
arr.pop_back();

(3)size()
用来获取vector容器中的元素,返回的数是无符号类型,用%d接收也可以,时间复杂度O(1)。

#include<cstdio>
#include<vector>
using namespace std;
int main()
{
 	vector<int> name;
 	 for(int i=0;i<3;i++)
  	{
  	 	name.push_back(6);//注意不要用name[i]=6;name[index]是取元素用的,注入元素用push_back
	}
	printf("%d",name.size());
  	return 0;
 }
   

(4)clear()
用来清空vector容器中的所有元素,时间复杂度O(N),N为容器中的元素个数。
(5)insert()
insert(it,x)表示向迭代器it指向的位置插入元素x,时间复杂度O(N)
(6)erase()
erase()可以用来删除单个元素和一个区间内的所有元素。时间复杂度O(N);

  • 删除单个元素
erase(it);//it为迭代器,即删除迭代器为it处的元素
  • 删除一个区间内的所有元素
    erase(first,last)即删除[first,last)内的所有元素
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
 vector<int> name;
 for(int i=0;i<3;i++)
  {
   name.push_back(6);//注意不要用name[i]=6;name[index]是取元素用的,注入元素用push_back
 }
 name.erase(name.begin(),name.begin+1);//删除name[0]
  for(vector<int>::iterator it=name.begin();it<name.end();it++)
 {
  printf("%d",*it);//输出1,2
 }
 return 0;
}
  
``
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值