STL常用容器————vector

.1 基本概念

与数组类似,称为单端数组,可以动态扩展(找更大的空间,将原数据拷贝到新空间,释放原空间)。迭代器支持随机访问

.2 构造函数

在这里插入图片描述

.3 赋值操作

函数原型:

  • vector& operator=(const vector &vec); //重载等号操作符
  • assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。区间尾部无法取到
	vector<int> p1;
	p1.push_back(10);
	p1.push_back(20);
	p1.push_back(30);
	p1.push_back(40);
	
	vector<int> p2;
	p2.assign(p1.begin(), p1.end());			//赋值
	pint(p2);
  • assign(n, elem); //将n个elem拷贝赋值给本身。
	vector<int> p2;
	p2.assign(4, 10);
	pint(p2);

.4 容量和大小

在这里插入图片描述

	vector<int> p1;
	p1.push_back(10);
	p1.push_back(20);
	p1.push_back(30);
	p1.push_back(40);


	int i = p1.empty();				//若为空返回1,不为空返回0
	cout << i << endl;

	cout << "p1的容量为:" << p1.capacity() << endl;			//容量与大小可能不同
	cout << "p1的大小为:" << p1.size() << endl;

	p1.resize(10);					//以0填充位置

.5 插入和删除

在这里插入图片描述

.6 数据存取

在这里插入图片描述

void test() {
	vector<int> p;
	p.push_back(10);
	p.push_back(20);
	p.push_back(30);
	p.push_back(40);

	cout << "容器中2号元素为:" << p.at(2) << endl;
	cout << "容器中2号元素为:" << p[2] << endl;
	cout << "容器中第一个元素为:" << p.front()<< endl;
	cout << "容器中最后一个元素为:"<<p.back() << endl;
}

.7 互换容器

实现两个容器内元素互换swap(vec);
当对大容器使用resize时可能会导致容量过大浪费空间。使用vector<int>(p).swap(p);来解决
其中vector§以p的大小创建了一个匿名对象,然后交换使的容量减小

void test() {
	vector<int> p;
	for (int i = 0; i < 10000; i++) {
		p.push_back(i);
	}

	cout << "P的容量为:" << p.capacity() << endl;
	cout << "P的大小为:" << p.size() << endl;
	
	p.resize(2);

	cout << "指定长度后P的容量为:" << p.capacity() << endl;
	cout << "指定长度后P的大小为:" << p.size() << endl;

	vector<int>(p).swap(p);
	cout << "收缩后P的容量为:" << p.capacity() << endl;
	cout << "收缩后P的大小为:" << p.size() << endl;

}

.8 预留空间

减少容器再动态扩容时的扩展次数
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问。

void test() {

	vector<int> p;
	int num = 0;							//统计开辟内存次数
	int* f = NULL;
	for (int i = 0; i < 1000; i++) {
		p.push_back(i);

		if (f != &p[0]) {					//开辟了一次空间
			num++;			
			f = &p[0];
		}
	}
	cout << "未预先指定的p开辟次数为:" << num << endl;

	vector<int> p1;
	p1.reserve(1000);
	num = 0;
	f = NULL;
	for (int i = 0; i < 1000; i++) {
		p1.push_back(i);

		if (f != &p1[0]) {				
			num++;
			f = &p1[0];
		}
	}
	cout << "预先指定的p1的开辟次数为:" << num << endl;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值