zoukankan      html  css  js  c++  java
  • 读书笔记:C++ Primer系列(6)—— 标准库类型之vector

     题记:

      继上一篇标准库类型string后,本篇继续讲述标准库类型中的容器(vector)。

    6.1 标准库vector类型

    • vector称为容器,是同一种类型的对象的集合,每个对象都有一个对应的整数索引值
    • 一个容器中的所有对象都必须是同一种类型
    • 使用vector之前,必须包含相应的头文件,即:

                          #include <vector>

                          using std::vector;

    • vector是一个类模版(class template)——使用模版可以编写一个类定义或函数定义,而用于多个不同的数据类型,但vector不是一种数据类型
    • 声明从类模版产生的某种类型的对象,需要提供附加信息,信息的种类取决于模版,如:

                          vector<int>  ivec;  //定义ivec为含有若干int类型对象的vector

    • 由于vector类型的每一种都指定了其保存元素的类型,因此像vector<int>,vector<string>等都是数据类型

    6.2 vector对象的定义和初始化

    6.2.1 vector对象的定义和初始化

                          表6-1  vector对象的几种初始化方式

    • 对于vector保存内置类型的元素,标准库将用0值初始化所有的成员

                     如:vector<int> ivec(10);  //这里10个整型的成员均初始化为0

                           vector<string> svec(10); //这里的10个元素均为空字符串

    • 如果vector保存的是类类型,标准库将调用类的默认构造函数来初始化每一个数据成员;
    • 如果类中定义了构造函数,但没有提供默认构造函数,初始化这种类型的vector对象时,除了提供vector对象所含的元素个数外,还必须指定每个元素的初始值

                    如:vector<int> ivec1(10,1);//这里10个整型的成员均初始化为1

                          vector<int> ivec2(ivec1); //这里的ivec2是ivec1的一个副本

                          vector<string> ivec3(ivec1); //错误,两个vector对象的类型必须一致

                          vector<string> ivec4(10, "hello"); //ivec4对象包含10个元素,均为“hello”字符串

    注:vector对象的一个重要属性:可以在运行时高效地添加元素。

          因此虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。(这一点比较重要)

    6.2.2 vector对象的操作

                             表6-2 vector对象的几种操作

    • vector对象的size和empty操作与string类型的相关操作类似,函数返回相应的vector类定义的size_type的值

    注:使用size_type类型时,必须指出该类型是在哪里定义的。vector类型总是包括vector的元素类型。如下:

                                     vector<int>::size_type;  //正确

                                     vector::size_type;  //错误

    程序清单—01

        vector<int> vec;
        for(vector<int>::size_type i=0;i!= 10;i++)
        {
            vec[i]=i;
            cout<<vec[i]<<endl;
        }

    上述程序试图向vec中插入0到9的10个元素,但是运行出错,原因在于:vector对象的下标只能用于获取已存在的元素,而程序清单中vec对象默认为空。

    程序清单—02

    #include <iostream>  
    #include <vector> //标准库string类型头文件  
     
    using std::vector; //string类型的using声明  
    using std::cin;  
    using std::cout;  
    using std::endl;  
    
    int main()
    {    
        cout<<"方法1:这里初始化一个包含10个0的vector对象"<<endl;
        vector<int> vec(10,0);
        for(vector<int>::size_type i=0;i!= 10;i++)
        {
            vec[i]=i;
            cout<<vec[i]<<endl;
        }
        if(vec.empty())
        {
            cout<<"容器vec是空的!"<<endl;
        }
    
    
        //方法2:使用push_back()函数
        cout<<"方法2:使用push_back()函数"<<endl;
        vector<int> vec_new;
        for(vector<int>::size_type i=0;i!= 10;i++)
        {
            vec_new.push_back(i);
            cout<<vec_new[i]<<endl;
        }
    
        if(vec_new.empty())
        {
            cout<<"容器vec_new是空的!"<<endl;
        }
      
        system("pause");
        return 0;
    }

    程序结果:

                

     

     

     

     

     

  • 相关阅读:
    Alook搭配JS脚本完美食用
    分享小米刷机教程/线刷(工具支持小米华为一加)
    iPhone 无需越狱修改wx+zfb+qq步数
    如果SELECT语句中没有结果,则使用CASE返回字符串
    MSSQLServer 正在显示"正在还原...."
    C# 小技巧
    C#使用Select方法快速获取List集合集合中某个属性的所有值集合
    C#中使用Sum方法对List集合进行求和操作
    sql日期函数
    sql只根据某一字段去重,并保留其他字段
  • 原文地址:https://www.cnblogs.com/kkdd-2013/p/3486273.html
Copyright © 2011-2022 走看看