c++动态数组vector的使用

vector介绍

  • Vector是一个封装了动态大小数组的顺序容器。跟任意其它类型容器一样,它能够存放各种类型的对象。
  • 里面的底层实现是一个顺序表结构
  • 可以理解为是一个能够存放任意类型的动态数组。

vector的使用

导入头文件

#include <vector>	//使用vector需要的头文件
#include <iostream> //标准输入输出头文件
using namespace std; //使用标准命名空间

运算符重载

这里实现<<的运算符重载,方便输出vector

template <typename T>
ostream& operator<<(ostream& os, const vector<T>& vec)
{
	if (vec.empty())
	{
		os << "[]" << endl;
		return os;
	}
	os << "[";
	for (auto i : vec) //遍历容器里面的数据
	{
		os << i << ",";
	}
	os << "\b]" << endl;
	return os;
}

vector的初始化的方法

//vector 的初始化
void test1()
{
	cout<<"这是测试1:"<<endl;
	vector<int> vec1;    //声明一个vector,存放int类型数据
	vector<int> vec2(10);	//声明一个vector 长度为10  默认会初始化为0
	vector<int> vec3 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//初始化列表
	vector<int> vec4(10, 10);		//第一个参数是数组长度,第二个参数是全部填充的数据

	cout << vec2;  //输出vec2,这里需要运算符重载
	cout << vec3;
	cout << vec4 << endl;
}

迭代器的使用

void test2()
{
	cout<<"这是测试2:"<<endl;
	vector<char> vec(10, 'a');
	cout << vec.size() << endl;		//size获取vector当前数组的长度
	for (int i = 0; i < vec.size(); i++)
	{
		cout << vec[i] << endl;
	}
	//使用迭代器
	vector<char>::iterator iter = vec.begin();  //begin() 返回迭代器的首地址
	*iter = 'b';   //通过运算符重载进行解引用
	cout << vec;
	//auto关键字可以自动识别类型,定义时需要初始化
	for (auto iter = vec.begin(); it != vec.end(); it++)
	{
		cout << *iter << " ";
	}
	cout << endl;
}

vector的压栈出栈

  • push 压入(在尾部插入)
  • pop 弹出(删除)
  • back 尾部(末尾值)
void test3()
{
	cout<<"这是测试3:"<<endl;
	vector<int> vec = { 1, 2, 3, 4, 5 };

	cout << vec << endl;
	cout << vec.size() << endl;
	vec.push_back(10);	//从尾部插入一个数据 10
	cout << vec;
	vec.push_back(30);	//vector可以自动增长长度 push_back后会自动添加数据
	cout << vec << endl;
	cout << vec.size() << endl;
	vec.pop_back();		//从尾部删除一个数据
	cout << vec << endl;
	cout << vec.size() << endl;

	while (!vec.empty())	//empty() 判断是否为空 是返回 true   不是就返回false
	{
		vec.pop_back();
	}
	cout << vec;
	cout << vec.size();
}

vector的常用方法

  • push_back //从尾部插入一个数据
  • pop_back //从尾部删除一个数据
  • insert //从指定的位置插入一个元素
  • erase //从指定的位置删除(擦除)一个元素
  • resize //重新调整大小
  • size //获取当前大小
  • capacity //获取实际的内存空间
  • assign //重新分配内存空间
  • front //获取头部部元素
  • back //获取尾部元素
  • at //相当于 []
  • clear //清除所有数据
  • data //返回数组指针
  • begin //迭代器首地址
  • end //迭代器结束地址
void test4()
{
	cout<<"这是测试4:"<<endl;
	vector<int> vec;		//定义一个vector
	vec.push_back(10);			//从尾部插入一个数据
	vec.pop_back();			//从尾部删除一个数据
	vector<int> vec2 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	vec2.insert(vec2.begin() + 3, 10);
	cout << vec2 << endl;
	vec2.erase(vec2.begin()+7);	// //从指定的位置删除(擦除)一个元素
	cout << vec2;
	
	vector<double> vec3(20,6);
	cout << vec3;
	vec3.resize(10);			//重新调整大小
	cout << vec3;
	vec3.resize(15);
	cout << vec3<<endl;		//resize比原来长度要小,则从后面截取,如果比原来大,则在后面补0

	vector<int> vec4 = { 4, 6, 2, 1, 4, 98, 65, 78, 15 };
	cout << vec4;
	vec4.assign({1,2,3,5,7,9,10});	//重新分配内存空间,相当于重新初始化了
	cout << vec4;
	vec4.assign(10, 6);

	cout <<"capacity:"<< vec4.capacity()<<endl;  //返回一个该容器实际中占用的空间大小
	
	vector<int>vec5 = { 1, 2, 3, 4, 5 };
	cout << vec5.front() << endl;   //获取第一个元素
	cout << vec5.back() << endl;		//获取尾部元素

	cout << vec5[2] << endl;
	cout << vec5.at(2) << endl;
	vec5.clear();  //清除所有数据,size也会变成0     resize(0)也能实现  assign(0,0)
	cout << vec5;
}

主函数

int main()
{
	test1();
	test2();
	test3();
	test4();
	return 0;
}

结语

vector动态数组使用起来是很方便的,在实际的开发中也经常用到,希望这篇文章能够对大家有所帮助,今天的分享就到这里了。祝大家学习进步~

猜你喜欢

转载自blog.csdn.net/weixin_42494845/article/details/105811452