• C++标准模板库(STL)之 vector


    一、vector的常见用法详解

    1.vector的定义

    头文件:#include<vector>

    单独定义一个vector:

    vector<typename> name;

    注:如果typename也是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为一些使用C++11之前标准的编译器会把它视为移位操作,导致编译错误。

    如果typename是vector,就是下面的这样定义:

    vector<vector<int> > name;   //>>之间要加空格

    例子:

    vector<int> name;

    vector<double> name;

    vector<char> name;

    vector<node> name;

    定义vector二维数组:

    vector<typename> Arrayname[arraySize];

    例如:

    vector<int> vi[100];

    这样Arrayname[0]~Arrayname[arraySize-1]中每一个都是一个vector容器。

    2.vector容器内元素的访问

    (1)通过下标访问

    vector[index]  即可访问

    (2)通过迭代器访问

    迭代器(iterator)可以理解为一种类似指针的东西,其定义为:

    vector<typename>::iterator it

    这样it就是一个vector<typename>::iterator 型的变量。

    例子:

    vector<int>::iterator it;

    vector<double>::iterator it;

    这样就定义了迭代器it,并且可以通过*it来访问vector里的元素。

    例如:

    vector<int> vi;
    
    for(int i=1;i<=5;i++){   //循环完毕后vi中元素为1 2 3 4 5
    
      vi.push_back(i);  //push_back(i)  在vi的末尾添加元素i,即依次添加1 2 3 4 5
    
    }

    可以通过类似下标和指针访问数组的方式访问容器内的元素

    #include<stdio.h>
    #include<vector>
    using namespace std;
    int main(){
        vector<int> vi;
        for(int i=0;i<=5;i++){
            vi.push_back(i);
        }
        //vi.begin()为取首元素地址,而it指向这个地址
        vector<int>::iterator it=vi.begin();
        for(int i=0;i<5;i++){
            printf("%d ",*(it+i));//输出vi[i]; 
        }
        return 0;
    } 

    输出结果:1 2 3 4 5

    其中 vi[i]和*(vi.begin()+i)是等价的

    end()函数,end()并不是取vi的尾元素地址,而是取尾元素地址的下一个地址,end()作为迭代器末尾标志,不存储任何元素。

    例如:

        for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){
            printf("%d ",*it);
        }

    3.vector常用函数实例解析

    (1)push_back()

    push_back(x)就是在vector后面添加一个元素x,时间复杂度O(1)。

    (2)pop_back()

    pop_back() 用以删除vector的尾元素,时间复杂度为O(1)。

    (3)size()

    size()用来获得vector中元素的个数,时间复杂度O(1)。

    (4)clear()

    clear()用来清空vector中的所有元素,时间复杂度O(N)。

    注意:因为相应内存区域的内容并没有被覆盖,这样就保持着原来的值,直到这部分内存被重新写入时才会改变。

    (5)insert()

    insert(it,x)用来向vector的任意迭代器it处插入元素x,时间复杂度O(N)。

    (6)erase()

    erase()有两种用法:删除单个元素、删除一个区间内的所有元素,时间复杂度O(N)。

    4.vector的常见用途

    (1)存储数据

    (2)用邻接表存储图

  • 相关阅读:
    将msm文件加到安装项目中去
    css定义滚动条的样式详解
    网页编辑中常用操作的一些问题
    WCF身份验证及无法找到 X.509 证书的终极解决方案
    关于ie8 的margintop 问题
    c#实现随鼠标移动窗体
    符号列表
    拓朴分析之面中检查有几个点(查只有一个点 作为标注)
    新公司上班啦!
    The application is not licensed to perform this operation
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14315465.html
Copyright © 2020-2023  润新知