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 }