STL vector容器

vector容器
vector数据结构和数组非常相似,也成为单端数组。
但vector又不同于普通数组,vector可以动态扩展
动态扩展并不是在原空间后接续新空间,而是找到更大的内存空间,然后将原数据拷贝到新空间,释放原空间。
创建vector容器

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

}
int main()
{
	vector<int> v1;//默认构造
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);//在容器尾部加入数据
	}
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	vector<int>v2(v1.begin(), v1.end());//将v1.begin(), v1.end()之间的数据拷贝进v2;
	Print(v2);//0 1 2 3 4 5 6 7 8 9
	vector<int>v3(10, 1);
	Print(v3);//1 1 1 1 1 1 1 1 1 1
	vector<int> v4(v3);//拷贝构造
	Print(v4);//1 1 1 1 1 1 1 1 1 1
	return 0;
}

赋值

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

}
int main()
{
	vector<int> v1;//默认构造
	for (int i = 0; i < 10; i++)
	{

		v1.push_back(i);
	}
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	vector<int>v2;
	v2 = v1;//重载等号运算符
	Print(v2);//0 1 2 3 4 5 6 7 8 9
	vector<int >v3;
	v3.assign(v1.begin(), v1.end());
	Print(v3);//0 1 2 3 4 5 6 7 8 9
	vector<int>v4;
	v4.assign(10, 1);
	Print(v4);//1 1 1 1 1 1 1 1 1 1
	return 0;
}

常用重载等号运算符赋值。
vector的容量和大小操作
在这里插入图片描述
函数resize(int num),重新指定容器的长度为num,若容器变长,则以默认值填充新位置,默认值一般是0.如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num,elem) ,重新指定容器的长度为num,若容器变长,则以elem值填充新位置.如果容器变短,则末尾超出容器长度的元素被删除。
而且使用resize()函数后capacity()和size()两者返回值相同。
对vector容器进行插入,删除操作

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

}
int main()
{
	vector<int> v1;//默认构造
	for (int i = 0; i < 10; i++)
	{

		v1.push_back(i);//尾部插入元素
	}
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	v1.pop_back();//删除最后一个元素
	Print(v1);//0 1 2 3 4 5 6 7 8
	v1.insert(v1.end(), 9);//迭代器指向位置插入元素
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	v1.insert(v1.begin(), 2, 3);//迭代器指定位置插入2个3;
	Print(v1);
	v1.erase(v1.begin());//删除迭代器指定元素
	Print(v1);//3 0 1 2 3 4 5 6 7 8 9
	vector<int>::iterator it = v1.begin();
	it += 2;//vector容器和数组相似可以跳跃式访问
	v1.erase(v1.begin(),it );//删除两个迭代器之间的元素
	Print(v1);//1 2 3 4 5 6 7 8 9
	v1.clear();//清空容器
	if (v1.empty())
	{
		cout << "v1为空" << endl;
	}
	return 0;
}

vector中的数据存取操作

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

}
int main()
{
	vector<int> v1;//默认构造
	for (int i = 0; i < 10; i++)
	{

		v1.push_back(i);//尾部插入元素
	}
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	//vector容器的所储存元素的下标从零开始;
	cout << v1.at(3) << endl;//3
	cout << v1[3] << endl;//3
	cout << v1.front() << endl;//0,返回容器中第一个数据元素
	cout << v1.back() << endl;//9,返回容器最后一个数据元素
	return 0;
}

vector互换元素

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

}
int main()
{
	cout << "交换前:" << endl;
	vector<int> v1;//默认构造
	for (int i = 0; i < 10; i++)
	{

		v1.push_back(i);//尾部插入元素
	}
	Print(v1);//0 1 2 3 4 5 6 7 8 9
	vector<int >v2;
	for (int i = 9; i >= 0; i--)
	{
		v2.push_back(i);
	}
	Print(v2);
	cout << "交换后:" << endl;
	v1.swap(v2);
	Print(v1);
	Print(v2);
	return 0;
}

在这里插入图片描述

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

}
int main()
{
	vector<int> v1;//默认构造
	for (int i = 0; i < 1000; i++)
	{

		v1.push_back(i);//尾部插入元素
	}
	cout << "v1的大小为:" << v1.capacity() << endl;//v1的大小为:1066
	cout << "v1中的元素个数为:" << v1.size() << endl;//v1中的元素个数为:1000
	vector<int>(v1).swap(v1);
	cout << "操作后\n";
	cout << "v1的大小为:" << v1.capacity() << endl;//v1的大小为:1000
	cout << "v1中的元素个数为:" << v1.size() << endl;//v1中的元素个数为:1000
	return 0;
}
vector<int>(v1).swap(v1);拷贝构造一个匿名容器,与v1进行于交换

此步骤可缩减容器大小,减少空间的浪费。
vector预留空间
减少vector动态扩展的次数
函数reserve(int len)容器预留len个元素长度,预留位置不初始化,元素不可访问
区分resize()和reserve()的区别
英语单词reserve:保留,预定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值