1.Vector数组可以认为是大小的数组。
2.它可以实现排序,函数是sort(v.begin(),v.end() 。
3.它可以实现二分查找功能,函数是lower_bound(v.begin(),v.end(),x)。查找的是值x,返回第一个大于或者等于小的值的指针。如果查找返回的是指针v.end()或者发现*it!=x那么容器里没有x这个数。
4.unique函数可以删除有序数组中的重复元素。头文件<algorithm>
unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int main(){ 5 int num[] = {1,1,2,2,3,4,4,4,5,5,5}; 6 unique(num,num + 11); 7 for(int i = 0 ; i < 11 ; i++) cout << num[i] << endl; 8 }
5.a.size()读取vector数组的大小,a.resize()改变大小。
6.a.push_back()向尾部添加元素,a.pop_back()删除尾部元素。
实例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <vector> 5 #include <string> 6 #include <algorithm> 7 #include <cmath> 8 using namespace std; 9 int n,m; 10 int main(){ 11 vector<int> v; 12 int Case = 0; 13 while(scanf("%d%d",&n,&m) != EOF &&(n || m)){ 14 v.clear(); 15 int x; 16 for(int i = 0 ; i < n ; i++){ 17 scanf("%d",&x); 18 v.push_back(x); 19 } 20 sort(v.begin(),v.end()); 21 printf("CASE# %d: ",++Case); 22 for(int i = 0 ; i < m ; i++){ 23 scanf("%d",&x); 24 vector<int>::iterator it = lower_bound(v.begin(),v.end(),x); 25 if(it == v.end()) 26 printf("%d not found ",x); 27 else{ 28 if(*it == x) 29 printf("%d found at %d ",x,it - v.begin() + 1); 30 else 31 printf("%d not found ",x); 32 } 33 } 34 } 35 return 0; 36 }