Vector的总结和理解
- 要使用vector结构,需要在头文件加上
#include<vector>
. - vector可用之处,是在于当一个题目没给定一个数据的长度,这时候用数组不好去确认要给数组定义多少时,就可以用vector来代替数组去解决,vector可以使行与列都不定长。
- 定义一个可变的列vector为这样定义
vector<int>pile
这相当于定义了一个长度不定的pile数组。 - 定义一个可变的列和行的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的定义与初始化注意事项:
- 定义vector二维数组的注意
定义列与行都可变的vector
vector<vector<int> > pile 这是正确的定义方式
vector<<int>> 这是错误定义方式
- 二维数组的初始方法
// 二维数组的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的结合:
// 数组与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是否为空
- 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]);
}
- 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;
}
}