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 }