STL-vector的实用操作(详解举例)。

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
	*/
}


发布了35 篇原创文章 · 获赞 34 · 访问量 1872

猜你喜欢

转载自blog.csdn.net/zhq215/article/details/104587245