c++ 容器vector

1、 vector特点:

vector:就是动态数组,它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存。

它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。

对最后元素操作最快(在后面添加删除最快 )此时一般不需要移动内存,只有保留内存不够时才需要。

对中间和开始处进行添加删除元素操作需要移动内存,如果你的元素是结构或是类,那么移动的同时还会进行构造和析构操作,所以性能不高(最好将结构或类的指针放入vector中,而不是结构或类本身,这样可以避免移动时的构造与析构)

2、 基本用法:
#include<vector>
#include<iostream>

using namespace std;

int main()
{
	//vector几种构造方法:
	vector<int> vec1(3,3);	//1.vec1内容为3,3,3
	vector<int> vec2(vec1);	//2.vec2内容为3,3,3

	int a[] = { 1,2,3 };
	vector<int> vec3(a, a + 3);	//3.vec3内容为1,2,3
	vector<int> vec4(vec3.begin(), vec3.end());	//4.vec4内容为1,2,3

	//vector几种赋值方法:push_back、insert、 assign
	vec1.push_back(4);	//vec1内容为3,3,3,4

	vector<int>::iterator it1 = vec2.begin();
	vec2.insert(it1, 1);	//vec2内容变为1,3,3,3

	it1 = vec2.begin();
	vec2.insert(it1, 2, 5);//vec2内容变为5,5,1,3,3,3,第一个参数:插入起始位置,第二个参数:插入个数,第三个参数:插入的值

	it1 = vec3.begin();
	vec3.insert(it1+1, vec2.begin(), vec2.end());//vec3内容变为1,5,5,1,3,3,3,2,3,后两个参数为另一迭代器的起始、结束位置

	vec2.assign(6, 6); //vec2内容变为6,6,6,6,6,6,vec2中加入6个6,同时清除掉以前的元素。

	//vector遍历方法:
	//下标运算符访问
	for (int i = 0; i < vec3.size(); i++) {
		cout << vec3[i];
	}
	cout << endl;
	//迭代器访问
	for (vector<int>::iterator it = vec3.begin(); it != vec3.end(); it++) {
		cout << *it;
	}
	cout << endl;

	//vector删除、清除方法:pop_back、erase、clear
	vec3.pop_back();	//删除最后一个元素
	vec3.erase(vec3.begin() + 3); //删除第四个元素
	vec3.erase(vec3.begin(), vec3.begin() + 2); //删除第一个和第二个元素
	vec2.clear(); //清除所有元素

	//vector其它使用方法见:http://www.cplusplus.com/reference/vector/

    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值