数据结构vector~基本操作

本文详细介绍了C++标准库中的Vector容器,包括其定义、初始化、基本操作及应用实例。讲解了如何使用Vector替代数组解决数据长度不确定的问题,涵盖了Vector的声明、赋值、初始化以及常见操作如push_back、resize等。
摘要由CSDN通过智能技术生成

Vector的总结和理解

  1. 要使用vector结构,需要在头文件加上#include<vector>.
  2. vector可用之处,是在于当一个题目没给定一个数据的长度,这时候用数组不好去确认要给数组定义多少时,就可以用vector来代替数组去解决,vector可以使行与列都不定长。
  3. 定义一个可变的列vector为这样定义vector<int>pile这相当于定义了一个长度不定的pile数组。
  4. 定义一个可变的列和行的vector的方式
定义列与行都可变的vector
vector<vector<int> > pile  这是正确的定义方式
vector<<int>> 这是错误定义方式

一维vector的输出与输入

	
	vector<int>pile;
	for(int i=0;i<10;i++)
	{
		pile.push_back(i);//pile数组加入元素 
	 } 
	 for(int i=0;i<10;i++)
	 {
	 	printf("%d\n",pile[i]);
	 }
	 int Len=pile.size();//输出行内的元素 
	 printf("%d",Len);
	 

一维vector的声明与赋值:

 vector<int>pile(10)相当于一维数组,只有10个元素。 
 vector<int>pile 相当于可变一维数组。 
 vector<int>pile(10,2)相当于给一维数组中10个元素赋值为2.
 vector<int>Lemon
 默认初始化,但没有分配储存空间,返回值也是0.
 vector<int> Lemon(5)声明一个大小为5的一维数组
 相当于vector<int> Lemon=5; 
 vector<int> Lemon(5,2),声明一个大小为5的一维数组,并给其赋值为2.
 vector<int> Lemon={1,2,3,4,5,6} 这也是正常的赋值方式。 
	  	

vector初始化为0的正确方式;

//错误方式
vector<int> Lemon[100];
	 	memset(Lemon,10,sizeof(Lemon));//这样初始化会造成vector数组中许多数据错乱。
		 for(int i=0;i<10;i++)
		 {
		 	for(int d=0;d<10;d++)
			 {
			 	printf("%d\n",Lemon[i][d]);
			  } 
		  }
		  
		  //正确的方式
		  vector<int> Lemon[100]; 
		  for(int d=0;d<10;d++)
		  for(int i=0;i<10;i++)
		  {
		  	Lemon[d].push_back(0); 
		   } 
		   for(int i=0;i<10;i++)
		   for(int d=0;d<10;d++)
		   printf("%d\n",Lemon[i][d]);

二维vector的定义与初始化注意事项:

  1. 定义vector二维数组的注意
	定义列与行都可变的vector
	vector<vector<int> > pile  这是正确的定义方式
	vector<<int>> 这是错误定义方式
  1. 二维数组的初始方法
// 二维数组的vector的初始方法   
		   int num=10;// 层数 
		   int num1=5; //列数。 
		   vector<vector<int> >Lemon(num,vector<int>());
		   for(int i=0;i<num;i++)
		   {
		   	Lemon[i].resize(num1);
		   }
		   for(int i=0;i<10;i++)
		   for(int d=0;d<5;d++)
		   {
		   	printf("%d\n",Lemon[i][d]);
			}
			
  1. 数组与vector的结合:
// 数组与vector 运用的方式
			int a[3]={1,2,3};
			vector <int> Lemon(a,a+3);
			for(int i=0;i<3;i++)
			{
				cout << Lemon[i] << endl;
			 }
			 

vector的基本操作:

  1. 容量操作:
vector<int>Lemon;
			 for(int i=0;i<100;i++)
			 {
			 	Lemon.push_back(0);//开扩动态空间 
			  } 
			  cout << Lemon.size() << endl;//输出内存
			  cout << Lemon.max_size() << endl;//输出最大内存空间
			  cout << Lemon.capacity() << endl;//输出vector能容纳的元素
			  cout << Lemon.empty() << endl; //判断该vector是否为空 
			  
  1. resize的用法:resize用来改变vector的size,有可能也会改变capacity。如果改变后的size比当前capacity大,则capacity会变大,同时构造出多出来的对象;反之,capacity不变,同时析构一些不再需要的对象
		   int num=10;// 层数 
		   int num1=5; //列数。 
		   vector<vector<int> >Lemon(num,vector<int>());
		   for(int i=0;i<num;i++)
		   {
		   	Lemon[i].resize(num1);
		   }
		   for(int i=0;i<10;i++)
		   for(int d=0;d<5;d++)
		   {
		   	printf("%d\n",Lemon[i][d]);
			}
  1. vector中的修改:这里会运用迭代器的运用。
vector<int>Lemon;
			 int a[5]={1,2,3,4,5};
			   Lemon.assign(a,a+5);
			   //Lemon.assign(向量begin,向量last) ,多个元素赋值 
			   cout << Lemon[3] << endl;
			   /* 
			   Lemon.push_back(4);//末尾添加元素 
			   cout << Lemon[5] << endl;
			   */
			   
			   /*
			   Lemon.pop_back();//删除末尾元素。 
			   cout << Lemon[4] << endl; 
			   */
		/*
			    vector <int> ::iterator it;// 
			   Lemon.erase(Lemon.begin(),Lemon.end());//将所有元素删除 
			   for(int i=0;i<4;i++)
			   {
			   	printf("%d\n",Lemon[i]);
				}
				cout << Lemon.size() << endl; //输出内存
				*/
				
				/*
				Lemon.clear();//删除所有元素 
				for(int i=0;i<4;i++)
				{
					cout << Lemon[i] << endl;
				 } 
				 cout << Lemon.size() << endl;
				 */
				 	vector <int> ::iterator it;
				 	/*
					 it=Lemon.begin();
					 Lemon.insert(it+1,5);//在Lemon[1]处插入5,
					 for(int i=0;i<6;i++)
					 {
					cout << Lemon[i] << endl;
					  }
					  */ 
					  
					  
					  /*
					  it=Lemon.begin();
					  Lemon.insert(it,2,3);//在首部插入2个3;
					  for(int i=0;i<7;i++)
					  {
					  	cout << Lemon[i] << endl;
					   }
					   */
					   it=Lemon.begin();
					   int x[2]={0};
					   Lemon.insert(it,x,x+2);//插入数组 
					   for(int i=0;i<7;i++)
					   {
					   	cout << Lemon[i] << endl;
					   }

总代码:

#include<vector>
#include<cstdio>
#include<iostream>
#include<string>
#include<string.h>
using namespace std; 
int main()
{
	// 定义列与行都可变的vector
	//vector<vector<int> > pile  这是正确的定义方式
	//vector<<int>> 这是错误定义方式
	
	// 定义列可变的vector<vector<int> pile[10];//相当于二维数组,当时行是可变的; 
	// vector<int>pile(10)相当于一维数组,只有10个元素。 
	//vector<int>pile 相当于可变一维数组。 
	// vector<int>pile(10,2)相当于给一维数组中10个元素赋值为2.
	
	/*
	vector<int>Lemon
	默认初始化,但没有分配储存空间,返回值也是0. 
	*/ 
	
	
	
	/*
	vector<int>pile;
	for(int i=0;i<10;i++)
	{
		pile.push_back(i);//pile数组加入元素 
	 } 
	 for(int i=0;i<10;i++)
	 {
	 	printf("%d\n",pile[i]);
	 }
	 int Len=pile.size();//输出行内的元素 
	 printf("%d",Len);
	 */
	 
	 
	 /*
	 vector<int> Lemon(5)声明一个大小为5的一维数组
	 相当于vector<int> Lemon=5; 
	 vector<int> Lemon(5,2),声明一个大小为5的一维数组,并给其赋值为2.
	 vector<int> Lemon={1,2,3,4,5,6} 这也是正常的赋值方式。 
	  
	 
	 */ 
	 /*
	 vector<int> Lemon[100];
	 	/*memset(Lemon,10,sizeof(Lemon));//这样初始化会造成vector数组中许多数据错乱。
		 for(int i=0;i<10;i++)
		 {
		 	for(int d=0;d<10;d++)
			 {
			 	printf("%d\n",Lemon[i][d]);
			  } 
		  }*/
		  
		  /*
		  vector<int> Lemon[100]; 
		  for(int d=0;d<10;d++)
		  for(int i=0;i<10;i++)
		  {
		  	Lemon[d].push_back(0); 
		   } 
		   for(int i=0;i<10;i++)
		   for(int d=0;d<10;d++)
		   printf("%d\n",Lemon[i][d]);
		   */
		   
		   // 二维数组的vector的初始方法
		   /*
		   int num=10;// 层数 
		   int num1=5; //列数。 
		   vector<vector<int> >Lemon(num,vector<int>());
		   for(int i=0;i<num;i++)
		   {
		   	Lemon[i].resize(num1);
		   }
		   for(int i=0;i<10;i++)
		   for(int d=0;d<5;d++)
		   {
		   	printf("%d\n",Lemon[i][d]);
			}
			*/
			
			
			// 数组与vector 运用的方式
			/*
			int a[3]={1,2,3};
			vector <int> Lemon(a,a+3);
			for(int i=0;i<3;i++)
			{
				cout << Lemon[i] << endl;
			 }
			 */
			 
			 
			 // vector 基本操作
			 /* 容量 
			 vector<int>Lemon;
			 for(int i=0;i<100;i++)
			 {
			 	Lemon.push_back(0);//开扩动态空间 
			  } 
			  cout << Lemon.size() << endl;//输出内存
			  cout << Lemon.max_size() << endl;//输出最大内存空间
			  cout << Lemon.capacity() << endl;//输出vector能容纳的元素
			  cout << Lemon.empty() << endl; //判断该vector是否为空 
			  */
			  // resise的用法
			  /*
			  
			  int num=10;// 层数 
		   int num1=5; //列数。 
		   vector<vector<int> >Lemon(num,vector<int>());
		   for(int i=0;i<num;i++)
		   {
		   	Lemon[i].resize(num1);
		   }
		   for(int i=0;i<10;i++)
		   for(int d=0;d<5;d++)
		   {
		   	printf("%d\n",Lemon[i][d]);
			}
			*/ 
			 // 2:修改
			 vector<int>Lemon;
			 int a[5]={1,2,3,4,5};
			   Lemon.assign(a,a+5);
			   //Lemon.assign(向量begin,向量last) ,多个元素赋值 
			   cout << Lemon[3] << endl;
			   /* 
			   Lemon.push_back(4);//末尾添加元素 
			   cout << Lemon[5] << endl;
			   */
			   
			   /*
			   Lemon.pop_back();//删除末尾元素。 
			   cout << Lemon[4] << endl; 
			   */
		/*
			    vector <int> ::iterator it;// 
			   Lemon.erase(Lemon.begin(),Lemon.end());//将所有元素删除 
			   for(int i=0;i<4;i++)
			   {
			   	printf("%d\n",Lemon[i]);
				}
				cout << Lemon.size() << endl; //输出内存
				*/
				
				/*
				Lemon.clear();//删除所有元素 
				for(int i=0;i<4;i++)
				{
					cout << Lemon[i] << endl;
				 } 
				 cout << Lemon.size() << endl;
				 */
				 	vector <int> ::iterator it;
				 	/*
					 it=Lemon.begin();
					 Lemon.insert(it+1,5);//在Lemon[1]处插入5,
					 for(int i=0;i<6;i++)
					 {
					cout << Lemon[i] << endl;
					  }
					  */ 
					  
					  
					  /*
					  it=Lemon.begin();
					  Lemon.insert(it,2,3);//在首部插入2个3;
					  for(int i=0;i<7;i++)
					  {
					  	cout << Lemon[i] << endl;
					   }
					   */
					   it=Lemon.begin();
					   int x[2]={0};
					   Lemon.insert(it,x,x+2);//插入数组 
					   for(int i=0;i<7;i++)
					   {
					   	cout << Lemon[i] << endl;
					   }			    
		   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值