初识标准库类型vector

    xiaoxiao2021-03-25  54

    vector 是同一种类型的对象的集合,类似于数组,每个对象都有一个对应的整数索引值。

    它和 string 对象一样,系统将负责管理与存储元素相关的内存。

    我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。

     

    使用 vector 之前,必须包含相应的头文件

        #include <vector>

        using std::vector;

    vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如Sales_items 对象)的 vector

    vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型

     

    定义和初始化 vector对象

    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<T> v5{a,b,c...};//v5包含了初始值个数的元素,每个元素被赋予相应的初始值

     

     

    vector 对象的操作

    v.size();//返回 v 中元素的个数。

    v.empty();//如果 v 为空,则返回 true,否则返回 false

    v.push_back(t);//在 v 的末尾增加一个值为 t 的元素。

    v[n];//返回 v 中位置为 n 的元素。

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

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

    !=, <, <=,>, and >=  保持这些操作符惯有的含义。

     

    /*

     * vector 对象的操作

     对象的 size

     *JH 2017-3-13

     */

     

    #include <iostream>

    #include <vector>

    using namespace std;

     

    int main(void)

    {

        vector<int> ivec(10,0); //创建对象初始化值为0,共有10个元素

        cout<<ivec.size()<<endl;

        return 0;

    }

     

    /*

     * vector 对象的操作

     向 vector 添加元素

     * push_back 操作接受一个元素值,并将它作为一个新的元素添加到 vector对象的后面,

     也就是“插入(push)”到 vector 对象的“后面(back)”:*

     *JH 2017-3-13

     */

     

    #include <iostream>

    #include <vector>

    #include <string>

    using namespace std;

     

    int main(void) 

    {

        string word;

        vector<string> text;

     

        while (cin >> word)

            text.push_back(word);

     

        return 0;

    }

     

    /*

     * vector 对象的操作

     * vector 的下标操作

     * ector 的下标操作符接受一个值,并返回 vector 中该对应位置的元素。

     * vector 元素的位置从 0 开始

     *JH 2017-3-13

     */

     

    #include <iostream>

    #include <vector>

    #include <string>

    using namespace std;

     

    int main(void) 

    {

        vector<int> ivec;

        for (int i = 0; i < 10; i++)

            ivec.push_back(i);

        for (vector<int>::size_type x = 0; x != ivec.size(); x++)

            cout << ivec[x] << "\t";

        cout << endl;

     

        return 0;

    }

     

     

    迭代器简介

    除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。

    所有的标准库容器都可以使用迭代器。

    迭代器(iterator) 类型

    每种容器类型都定义了自己的迭代器类型,如 vector:

    vector<int>::iterator iter1;//iter1能读写vector<int>的元素

    string::iterator iter2;//iter2能读写string对象中的字符

    vector<int>::const_iterator iter3;//iter3只能读元素,不能写元素

    string::const_iterator iter4;//iter4只能读字符,不能写字符

     

    begin和end运算符

    begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator;

    vector<int> v;

    const vector<int> cv;

    auto iter1 = v.begin();

    auto iter2 = v.end();

    /*

     迭代器应用的程序示例

     * JH 2017-3-13

     */

     

    #include <iostream>

    #include <vector>

    #include <string>

    using namespace std;

     

    int main(void) 

    {

        vector<int> ivec;

        for (int i = 0; i < 10; i++)

            ivec.push_back(i);

        vector<int>::iterator iter; //定义一个迭代器名为 iter 的变量

        //vector::const_iterator iter; //对 const_iterator 类型解引用时,则可以得到一个指向 const 对象的引用

        for (iter = ivec.begin(); iter != ivec.end(); iter++)

            cout << *iter << "\t";

        cout << endl;

     

        return 0;

    }

    转载请注明原文地址: https://ju.6miu.com/read-38975.html

    最新回复(0)