zoukankan      html  css  js  c++  java
  • vector详讲(一)

    <vector>头文件里带有两个类型参数的类模板,第一个参数是需要指定的数据类型,第二个是分配器(allocator)类型

    template<class T, class Allocator = allocator<T>>   class vector;

    用分配器来为元素分配内存和释放内存。需要注意的是vector的运算符operator[] 和方法 at()的区别就是。前者不进行边界检查,而后者进行边界检查,超出边界会抛出out_of_range()的异常;

    #include <iostream>
    #include <vector>
    #include <limits>
    int main()
    {
        std::vector<double> vectorDouble;
        //int max = -std::numeric_limits<double>::infinity();
        //std::cout << "max : " << max << std::endl;      //2^31 = 2147483648;max = -2147483648;
        for(int i = 0;true;++i)
        {
            double temp = 0.0;
            std::cout << "enter scord(-1 is stop )" << i << ": ";
            std::cin >> temp;
            if(temp == -1)
            {
                break;
            }
            vectorDouble.push_back(temp);
    //        if(temp > max)
    //        {
    //            max = temp;
    //        }
    
        }
    
        //max /= 100.0;
        for(auto &element : vectorDouble)
        {
            //element = element / max;
            std::cout << element << " ";
        }
        return 0;
    }

    这里的numeric_limits<>模板详见  https://www.cnblogs.com/boost/p/10369272.html

    vector的复制和赋值

    vector储存对象的副本,其析构函数调用每个对象的析构函数,vector的赋值运算符和复制构造函数对所有的vector元素进行深度复制,处于效率的考虑,因该向函数和方法传递vector的引用或则是const引用。除了普通的复制和赋值外,vector还提供了assign()方法。这个方法可以删除所有的现存的元素,并且添加任意数目的元素;比如:

      

    #include <iostream>
    #include <vector>
    #include <limits>
    int main()
    {
        std::vector<int> oneVector({1,2,3,4,5});
        for(auto temp : oneVector)
        {
            std::cout << temp << " ";
        }
        std::cout << std::endl;
    
        oneVector.assign(5,10);
        for(auto temp : oneVector)
        {
            std::cout << temp << " ";
        }
        return 0;
    }

    结果是:

    1 2 3 4 5
    10 10 10 10 10

    这里用到了初始化列表(<initializer_list>),

    vector还有函数swap()方法,这函数交换两个vector对象,前提是这两个vector的类型是一样的。

    #include <iostream>
    #include <vector>
    #include <limits>
    int main()
    {
        std::vector<int> oneVector({1,2,3,4,5});
        //std::vector<int> twoVector({'a','b','c','d','e'});
        std::vector<int> twoVector(5,2);
        std::cout << "oneVector : ";
        for(auto temp : oneVector)
        {
            std::cout << temp << " ";
        }
        std::cout << std::endl;
        std::cout << "twoVector : ";
        for(auto temp : twoVector)
        {
            std::cout << temp << " ";
        }
        std::cout << std::endl;
        std::cout << "swap after : " << std::endl;
        oneVector.swap(twoVector);
        std::cout << "oneVector : ";
        for(auto temp : oneVector)
        {
            std::cout << temp << " ";
        }
        std::cout << std::endl;
        std::cout << "twoVector : ";
        for(auto temp : twoVector)
        {
            std::cout << temp << " ";
        }
        std::cout << std::endl;
    
        return 0;
    }

    结果是:

    oneVector : 1 2 3 4 5
    twoVector : 2 2 2 2 2
    swap after :
    oneVector : 2 2 2 2 2
    twoVector : 1 2 3 4 5

    vector的比较:vector模板类提供了六种比较运算符:== , != , > , < , >= , <= 

    如果是两个vector元素的个数相同并且元素也相同,则这两个vector对象就相同,在比较的过程中采用的是字典顺序,即:当在0~i-1的时候,两个vector都是相等的,但是在第i个元素不相等,当vectorOne[i] < vectorTwo[i]的时候,则vectorOne < vectorTwo;

    #include <iostream>
    #include <vector>
    #include <limits>
    int main()
    {
        std::vector<int> oneVector({1,2,3,4,5});
        std::vector<int> thridVector(5,2);
        std::vector<int> twoVector(5,2);
        if(twoVector == thridVector)
        {
            std::cout << "twoVector == thridVector" << std::endl;
        }else
        {
            std::cout << "twoVector != thridVector"<< std::endl;
        }
    
        if(oneVector == twoVector)
        {
            std::cout << "twoVector == oneVector" << std::endl;
        }else
        {
            std::cout << "twoVector != oneVector" << std::endl;
        }
    
        return 0;
    }

    结果是:

    twoVector == thridVector
    twoVector != oneVector

  • 相关阅读:
    mydumper/myloader使用详解
    myloader原理介绍
    mydumper原理介绍
    mydumper安装
    sysbench压测mysql基本步骤
    sysbench 0.4.12安装
    MySQL5.7多源复制
    PXC5.7集群部署
    destoon8.0生成输出热门搜索sitemap地图方法
    百度+搜狗快排程序核心代码分享
  • 原文地址:https://www.cnblogs.com/boost/p/10369360.html
Copyright © 2011-2022 走看看