向量类模板

向量(vector)是一种随机访问的数组类型,提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机的插入和删除操作。它是大小可变的向量,在需要时可以改变其大小。

1、使用向量类模板需要创建vector对象,创建vector对象有以下几种方法。

(1)、std::vector<type>name;

该方法创建了一个名为name的空vector对象,该对象可容纳类型为type的数据。

(2)、std::vector<type>name(size)

该方法用来初始化具有size元素个数的vector对象

(3)、std::vector<type>name(size,value)

该方法用来初始化具有size元素个数的vector对象,并将对象的初始值设置为value

(4)、std::vector<type>name(myvector)

该方法使用复制构造函数,用现有的向量myvector创建了一个vector对象

(5)、std::vector<type>name(first,last)

该方法创建了元素在指定范围内的向量,first代表起使范围,last代表结束范围

2、vector对象主要成员函数及说明

assign(first,last)            用迭代器first和last所辖范围内的元素替换向量元素

assign(num.value)        用val的num个副本替换向量元素

at(n)                             返回向量中第n个位置元素的值

back                             返回对向量末尾元素的引用

begin                            返回指定向量中第一个元素的迭代器

capcity                         返回当前向量最多可以容纳的元素个数

clear                            删除向量中的所有元素

empty                          如果向量为空,则返回true值

end                              返回指向向量中最后一个向量的迭代器

erase(start,end)          删除迭代器start到end范围内的向量元素

erase(i)                       删除迭代器i所指向的向量元素

front                            返回对向量起使元素的引用

insert(i,x)                    把值x插入向量中由迭代器i所指明的位置

insert(i,start,end)       把迭代器start到end范围内的元素插入到向量中由迭代器i所指明的位置

max_size                   返回向量的最大容量

pop_back                  删除向量最后一个元素

push_back(x)            把值x放在向量末尾

rbegin                       返回一个反向迭代器,指向向量末尾元素之后

rend                          返回一个反向迭代器,指向向量起使元素

reverse                     颠倒元素的顺序

resize(n,x)                重新设置向量大小n,新元素的值初始化为x

size                          返回向量的大小

swap(vector)            交换两个向量的内容

3、实例

#include<iostream>
#include<vector>
using std::cout;
using std::endl;
using std::vector;

void main()
{
	vector<int>v1,v2;
	v1.reserve(10);
	v2.reserve(10);
	v1=vector<int>(8,7);
	int array[8]={1,2,3,4,5,6,7,8};
	v2=vector<int>(array,array+8);
	cout<<"v1容量"<<v1.capacity()<<endl;
	cout<<"v1当前各项:"<<endl;
	for(decltype(v2.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
	cout<<"v2容量"<<v2.capacity()<<endl;
	cout<<"v2当前各项:"<<endl;
	for(vector<int>::size_type i=0;i<v1.size();i++)
	{
		cout<<" "<<v2[i];
	}
	cout<<endl;
	v1.resize(0);
	cout<<"v1的容量通过resize函数变成0"<<endl;
	if(!v1.empty())
		cout<<"v1容量"<<v1.capacity()<<endl;
	else
		cout<<"v1是空的"<<endl;
	cout<<"将v1容量扩展为8"<<endl;
	v1.resize(8);
	cout<<"v1当前各项"<<endl;
	for(decltype(v1.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
	v1.swap(v2);
	cout<<"v1与v2swap了"<<endl;
	cout<<"v1容量"<<v1.capacity()<<endl;
	cout<<"v1当前各项:"<<endl;
	for(decltype(v2.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
	v1.push_back(3);
	cout<<"从v1后边加入了元素3"<<endl;
	cout<<"v1容量"<<v1.capacity()<<endl;
	cout<<"v1当前各项:"<<endl;
	for(decltype(v2.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
	v1.erase(v1.end()-2);
	cout<<"删除了倒数第二个元素"<<endl;
	cout<<"v1容量"<<v1.capacity()<<endl;
	cout<<"v1当前各项:"<<endl;
	for(decltype(v2.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
	v1.pop_back();
	cout<<"v1通过栈操作pop_back放走了最后的元素"<<endl;
	cout<<"v1容量"<<v1.capacity()<<endl;
	cout<<"v1当前各项:"<<endl;
	for(decltype(v2.size())i=0;i<v1.size();i++)
	{
		cout<<" "<<v1[i];
	}
	cout<<endl;
}

结果如下

 在本例中v1和v2均用resize分配了空间。当分配的空间小于自身原来的空间大小时,删除掉原来的末尾元素。当分配的空间大于自身的空间时自动在末尾元素后边添加相应个数的0值。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值