zoukankan      html  css  js  c++  java
  • 由一段代码说开去——vector

     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();还有操作符函数* 和[],

    非成员方法接受的参数大多有迭代器。

  • 相关阅读:
    常用Java工具类
    Enum应用
    mybatis xml <if>判断字符串相等
    sqlserver插入图片数据
    [转载]Jquery Chosen 插件动态生成option或重新绑定
    工作问题整理-- sqlserver 新增参数限制,maven pom邮件发送
    【转载】redis.windows.conf 参数说明
    oracle11g更改字符集
    oracle基础知识小结
    [转载]SQL Server 数据库定时自动备份
  • 原文地址:https://www.cnblogs.com/dragonfive/p/2908641.html
Copyright © 2011-2022 走看看