优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++ 模板类vector的使用「一」(c++中模板类的意义)

nanyue 2024-08-19 19:13:36 技术文章 9 ℃
  • 我们上篇文章主要讨论了std::string类的使用, 这篇文章我想跟大家一起学习一下std::vector模板类的使用。

想使用vector我们需要包含<vector>头文件, 与string类一样, vector模板类也是在std命名空间内, 我们先看一下vector的几种初始化方法, 代码如下

    //v是一个空vector, 它的成员必须为int类型,执行默认初始化
    std::vector<int> v;
    
    //v1是一个包含10个int类型的vector, int类型的值是默认值是0, 所以v1包含10个0
    std::vector<int> v1(10);
    
    //v2包含10个int元素, 每个元素的值都是14
    std::vector<int> v2(10, 14);
    
    //V3执行(list initialize)列表初始化构造方法,包含1,2,3这三个元素
    std::vector<int> v3 = { 1, 2, 3 };
    
    //v4中包含了v3中所有元素的副本
    std::vector<int> v4(v3);
    
    //这种构造方法与v5(v4)完全等效的
    std::vector<int> v5 = v4;
    
    //这种方法是错误的, 因为指定了模板类的T为std::string, 所以不能使用int类型去初始化v6
    std::vector<std::string> v6 = { 12 };

以上代码展示了vector模板类的几种常见的初始化方法, 具体说明建代码注释. 其中要注意的是最后一种用法, 要注意是错误的。因为vector是个模板类:vector<T>, 当指定类型的时候,要注意其中的元素要与指定的类型相匹配, 否则会编译不通过

但是很多时候我们虽然知道vector中有多少元素, 但是当元素个数很多的时候,利用{} 这种列表初始化就不太合适了, 那么我们怎么向vector中添加元素呢

  • 向vector中添加[0-9)的平方作为元素, 并把他们打印出来
    std::vector<int> vecPower;
    for (int i = 0; i < 10; i++)
        vecPower.push_back(i * i);
        
    for (auto i : vecPower)
        std::cout << i << std::endl;
    

打印输出的结果如下

    0
    1
    4
    9
    16
    25
    36
    49
    64
    81

上面我们可以看到向vector里面添加函数,使用的是push_back方法, 那么vector具有哪些操作让我们可以获取vector的一些性质呢, 在上面的额代码基础上我们添加以下代码

    std::cout << "vecPower的大小:\t" << vecPower.size() << std::endl;
    std::cout << "vecPower是否为空:\t" << vecPower.empty() << std::endl;
    std::cout << "vecPower的第3个元素为:\t" << vecPower[3] << std::endl;

结果如下

    vecPower的大小: 100
    vecPower是否为空:       0
    vecPower的第3个元素为:  9

从上面我们可以发现, vector也可以通过[]下标索引器来访问其中的元素, 同std::string一样,要注意索引的大小要小于 vector.size(), 否则会在运行时出错,但是需要特别注意的是, 不能使用索引器添加元素, 下面的代码是错误的

    std::vector<int> vec
    //这种用法是错误的
    vec[0] = 22

同std::string类似, vector也提供了 ==, !=, <, <=, >, >= 等操作, 具体的用法如下

    //仅当v1与v2元素数量相同, 且对应位置的元素值都相同的时候 v1才等于v2
    v1 == v2  
    
    //这种比较是以字典的方式进行比较,这个小伙伴们可以自行下去编写代码测试一下他们的用法
    <, <=, >, >=  

有一点要重点强调的是, 只有vector<T>的类型T支持以上的运算符操作,我们才可以对vector<T>进行上述操作, 否则不能比较两个vector<T>对象

  • 我们总结一下, 这篇文章主要讲述了vector对象的初始化, 以及一些常用的vector操作方法, 我们下篇文章将看一下另一种访问vector元素的方法, 同时也是C++中很重要的一种访问元素方法--迭代器,明天见

Tags:

最近发表
标签列表