• c++ vector 的使用


      vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.

         用法:   

           1. 首先在程序开头处加上#include<vector>以包含所需要的类文件vector

               还有vector 是属于namespace std;

      2.函数调用 : 比如 vector <int> c

      (1)c.at(idx)   传回索引idx所指的数据,如果idx越界,抛出out_of_range。

      (2)c.front()   传回第一个数据。

      (3)c.back()   传回最后一个数据,不检查这个数据是否存在

      (4)c.clear()      移除容器中所有数据。

      (5)c.empty()    判断容器是否为空。

      (6)c.erase(pos)  删除pos位置的数据,传回下一个数据的位置。
          c.erase(beg,end)删除[beg,end)区间的数据,传回下一个数据的位置。

      (7)c.capacity()  返回容器中数据个数。

          c.size()返回容器中实际数据的个数。

      (8)c.pop_back() 删除最后一个数据。
          c.push_back(elem)在尾部加入一个数据。

      (9)c.insert(pos,elem)在pos位置插入一个elem拷贝,传回新数据位置。
          c.insert(pos,n,elem)在pos位置插入n个elem数据。无返回值。
          c.insert(pos,beg,end)在pos位置插入在[beg,end)区间的数据。无返回值。

      (10)c.resize(num)重新指定队列的长度。
            c.reserve(num)保留适当的容量。
        

      3.访问vector中的数据

    使用两种方法来访问vector。

    1、   vector::at()

    2、   vector::operator[]

    operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。由于operator[]容易造成一些错误,所有我们很少用它,下面进行验证一下:

     1 分析下面的代码:
     2 
     3 vector<int> v;
     4 
     5 v.reserve(10);
     6 
     7 for(int i=0; i<7; i++)
     8     v.push_back(i);
     9 
    10 
    11 try
    12 {
    13  int iVal1 = v[7];  // not bounds checked - will not throw
    14 
    15  int iVal2 = v.at(7); // bounds checked - will throw if out of range
    16 }
    17 
    18 catch(const exception& e)
    19 {
    20  cout << e.what();
    21 }


    我们使用reserve()分配了10个int型的空间,但并不没有初始化。

    你可以在这个代码中尝试不同条件,观察它的结果,但是无论何时使用at(),都是正确的。


      4.迭代器的使用
        

    vector<int>::iterator it; 
    
    for(it=vec.begin();it!=vec.end();it++) 
        cout<<*it<<endl

      5.算法 

      (1) 使用reverse将元素翻转:需要头文件#include<algorithm>

            reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,

         一般后一个都不包含.)

      (2)使用sort排序:需要头文件#include<algorithm>,

        sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

        可以通过重写排序比较函数按照降序比较,如下:

        定义排序比较函数:

        bool Comp(const int &a,const int &b)
        {
            return a>b;
        }
        调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

  • 相关阅读:
    智能语音
    设置View大小随屏幕自动放大
    程序经常在第一次启动时崩溃
    苹果员工的休假时间记录
    未解决知识点:edgesForExtendedLayout
    关于iOS的autolayout中导航栏的疑问
    iOS比较好用的抽屉第三方:JASidePanels
    versions使用心得
    使用Xcode7上传app的error整理:ERROR ITMS-90535,ERROR ITMS-90529,ERROR ITMS-90049
    subversions上传新文件Xcode中不显示
  • 原文地址:https://www.cnblogs.com/chencesc/p/4287420.html
Copyright © 2020-2023  润新知