vector简而言之就是功能强大的数组。数组长度确定后,便不可改变,而vector确定后任然可以改变,并且vector还具有一些数组不可使用的操作,接下来我就一一介绍。(vector效率并没有数组高,所以如果知道数组的长度,尽量别用vector)。一般vector会与迭代器一同使用,所以下面我将用迭代器的操作方式为大家介绍。
1.创造容器
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>::iterator it;//创建迭代器。
int i;
//vector的使用方式:
/*方式一*/
vector<int> v1;
for(i=0;i<10;i++) v1.push_back(i);//在尾部插入值,后面会介绍。
cout<<"方式一:";
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 2 3 4 5 6 7 8 9*/
/*方式二*/
vector<int> v2(5);//定义前五个值为0(默认);
for(i=0;i<10;i++) v2.push_back(i);//在尾部插入值,后面会介绍。
cout<<"方式二:";
for(it=v2.begin();it!=v2.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 0 0 0 0 0 1 2 3 4 5 6 7 8 9*/
/*方式三*/
vector<int> v3(5,2);//定义前五个值为2;
for(i=0;i<10;i++) v3.push_back(i);//在尾部插入值,后面会介绍。
cout<<"方式三:";
for(it=v3.begin();it!=v3.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
2 2 2 2 2 0 1 2 3 4 5 6 7 8 9*/
/*方式四*/
vector<int> v4(v1);//相当于v4=v1;
cout<<"方式四:";
for(it=v4.begin();it!=v4.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 2 3 4 5 6 7 8 9*/
/*方式五*/
vector<int> v5(v1.begin(),v1.begin()+4);//相当于将v1的前4个值赋值给v5;
cout<<"方式五:";
for(it=v5.begin();it!=v5.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 2 3*/
}
2.插入的方式
#include<bits/stdc++.h>
using namespace std;
int main()
{
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
int i;
vector<int>::iterator it;//创建迭代器。
vector<int> v1;
cout<<"在尾部插入一个元素:"<<endl;
for(i=0;i<10;i++) v1.push_back(i);//在尾部插入一个元素。
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 2 3 4 5 6 7 8 9
*/
cout<<"在任何位置插入一个元素:"<<endl;
it=v1.begin();
v1.insert(it+2,10);//在第三位数插入10,相当于数组(底标从0开始排列)
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 10 2 3 4 5 6 7 8 9
*/
cout<<"在任何位置连续插入多个元素"<<endl;
it=v1.begin();
v1.insert(it+1,2,10);//从第二个数开始,连续插入2个10,相当于数组(底标从0开始排列)
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 10 10 1 10 2 3 4 5 6 7 8 9
*/
cout<<"在一个容器的指定位置插入另一个容器的片段:"<<endl;
it=v1.begin();
vector<int> v2;
for(i=0;i<10;i++) v2.push_back(i);
v2.insert(v2.begin()+2,it,it+3); //在v2的第三个位置插入v1的 前三个数(0-2位置上的数)
for(it=v2.begin();it!=v2.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 0 10 10 2 3 4 5 6 7 8 9
*/
}
3.删除操作
#include<bits/stdc++.h>
using namespace std;
int main()
{
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
int i;
vector<int>::iterator it;//创建迭代器。
vector<int> v1;
for(i=0;i<10;i++) v1.push_back(i);
cout<<"指定一个位置进行删除:" ;
v1.erase(v1.begin()+3);//删除v1的三个数字
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 1 2 4 5 6 7 8 9
*/
cout<<"指定一个片段进行删除:" ;
v1.erase(v1.begin()+1,v1.begin()+3);//删除(1-3)这个片段的值(但是遵循左闭右开原则,最右边不删除)
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 4 5 6 7 8 9
*/
cout<<"删除尾部的值:" ;
v1.pop_back(); //删除尾部的值
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
0 4 5 6 7 8
*/
cout<<"清空:" ;
v1.clear(); //清空
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
*/
}
4.其他操作
#include<bits/stdc++.h>
using namespace std;
int main()
{
//v1,v2的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1,v2的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1,v2的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1,v2的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
//v1,v2的容器改变后我并没有恢复,所以v1的值就是上一个方法改变后的值!!!!
int i;
vector<int>::iterator it;//创建迭代器。
vector<int> v1;
vector<int> v2;
for(i=0;i<10;i++) v1.push_back(i);
cout<<"判断是否为空:"<<endl;
int result;
//empty:空为1,非空为0。
result=v1.empty();
cout<<"v1检测结果:"<<result<<endl;
result=v2.empty();
cout<<"v2检测结果:"<<result<<endl;
/*打印结果:
v1检测结果:0
v2检测结果:1
*/
cout<<"求出容器中元素的个数:"<<endl;
result=v1.size();
cout<<"v1中元素的个数是:"<<result<<endl;
/*打印结果:
v1中元素的个数是:10
*/
cout<<"交换两个容器中的值:"<<endl;
for(i=9;i>=0;i--) v2.push_back(i);
cout<<"交换前:"<<endl;
cout<<"v1:";
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
cout<<"v2:";
for(it=v2.begin();it!=v2.end();it++)
cout<<*it<<" ";
cout<<endl;
swap(v1,v2); //交换操作。
cout<<"交换后:"<<endl;
cout<<"v1:";
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
cout<<"v2:";
for(it=v2.begin();it!=v2.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
交换前:
v1:0 1 2 3 4 5 6 7 8 9
v2:9 8 7 6 5 4 3 2 1 0
交换后:
v1:9 8 7 6 5 4 3 2 1 0
v2:0 1 2 3 4 5 6 7 8 9
*/
cout<<"统一设置前n个数的值:";
cout<<endl;
v1.assign(5,10);//前5个数为10.
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*打印结果:
10 10 10 10 10
*/
}