vector(未完)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector(未完)相关的知识,希望对你有一定的参考价值。

知识储备

阅读这篇文章前,你需要知道:

  • 什么是STL
  • 什么是iterator

    关联知识

  • STL其他模板

    相关文章

  • vector

    概念理解

    vector,中文名向量,其实与向量半毛钱关系没有,可以理解为一个不定长数组,即你用多少空间它开多少空间(近似),用于不知道这个数组到底要存多少个元素,但都开满会MLE的情况,或封装一些函数时。

    使用条件

    //头文件
    #include<vector>
    //命名空间
    using namespace std;
    or
    using std::vector;
    //传参
    vector<type> v;
    //type 为v这个vector所存储的元素的类型

    原理

    初始是一个最大容量为0的数组,当加入的元素多于其最大容量时,它会在另一个地方开一个两倍最大容量的数组,再将原数组中的元素复制进去,由于有复制操作,所以当vector存的东西极其大时,vector使很慢的建议使用类函数resize

    用法注意

  1. 并不是真正的你装一个东西,它开一个空间。
  2. 在数组下标越过其最大空间时会秒RE。
  3. 有一些操作会十分的慢,下文中将会提醒

    类函数

    构造函数

    1.

    vector<type> v;//此时v为一个空的数组且最大容量为0;
    int main()
    {
    vector<int> v;
    printf("size: %d\\nmax_size: %d\\nnumber: ",v.size(),v.capacity());
    for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
    }

    2.

    vector<type> v(a,b)//a,b为两个同类型的指针,且b>=a,将区间[a,b)的值给v,v的最大容量为b-a;
    int main()
    {
    int a[]={0,1,2,3,4,5,6,7,8,9,10};
    vector<int> v1(a,a+5);
    vector<int> v2(a+5,a+11);
    puts("v1:");
    printf("size: %d\\nmax_size: %d\\nnumber: ",v1.size(),v1.capacity());
    for(vector<int>::iterator it=v1.begin();it!=v1.end();++it) printf("%d ",*it);
    puts("\\n");
    puts("v2:");
    printf("size: %d\\nmax_size: %d\\nnumber: ",v2.size(),v2.capacity());
    for(vector<int>::iterator it=v2.begin();it!=v2.end();++it) printf("%d ",*it);
    }

    3.

    vector<type> v(a,b);//在v中插入a个b,v的最大容量为a;
    int main()
    {
    vector<int> v(10,100);
    printf("size: %d\\nmax_size: %d\\nnumber: ",v.size(),v.capacity());
    for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
    }

    4.

    vector<type> v(temp_v)//temp_v为另一个与v类型相同的vector,v的最大容量为temp_v中的元素个数。
    #include<cstdio>
    #include<vector>
    using namespace std;
    int main()
    {
    vector<int> temp_v(10,100);
    temp_v.push_back(5);
    vector<int> v(temp_v);
    printf("size: %d\\nmax_size: %d\\nnumber: ",v.size(),v.capacity());
    for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
    }

    operator =

    类似构造函数4。

    vector<int> v;
    v=temp_v;
    //将temp_v中的元素全部复制到v中,temp_v与v必须同类型;
    #include<cstdio>
    #include<vector>
    using namespace std;
    int main()
    {
    vector<int> temp_v(10,100);
    temp_v.push_back(5);
    vector<int> v;
    v=temp_v;
    printf("size: %d\\nmax_size: %d\\nnumber: ",v.size(),v.capacity());
    for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
    }

    interator

    begin

    得到vector的头指针,相当于普通数组的数组名。

    int main()
    {
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    printf("%d",*v.begin());
    }

    end

    得到vector的尾指针,这是一个指向空的指针,vector的最后一个元素的地址为v.end()-1。

    int main()
    {
    vector<int> v;
    v.push_back(6);
    v.push_back(7);
    printf("%d\\n",v.end());
    printf("%d",*(v.end()-1));
    }

    rbegin

    得到vector最后一个元素的指针。

    int main()
    {
    vector<int> v;
    v.push_back(6);
    v.push_back(7);
    printf("%d",*v.rbegin());
    }

    push_back

    用于在这个vector的尾部插入一个元素。

    vector<int> v;
    v.push_back

以上是关于vector(未完)的主要内容,如果未能解决你的问题,请参考以下文章

未完待续

小数位数(未完)

引用向量的部分片段?

这个代码片段究竟做了啥?

北京集训②DAY2 Mroning -未完

以下代码片段的时间复杂度是多少?