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

C++ 学习之容器空间互换、预留空间

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

C++ 学习之容器空间互换、预留空间

1、swap可以使两个容器互换,可以达到实用的收缩内存效果 2、预留空间可以减少vector在动态扩展容量时的扩展次数如果数据量较大,可以一开始利用reserve预留空间
#include
#include 
#include 
using namespace std;

void printfVector(vector& v)
{
	for (vector::iterator it = v.begin();it != v.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	vector v;
	for (int i = 0;i < 10;i++)
	{
		v.push_back(i);
	}

	printfVector(v);


	vector v2;
	for (int i = 10;i > 0;i--)
	{
		v2.push_back(i);
	}

	printfVector(v2);

	v.swap(v2);//容器互换

	printfVector(v);
	printfVector(v2);
}

void test02()//容器互换空间的应用:收缩空间大小
{
	vector v1;
	for (int i = 0;i < 1000000;i++)
	{
		v1.push_back(i);
	}

	cout << "v1的容量:"<< v1.capacity() << endl;//1049869
	cout << "v1的大小:" << v1.size() << endl;//1000000      

	
	v1.resize(10);//重新指定大小

	cout << "v1的容量:" << v1.capacity() << endl;//1049869  容量不变,但是只用了10个空间,很浪费资源
	cout << "v1的大小:" << v1.size() << endl;//10  

	
	

	vector(v1).swap(v1);//收缩空间


	cout << "v1的容量:" << v1.capacity() << endl;//10 容量也变成10了
	cout << "v1的大小:" << v1.size() << endl;//10  

}


void test03()//预留空间
{

	int num = 0;
	int* p = NULL;
	vector v;

	v.reserve(1000000);//首先预留出来一大块空间,这样系统只分配一次空间,节省内存开销

	for (int i = 0;i < 1000000;i++)
	{
		v.push_back(i);//往数组里边不断插入数据

		if (p != &v[0])//统计系统一共给v分配了多少次空间,每分配一次空间都会把原数据拷贝到新空间,所以首地址会变
		{
			p = &v[0];
			num++;
		}
	}
	cout << num << endl;//35次
}

int main()
{
	
	//test01();

	//test02();

	test03();

	return 0;
}


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

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

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