vector基础

  1 //STL基础
  2 //容器
  3 //vector
  4 
  5 #include "iostream"
  6 #include "cstdio"
  7 #include "vector"//向量
  8 #include "iterator"//迭代器
  9 #include "numeric"//accunulate()求和算法需要
 10 #include "algorithm"//reverse()
 11 using namespace std;
 12 
 13 bool cmp(const int a,const int b)
 14 {
 15     return a>b;//或a-b
 16 }
 17 
 18 int main()
 19 {
 20     //创建vector对象
 21     vector<int> v1;//为空
 22     vector<int>v2(10);//初始长度为10,默认为10个0
 23     vector<double>v3(10,8.6);//初始化前10个数为8.6
 24     vector<double>v4(v3);//v4是v3的一个副本
 25 
 26     //尾部添加元素
 27     v3.push_back(8.6);
 28 
 29 
 30     //获取向量长度的方法
 31     int size03=v3.size();
 32     cout<<size03<<endl;
 33 
 34 
 35     //下标访问法
 36     for(int i=0;i<size03;i++){
 37         cout<<v3[i]<<" ";
 38     }
 39     cout<<endl;
 40     //迭代器访问法
 41     vector<double>::iterator it;//定义一迭代器
 42     for(it=v3.begin();it!=v3.end();it++){//v3.begin()为v3这个向量第一个元素的地址,
 43                                         // v3.end()为最后一个元素的后一个地址
 44         cout<<(*it)<<" ";               //注意.begin()为向量获取首元素地址的方法,括号不可忘
 45     }
 46     cout<<endl;
 47 
 48 
 49     //求和算法,accumulate() 头文件 #include "algorithm"返回值为整型,前两个参数为指针(前闭后开区间),
 50     //第三个参数a,为在区间元素和的基础上+a,不可省
 51     int sum02=accumulate(v2.begin(),v2.end(),42);
 52     cout<<sum02<<endl;
 53 
 54 
 55     //vector元素的插入
 56     v3.insert(v3.begin(),8);//在第0个元素前插入8,8成为第0个元素
 57     v3.insert(v3.begin()+2,1);//在第2个元素前插入1,1成为第2个元素
 58     v3.insert(v3.end(),8);//在向量末尾追加8
 59     v3.insert(v3.end()-1,99);//在第1个元素前插入99,99成为第2个元素
 60    //注意这种会出错,内存越界 v3.insert(v3.end()+1,99);
 61 
 62 
 63     //vector元素的删除
 64     v3.erase(v3.begin()+2);//s删除下表为2  即第三个元素
 65     v3.erase(v3.begin()+3,v3.begin()+5);//删除一段  删除2个(下标为3和4),(参数前闭后开)
 66 
 67     v3.clear();//清空向量,长度为0
 68 
 69 
 70     //vector元素反向排序
 71     //reverse()反向排列算法 头文件#include "algorithm"
 72     //可使向量中某段迭代器区间反向排列
 73     vector<int>v;
 74     reverse(v.begin(),v.end());
 75 
 76 
 77     //sort()算法,对vector内元素排序  #include "algorithm"
 78     sort(v.begin(),v.end());//默认升序
 79 
 80     //若要降序
 81     //法一
 82     /*bool cmp(const int a,const int b)
 83     {
 84         return a>b;//或a-b
 85     }*/
 86     sort(v.begin(),v.end(),cmp);
 87     //法二
 88     sort(v.rbegin(),v.rend());
 89     //法三
 90     sort(v.begin(),v.end(),greater<int>());
 91 
 92 
 93     //vector 去重   只去相邻的重的,所以常先排序在操作
 94     //unique()   #include "iostream"
 95     int size=unique(v.begin(),v.end())-v.begin();//因为并不把重复的元素真正删除,
 96                                                 //而是放于后面,返回去重后最后一个元素首地址
 97 
 98 
 99     //vector判断是否为空
100     v.empty();
101 
102 
103 }
View Code

 

posted @ 2016-07-13 17:50  kimsimple  阅读(207)  评论(0编辑  收藏  举报