zoukankan      html  css  js  c++  java
  • 备忘: C++中的 vector 容器

    在C++ 中使用 vector:容器或叫向量。对用来管理不定长度的数据集或经常变化的数据组,很方便。可以简单的理解他是一种数据组,一种数据类型的集合。

        vector是同一种类型的对象的集合它相当于一个动态的数组, 当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

      使用vector首先要在程序开头处加上头文件,并使用其命名

    #include <vector> 
    using std::vector;

    vector的声明与初始化:

    vector <类型> <名称>

     vector<int> IntVector; 

    vector<T>  v1;

    vector保存类型为T的对象。默认构造函数v1为空。

    vector<T> v2(v1);

    v2是v1的一个副本。

    vector<T> v3(n, i);

    v3包含n个值为i的元素。

    vector<T> v4(n);

    v4含有值初始化的元素的n个副本。

     

    vector的操作:

    v.empty()

    如果v为空,则返回true,否则返回false

    v.size()

    返回v中元素的个数。

    v.push_back(t)

    在v的末尾增加一个值为t的元素。

    v[n]

    返回v中位置为n的元素。

    v1 = v2

    把v1的元素替换为v2中元素的副本。

    v1 == v2

    如果v1与v2相等,则返回true

    !=, <, <=, >, >=

    保持这些操作符惯有的含义。

     

    常用函数:

    1.push_back 在数组的最后添加一个数据
    2.pop_back 去掉数组的最后一个数据
    3.at 得到编号位置的数据
    4.begin 得到数组头的指针
    5.end 得到数组的最后一个单元+1的指针
    6.front 得到数组头的引用
    7.back 得到数组的最后一个单元的引用
    8.max_size 得到vector最大可以是多大
    9.capacity 当前vector分配的大小
    10.size 当前使用数据的大小
    11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
    12.reserve 改变当前vecotr所分配空间的大小
    13.erase 删除指针指向的数据项
    14.clear 清空当前的vector
    15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
    16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
    17.empty 判断vector是否为空
    18.swap 与另一个vector交换数据
    19. insert 插入一条数据

    vector的使用方法

    1.数组习惯用法

    可以像使用数组一样使用vector

    可以通过ivec[索引号] 来访问元素

    int n[10]
    vector< int > ivec( 10 );  // 类似数组定义int ia[ 10 ];
    vector< int > ivec2( 10, 0 ); // 设置初始值为 0
     
    ivec[0] = n[0]; //符值
    for (int i=0; i<10; i++)
      cout << ivec[i] << endl;

    2.STL使用法

    通过迭代器iterator来访问与操作元素。 迭代器iterator是标准库中的类,它具有指针的功能。

    通过迭代器来访问使用vector,更方便,更灵活。

    迭代器声明方法:

    vector <类型> :: iterator <名称>

     vector<int>:: iterator myIterator; 

    例:

     vector<string> svec(10, "null");
     vector<string>::iterator n;
     n = svec.begin(); // 取初始对象
     n = svec.begin() + 2; //移动到指定的对象
     *n = "TEXT"; //符值
     // 下在的语句重新定义了一个迭代器 i, 并遍历 i 的值。
     for (vector<string>::iterator i = svec.begin(); i != svec.end(); i++){
         cout << *i << endl;
        }

    也可以先定义一个空的 vector 用 push_back, insert, resize等来添加或指定大小。像使用动态数组一样使用他。

    用迭代器作为指针的一种使用方式:

       vector<int *> svec(10);
       vector<int *>::iterator n;
      
       int N[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
       int *p;
      
       int m = 0;
       for (vector<int *>::iterator i = svec.begin(); i != svec.end(); i++){
           p = &N[m]; //把指针符给p
           *i = p; //再把指针给 i 或 *i=&N[m]
           m++;
           cout << *i << '=' << *p << '/' << **i << endl;
       }
      
       n = svec.begin() + 2; // 取第三个迭代器 0-1-2
       **n = 100; // 给迭代器所指向的数据符值。相当于 N[2]=100; 
                  // 注意:*n 是保存的地址,**n才是指向N[2]的数据值空间
       for (m = 0; m < 10;m++)
           cout << m << '=' << N[m] << endl;
  • 相关阅读:
    敏捷开发来源
    android学习笔记(3)Button控件的学习
    JavaScript你所不知道的困惑(2)
    JavaScript你所不知道的困惑(1)
    Android菜鸟的成长笔记(27)——SurfaceView的使用
    小强的HTML5移动开发之路(53)——jQueryMobile页面间参数传递
    小强的HTML5移动开发之路(52)——jquerymobile中的触控交互
    小强的HTML5移动开发之路(51)——jquerymobile中改善页面访问速度
    小强的HTML5移动开发之路(50)——jquerymobile页面初始化过程
    Thinking in UML 学习笔记(四)——UML核心视图之活动图
  • 原文地址:https://www.cnblogs.com/iSixth/p/4179018.html
Copyright © 2011-2022 走看看