C++STL模板类vector

▼魔方 西西 提交于 2020-01-26 16:59:49


STL(Standard Template Library)是C++的标准模板库,竞赛中很多常用的数据结构、算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程。

vector容器是一个模板类,能存放任何类型的对象。

vector:动态数组,从末尾能快速插入与删除,直接访问任何元素

一、定义

  1. 定义int型数组(也可使char、double等类型)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector< int >a;//默认初始化,a为空
	vector< int >b(a);//用a定义b
	vector< int >a(100);//a有100个值为0的元素
	vector< int >a(100,6);//a有100个值为6的元素
	
}
  1. 定义string型数组
#include<iostream>
#include<vector>
using namespace std;
int main()
{

	vector< string >a(10,"null");//10个值为null的元素;
 	vector< string >vec(10,"hello");//10个值为hello的元素
 	vector< string >b(a.begin(),a.end());//b是a的复制
}
  1. 定义结构型数组
#include<iostream>
#include<vector>
using namespace std;
struct point{
	int x,y;
};
int main()
{
	vector< point >a;//a用来存坐标
}
  1. 定义二维数组
	vector<int>a[5];

它的一维大小是固定的,第二维是动态的,也可定义多维数组

简单应用:

#include<bits/stdc++.h>
#include<vector>//可不写
using namespace std;
int main()
{
 	vector<int>a[10];
 	for(int i=0;i<5;i++)
 	{
  		for(int j=0;j<4;j++)
 		{
   			a[i].push_back(5);
  		}
 	} 
 	for(int i=0;i<5;i++)
	{
  		for(int j=0;j<4;j++)
  		{
   			cout<<a[i][j]<<" ";
  		}
 		cout<<endl;
 	}
}

在这里插入图片描述

二、常用操作

  1. 赋值:在尾部添加元素
	a.push_back(1);
  1. 元素个数
	int size;
	size=a.size();
	cout<<size;
  1. 判断是否为空
	bool isEmpty;
	isEmpty=a.empty();
	cout<<isEmpty;//若为空返回1,否则返回0
  1. 打印第一个元素
cout<<a[0]<<endl;
  1. 中间插入:在第i个元素前面插入k
	
	a.insert(a.begin()+i,k);
  1. 尾部插入

插入单个元素

	 a.push_back(100);

插入多个元素

 	a.push_back(105);
  1. 删除尾部
	a.pop_back();
  1. 删除区间:删除区间[ i , j-1 ]的元素
	a.erase(a.begin()+i,a.begin()+j);//删除的是第i到第j-1个元素
  1. 删除元素:删除第i+1个元素
	 a.erase(a.begin()+i);
  1. 调整大小:数组大小变为n
	a.resize(n);
  1. 排序:从小到大排(基于快排)
	sort(a.begin,a.end);
  1. 翻转数组
	reverse(a.begin,a.end);
  1. 清空
	a.clear();

三、代码实现

下面是与上面对应得代码实现结果和详细代码:
在这里插入图片描述

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main()
{
   
  vector<int>a;
  a.push_back(100);
  a.push_back(101);
  a.push_back(102);

  cout<<"元素个数:"; 
  int size=a.size();
  cout<<size<<endl;
  
  cout<<"判断是否为空:";
  bool isEmpty=a.empty();
  cout<<isEmpty<<endl;
  
  cout<<"打印第一个元素:";
  cout<<a[0]<<endl;
  
  cout<<"中间插入:";
  a.insert(a.begin()+1,520);
  cout<<"在第1个元素前插入520,输出四个元素:"; 
  cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
  
  cout<<"尾部插入10个5"<<endl;
  a.insert(a.end(),10,5);
  cout<<"插入成功!"<<endl;
   
  cout<<"删除区间[0,1]的元素后前两个元素为:";
  a.erase(a.begin()+0,a.begin()+2);
  cout<<a[0]<<" "<<a[1]<<endl;
  
  cout<<"数组大小变为:";
  a.resize(20);
  cout<<a.size()<<endl;
  
  cout<<"将前5个元素排序:";
  sort(a.begin(),a.begin()+5);
  cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
  
  cout<<"将前五个元素翻转:";
  reverse(a.begin(),a.begin()+5); 
  cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
  
  cout<<"清空数组,大小变为:";
  a.clear();
  cout<<a.size(); 
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!