STL容器之vector容器

vector

vector的本质其实是一个动态数组,它是在堆中分配内存,元素连续存放,有保留内存。

优点:自动管理内存,拥有一段来连续的内存空间,并且起使位置不变。动态改变长度并随着元素的增大而则增大,减少大小,内存不会随之释放。(在扩大内存时。先扩大当前内存容量的两倍,如果还是不够,就扩大至足够大的容量)

缺点:因为内存空间是来连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都影响了vector的效率。

在尾部添加元素是固定时间,在头部或中间添加或删除元素是线性时间.

下面是一些vector容器的基本函数应用的例子:

front()返回头部元素的引用,可以当左值,

back()   返回稳步元素的引用,可以当左值

push_back()  添加元素,只能在尾部添加

pop_back()   移除元素,只能在尾部移除

删除元素  

区间删除:    v1.erase(v1.begin(),v1.begin()+3);

指定元素的删除:  v1.erase(v1.begin()+3);

插入元素:

在指定位置插入元素10的拷贝  v1.insert(v1.begin()+3,10);

在指定位置插入3个元素11的拷贝   v1.insert(v1.begin(),3,11)

具体代码的实现:

	int main(int argc,const char * argv[])
{
	vector<int>v1;
	//插入元素(尾插)
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	//迭代器遍历
	for(std::vector<int>::iterator it=v1.begin();it!= v1.end();++it)
	{ 
		cout<<*it<<" ";
	}
	cout<<endl;
	//修改头部元素的值(front()返回是引用,可以当左值)
	v1.front()=44;
	cout <<"头部元素"<<v1.front()<<endl;
	//修改尾部元素的值(back()返回的是引用,可以当左值)
	v1.back()=99;
	cout<<"尾部元素"<<v1.back()<<endl;
	v1.push_back(999);//从尾部插入元素;

	//删除元素(从尾部)
	v1.pop_back();
	//迭代器遍历打印
	for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
//push_back  的强化
	//push_back是在但年前的vector的内存末尾拷贝元素进容器。注意会产生浅拷贝,所以容器中的对象要支持拷贝操作。而且如果vector初始化了个数,而不是具体的值,push_back也只会在最后面追加。
	 
	vector<int> v2(10);
	cout<<v2.size()<<endl;
	v2.push_back(100);
	cout<<v2.size()<<endl;
	//遍历  结果是 0 0 0 0 0 0 0 0 0 100 
	for(vector<int>::iterator it=v2.begin();it!=v2.end();it++)
	{
		cout<<*it<<" "; 
	}
	  cout<<endl;
	return 0;
}

运行结果如下图所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值