vector类

本文详细介绍了C++标准库中的vector类,包括其构造方式、容量与大小操作、访问元素的方法、增删查改功能,以及find算法的使用。通过掌握vector,可以简化动态数组的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector类是一个能够存放各种数据类型的动态数组,熟练掌握vector能够帮助我们帮一些问题简单化。

vector的头文件#include <vector>

一.vector类的构造

1.无参构造
2.初始化n个值的构造
3.拷贝构造
4.用区间构造
5.迭代器构造
int main()
{
	vector<int>v1;
	vector<int>v2(10,2);//10个2的数组
	vector<char>v1(10,'c');
	vector<int>v3(v2);
	int arr[] = { 1, 2, 3, 4, 5 };
	vector<int>v4(arr,arr+5);
	vector<int>v5(v4.begin()+1,v4.end()-1);
	vector<int>::iterator it = v5.begin();
	while (it != v5.end())
	{
		cout << *it<<" ";
		it++;
	}
	cout << endl;
	return 0;
}
注:

vector (size_type n, const value_type& val = value_type())在构造时,不传val默认值为0,传了参数以值为参数

二.vector类的容量,大小操作

1.size
2.capacity
3.empty
4.clear
5.reserve
6.resize
int main()
{
	vector<int>v(10, 2);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	cout << v.empty() << endl;
	v.reserve(20);
	cout << v.capacity() << endl;
	v.resize(15,5);
	cout << v.size() << endl;
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
	v.clear();
	it = v.begin();
	while (it != v.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
	return 0;
}
注:

1.clear()只是将string中有效字符清空,不改变底层空间大小。
2.resize (size_type n, value_type val = value_type()),n<=size(),取数组的前n个,当n>size(),不传val默认为0,传参数为参数。
3.reserve(size_t n):改变容量,当n>capacity时,增加容量,n<=capacity时,不会减少容量,即容量只增不减。
所以实际和string的用法一样

三.vector类的访问

1.operator [ ] 访问
2.迭代器
int main()
{
	int arr[] = {1,2,3,4,5,6,7};
	vector<int>v(arr,arr+7);
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		*it *= 2;
		it++;
	}
	it = v.begin();
	while (it != v.end())
	{
		cout << *it<<" ";
		it++;
	}
	cout << endl;
	
	vector<int>::reverse_iterator rit = v.rbegin();
	while (rit != v.rend())
	{
		cout << *rit << " ";
		rit++;
	}
	cout << endl;
	return 0;
}

四.vector类的增删查改

1.push_back
2.pop_back
3.insert
4.erase
5.swap
int main()
{
	vector<int>v;
	for (int i = 1; i <= 10; i++)
	{
		v.push_back(i);
	}
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	v.pop_back();
	v.pop_back();
	v.pop_back();
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	insert四种插入方式
	v.insert(v.begin(),10);//在开头插入10
	v.insert(v.end(), 20);//在末尾插入20
	
	v.insert(v.begin(),5,100);//在开头插入5个100
	
	int arr[] = { 1, 2, 3, 4, 5 };
	v.insert(v.begin(),arr,arr+5);//在开头插入这个数组
	
	vector<int>v1(10,0);
	v.insert(v.end(),v1.begin(),v1.end());//在结尾插入另个一vector里的内容
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	erase删除的两种方式
	v.erase(v.begin());//删除某一个位置的值

	v.erase(v.begin()+2,v.end()-2);//删除区间内的值
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	交换的方法
	v.swap(v1);
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;
	return 0;
}
注:

在一个位置插入数据,都是在该位置前插入数据,比如insert(v.begin()+2,5),即插入过后在begin()+2的位置是5,而原本在begin()+2位置的值向后移动,这是STL的默认规定,都是在位置前插入数据

五.find(属于算法,不属于vector类的接口)

template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val),在first和last区间内找val值,找到返回val的所在位置的迭代器,找不到返回last的迭代器
值得注意的是这个区间是左闭右开的,即 [first,last),

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	vector<int>v(arr, arr + 5);
	vector<int>::iterator it = find(v.begin(),v.begin()+2,2);
	cout << *it << endl;   //输出2
	it = find(v.begin(),v.end(),5);
	cout << *it << endl;   //输出3
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值