1 #include <iostream>//包含cin cout 2 #include <vector>//包含向量 vector 3 #include <numeric>//包含算法 accumulate 4 #include <algorithm>//包括stl的很多算法 5 #include <cstdlib> 6 using namespace std; 7 bool cmp(const int &a,const int &b)//这里参数类型要是const型的 8 { 9 if(a!=b)//这里判断的意思就是说 如果a>b 结果就为真 否则就为假 10 return a>b; 11 else 12 return a>b; 13 } 14 int main() 15 { 16 vector<int> v;//定义一个向量v; 17 int i; 18 for(i=0;i<10;i++) 19 { 20 v.push_back(i);//尾部元素扩张方式赋值 21 } 22 vector<int>::iterator it=v.begin(); 23 //定义了一个指向vector<int>类型的 迭代器 begin()方法返回首地址; 24 v.insert(v.begin()+2,10); 25 //把迭代器所指的位置的元素 以及之后的元素 向后移动 一个单位 并将第一个参数指向的位置赋值为第二个元素 26 sort(v.begin(),v.end()); 27 28 for(;it!=v.end();it++)//使用iterator迭代器顺序遍历所有的元素 29 { 30 cout<<*it<<" ";//记住it用 == 与!=运算较好 31 //it可以进行 自增运算 end()方法返回的是 vector的最后一个元素的下一个迭代器; 32 //it可以与* 连用 33 } 34 cout<<endl; 35 //sort(v.begin(),v.end(),cmp);//这里sort函数很像qsort()函数呀 36 cout<<accumulate(v.begin(),v.end(),0)<<endl;
37 //这个地方统计指定区间元素的和 0是什么意思呢 我也不知道 38 system("pause"); 39 return 0; 40 }
由一段代码说开去——vector
首先vector属于顺序容器,和c语言里面的数组 功能和使用方法类似;
1.创建
(1) vector是一个模版类 这样创建的时候 就需要指定类型了;类型可以是基本类型 也可以是用户自定义的结构体 类等
举例: vector<int> v;就创建了一个元素类型是int的 “向量” v(这里书上叫它向量 不明白为什么)
(2)这里构造函数呢,还有几种重载 0参数 1参数 和2参数;
0参数:就是定义一个自定义长度的vector;如上例子
1个参数:指定vector的其实元素个数,后面还可以根据元素的加入 自动调整大小;eg:vector<int> v(10);
2个参数:vector<char> v(10,'c')构建一个含有10个'c'的向量v
2.操作:包括基于vector的尾部扩张 随机访问 排序和基于元素位置的插入,删除,
关于位置的操作传的参数都是迭代器变量 (迭代器类型挺多,但不知道分类做什么 一刀切多好)
其中 vector本身自己就有两个个方法begin()和end()是用来返回 vector的首元素和 尾元素的下一个位置的迭代器
(1)尾部元素扩张:push_back();函数也是vector()的成员方法;接受一个参数 作为添加到末尾的元素;
(2)随机访问:[]和* 两个函数可以使vector在随机访问的场合取代数组;两者分别是下标法和类指针法;
*后面要跟一个类型一致的迭代器变量 遍历呢可以用i++,也可以使用 迭代器自增
(3)排序:sort()有两个版本的重载,这个函数是模版stl函数 不是成员方法 前两个参数传递需要排序的区间(用迭代器标记),如果有第三个参数 那么它就是(比较函数的)函数指针
否则默认按照升序排列
(4)插入函数:insert();是成员方法,接受两个参数 第一个传递插入的位置,第二个传递插入的元素值
(5)删除函数:erase();也是成员函数,可以删除一个点,也可以删除一个区间,所以有两个版本,一个接受一个迭代器做参数 另一个接受一个迭代器区间
另外,还有求向量大小的成员函数 size(),判空的成员方法empty(), 逆置的stl函数revese();
小结:vector为了功能和数组类似,其包括的成员方法有push_back(),begin(),end(),insert(),erase(),clear()size(),empty();还有操作符函数* 和[],
非成员方法接受的参数大多有迭代器。