vector 概述:
- vector可以理解为不定长数组,
- vector 数组的定义:需要加上vector头文件
# include <vector>
//vector<typename> arryname;
vector <int > myArray;
vector<node> myArray2; //node 是结构体;
vector<double> myArray3;
vector<vector<int> > array;// 两维均可变长的变长二维数组 >>之间一定要有空格> >
//否则c11之前认为是向右可能报错
vector<int> array2[100];// 这就定义了100个变长数组(vector容器)这里的一维长度已经固定了
vector 容器内元素的访问
- 直接根据数组的下标访问:
- 用迭代器访问(类似于指针);
-
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
for(it=array.begin();it!=array.end();it++)
{
printf("%d ",*it);
}
}
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
it=array.begin();
for(int i=0;i<4;i++)
{
printf("%d ",*(it+i));
}
}
vector 常用函数:
- push_back(); 在vector容器后面加上值
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
it=array.begin();
for(int i=0;i<4;i++)
{
printf("%d ",*(it+i));
}
}
- pop_back 在vector最后面删除一个元素;
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array1;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array1.push_back(i);
}
//it=array1.begin();
array1.pop_back();
for(int i=0;i<array1.size();i++)
{
printf("%d ",array1[i]);
}
}
- size()得到一个unsigned类型的整数表示vector数组元素的个数
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
//it=array1.begin();
printf("%d\n",array.size());
array.pop_back();
printf("%d",array.size());
}
// 结果为:
//4
//3
- clear()清除vector 容器内所有的元素, 时间复杂度为O(n) n为容器内元素数
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
vector<int>::iterator it;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
//it=array1.begin();
printf("%d\n",array.size());
array.pop_back();
printf("%d\n",array.size());
array.clear();
printf("%d",array.size());
}
//结果为:
//4
//3
//0
- insert(it,x) 向vector的任意迭代器地址it处插入元素 x;时间复杂度为O(n);
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
vector<int>::iterator it=array.begin();
array.insert(it+2,100);
for(int i=0;i<=4;i++)
{
printf("%d ",array[i]);
}
}
// 结果是:
//0 1 100 2 3
- erase() 有两种使用方法 erase(it) 删除指定位置的元素,
- erase(start,end) 删除左开右闭区间内 的元素 erase(vi.begin(),vi.end())也可以实现清空vector 容器内的所有元素
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
vector<int>::iterator it=array.begin();
array.insert(it+2,100);
array.erase(array.begin()+2);
for(it=array.begin();it<array.end();it++)
{
printf("%d ",*it);
}
}
//结果为:
//0 1 2 3
删除一个区间:左闭右开区间
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> array;
for(int i=0;i<4;i++)
{
array.push_back(i);
}
vector<int>::iterator it=array.begin();
array.insert(it+2,100);
array.erase(array.begin()+2,array.begin()+4);
for(it=array.begin();it<array.end();it++)
{
printf("%d ",*it);
}
}
、、结果为:0 1 3