vector

 vector 容器的增查删改

#include<iostream>
#include<vector>

using namespace std;

//vector 输出
void Print_vector(vector<int>& v)
{
	//begin(),end();返回的是迭代器
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
		cout << *it << " ";

	cout << endl;
}

//vector 初始化
void text01()
{
	vector<int> v1;//默认构造
	int arr[] = { 10,20,30,40 };
	vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
	vector<int> v3(v2.begin(), v2.end());
	vector<int> v4(v3);

	//遍历输出
	Print_vector(v4);

	return;
}

//vector 赋值
void assginment()
{
	int arr[] = { 10,20,30,40 };
	vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
	vector<int>v2,v3;
	v2.assign(v1.begin(), v1.end());

	v3 = v2;//直接赋值

	//交换
	v3.swap(v2);

}


//vector 大小操作
void text03()
{
	vector<int>v1;

	v1.size();//元素个数
	v1.capacity();//容器的容量
	//capacity()>=size()
	v1.empty();//是否为空

	//v1.resize(int num);重新指定容器的长度,如果容器变长,则以默认值填充,
	//如果容器变短,超出部分被删除

	//v1.resize(int num,element);默认值改为element;

}

//vector 数据的存取操作
void text04()
{
	//at(int idx) ;返回idx 索引指向的数据,如果idx 越界,提出out_of_range异常
	//operator[] ; 返回idx 索引指向的数据,,如果idx 越界,直接报错
	//frond(); 返回容器中第一个数据
	//back(); 返回容器中第二个数据

	int arr[] = { 10,20,30,40 };
	vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));

	for (int i = 0; i < v1.size(); i++)
		cout << v1[i] << ' ';

	cout << endl;

	for (int i = 0; i < v1.size(); i++)
		cout << v1.at(i) << ' ';

	cout << endl;

	return;
}

//vector 插入删除
void text05()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(20);
	//头插法
	v.insert(v.begin(), 30);
	v.insert(v.end(), 40);
	//vector 容器支持随机访问
	//迭代器支持 +1. +2. -1, -2 这种操作
	v.insert(v.begin() + 2, 100);//在第三个位置插入100
	Print_vector(v);
	//删除
	//eraes 可以做上面insert() 的操作
	v.erase(v.begin());
	v.erase(v.begin() + 1, v.end());
	v.clear();//清空

	return;
}
int main()
{
	//text01();
	//text04();

	text05();

	return 0;
}

用swap 收缩vector空间

#include<iostream>
#include<vector>

using namespace std;

void text()
{
	vector<int> v;
	//空间不够可以增加空间,但是删除后,不会减少空间

	for (int i = 1; i <= 10000; i++)
		v.push_back(i);
	cout << "初始......................" << endl;

	cout << "size():" << v.size() << endl;
	cout << "capacity" << v.capacity() << endl;

	puts("");
	cout << "删除后......................" << endl;
	v.resize(10);
	cout << "size():" << v.size() << endl;
	cout << "capacity" << v.capacity() << endl;
	puts("");

	cout << "优化后......................" << endl;
	vector<int>(v).swap(v);
	cout << "size():" << v.size() << endl;
	cout << "capacity" << v.capacity() << endl;

	return;


}
int main()
{
	text();

	return 0;
}

reserve预留空间

 

#include<iostream>
#include<vector>

using namespace std;

void text()
{
	//reserve 预留空间


	int num = 0;//内存申请的次数
	int* address = NULL;

	vector<int> v;
	v.reserve(10000);
	for (int i = 0; i <= 10000; i++)
	{
		v.push_back(i);
		if (address != &(v[0]))
		{
			address = &(v[0]);
			num++;
		}
	}
	cout <<"num=="<< num << endl;


}
int main()
{
	text();

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值