zoukankan      html  css  js  c++  java
  • 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),这样就降序排序。

  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/chencesc/p/4287420.html
Copyright © 2011-2022 走看看