zoukankan      html  css  js  c++  java
  • STL vector简单用法

    初涉c++,此为《算法笔记》中的内容,有待个人理解完善。

    vector

    vector翻译为向量,叫做“变长数组”更容易理解。

    头文件:#include<vector>

    vector定义

    vector<typename> name;
    

    相当于name[SIZE],只不过其长度可以根据需要变化,比较节省时间。

    注意:如果typename也是一个stl容器,定义时要在>>之间加上空格。

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

    定义vector数组的方法:

    vector<typename> Arrayname[arraySize];
    vector<int> vi[100];//Arrayname[0]~Arrayname[99]中每一个都是一个vector容器。
    //与上一种定义的区别是,这种定义,确定了一维的大小
    

    vector容器内元素的访问

    vector一般提供两种访问:通过下标访问或通过迭代器访问。

    (1)通过下标访问(和访问数组一样)

    (2)通过迭代器访问

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

    vector<typename>::iterator it;//这样it就是vector<typename>::iterator型的变量
    vector<int>::iterator it;
    vector<double>::iterator it1;
    //这样就得到了迭代器it,并且可以通过*it来访问vector里的元素
    
    
    vector<int> arr;
    for(int=0;i<5;i++){
        arr.push_back(i);//push_back(i)在arr的末尾添加新元素i,即一次添加0 1 2 3 4 5
    }
    
    

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

    #include<stdio.h>
    #include<vector>
    using namespace std;
    int main(){
        vector<int> arr;
        vector<int> arr;
    	for(int=0;i<5;i++){//添加元素
        	arr.push_back(i);
    	}
        //arr.begin()为取出arr的首元素地址,儿it指向这个地址
        vector<int>::iterator it=vi.begin();
        for(int i=0;i<5;i++){
            printf("%d",*(it+i));
        }//打印元素
        return 0;
    }
    //从这里看,arr[i]和*(vi.begin()+i)是等价的
    

    arr.end()不是最后一个元素的地址,而是指向最后一个元素的下一个元素,

    只作为迭代器末尾标志,不储存任何元素。

    美国人思维比较习惯左闭右开。

    迭代器可以进行自增自减操作。

    在常用的STL容器中,只有在vector和string中,才允许使用vi.begin()+i这种写法。

    vector常用函数实例解析

    (1)push_back():

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

    (2)pop_back()

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

    3) size()

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

    size()返回的是unsigned类型,不过用%d不会有问题。

    (4)clear()

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

    insert()

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

    erase()

    1删除单个元素

    erase(it)即删除迭代器为it处的元素。

    2删除一个区间内的所有元素

    erase(first,last)即删除[first,last]内的所有元素。

    #vector的常见用途

    存储数据

    vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间。

    有些场合要求把某些数据输出在一行,数据中间用空格分开,囿于输出数据的个数是确定的,可以先用vector记录所有数据,然后一次性输出。

    用邻接表储存图

    使用vector实现邻接表可以让那个一些对指针不熟悉的读者有比较方便的写法。

    ---恢复内容结束---

  • 相关阅读:
    正则表达式
    简单的js拖动
    asp.net网站安全常见问题与防范
    Jquery操作select、checkbox、radio详细讲解
    利用ListView自定义高效分页
    文件上传
    Sql 分区问题
    封装读取配置文件类
    TypeConverter学习
    构造AJAX参数, 表单元素JSON相互转换
  • 原文地址:https://www.cnblogs.com/hebust/p/9390547.html
Copyright © 2011-2022 走看看