栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STL-vector容器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL-vector容器

vector容器

vector的数据安排以及操作方式,与arrray(数组)相似。两者的区别在于:空间运用的灵活性。
vector是动态的空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。

1、vector的数据结构:

vector的数据结构为线性连续空间。它有两个迭代器_Myfirst和_Mylast,分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器_Myend指向整块连续内存空间的尾端。

2、vector的容量问题:

为了降低空间配置时的速度成本,vector实际配置的大小要比客户端的要求大一些,以备将来可能的扩充,这个就是容量的概念。
也就是说,一个vectoe的容量永远大于或等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个vector容器就需要寻找新的空间。

3、vector的动态增加大小概念:

1、在vector中所谓的动态增加大小,并不是在原有空间之后接续新空间(无法保证原空间的后面还有足够的空间来配置)。相反,会去寻找一块更大的内存空间,然后将原数据拷贝到新空间,并释放掉旧空间。
2、 所以,需要明白的一点是,在vector中一旦引起空间的重新配置,那么指向原vector的所有迭代器都会失效。

4、vector的插入删除操作:

//在pos处插入count个元素ele
insert(const_iterator pos,int count,ele);
//从尾部插入元素
push_back();
//从尾部删除元素,即删除最后一个元素
pop_back();
//删除从start到end之间的元素
erase(const_iterator start,const_iterator end);
//删除这个位置的元素
erase(const_iterator pos);
//删除所有元素
clear();

例:

#include
using namespace std;
#include
void print(vector&v)
{
	vector::iterator it;//定义vector容器的迭代器 it
	for(it=v.begin(); it!=v.end(); it++)
	{
		cout<<*it<<" ";
	}
	cout<
	vectorv;
	vector::iterator it;
	for(int i=1; i<=5; i++)
	{
		v.push_back(i);
	}
	cout<<"在起始处插入两个100:"< 

5、vector的构造函数:

//采用模板类实现,默认构造函数
vectorv;
//将v[begin(),end())区间中的元素拷贝给本身
vector(v.begin(),v.end());
//构造函数将n个elem拷贝给本身
vector(n,elem);
//拷贝构造函数
vector(const vector& vec);

例:

#include
using namespace std;
#include
int main()
{
	vectorv(5,5);//将5个5拷贝给容器v
	vector::iterator it;//定义vector容器的迭代器 it
	cout<<"v容器:";
	for(it=v.begin(); it!=v.end(); it++)
	{
		cout<<*it<<",";
	} 
	cout<v2(v.begin(),v.end());//将v[begin(),end())区间中的元素拷贝给v2
	for(it=v2.begin(); it!=v2.end(); it++)
	{
		cout<<*it<<",";
	}
}

6、vector常用赋值操作:

//将[beg,end)区间中的数据拷贝赋值给本身
assign(beg,end);
//将n个elem拷贝给本身
assgin(n,elem);
//重载等号操作符
vector&operator=(const vector &vec);
//将vec与本身的元素互换
swap(vec);

例:

#include
using namespace std;
#include
int main()
{
	vectorv3;
	int arr[]={2,3,4,1,9};
	vectorv(arr,arr+sizeof(arr)/sizeof(int));//类似于begin和end 
	vector::iterator it;//定义vector容器的迭代器 it
	for(it=v.begin(); it!=v.end(); it++)
	{
		cout<<*it<<",";
	} 
	cout<
		cout<<*it<<",";
	}
}
//2,3,4,1,9
//2,3,4,1,9

7、vector的大小操作:

//返回容器中元素个数
size();
//判断容器是否为空
empty();
//重新指定容器长度为num,若容器边长,则以默认值填充新位置。若容器变短
//,则超出容器长度的元素被删除
resize(int num);
//重新指定容器长度为num,若容器边长,则以elem值填充新位置。若容器变短
//,则超出容器长度的元素被删除
resize(int num,elem);
//容器的容量
capacity();
//容器预留len个元素长度,预留位置不初始化,元素不可访问
reserve(int len);

例1:

#include
using namespace std;
#include
void print(vector&v)
{
	vector::iterator it;//定义vector容器的迭代器 it
	for(it=v.begin(); it!=v.end(); it++)
	{
		cout<<*it<<",";
	}
	cout<
	vectorv;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	
	cout<<"元素个数: "<
		cout<<"v为空"<
		cout<<"v不为空"< 

8、vector数据存取操作:

//返回索引idx所指的数据,如果idx越界,抛出out_of_range异常
at(int idx);
//返回索引[]下标的数据,越界时,运行直接报错
operator[];
//返回第一个元素
front();
//返回最后一个元素
back();

例:

#include
using namespace std;
#include
void print(vector&v)
{
	vector::iterator it;//定义vector容器的迭代器 it
	for(it=v.begin(); it!=v.end(); it++)
	{
		cout<<*it<<",";
	}
	cout<
	vectorv;
	vector::iterator it;
	for(int i=0; i<5; i++)
	{
		v.push_back(i);
	}
	print(v);
	cout<<"v的第一个元素:"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号