vector理解一波~~~

Vector;

头文件:

#include<vector>

using namespacestd;

定义:

vector<类型>q;//类同于  "类型 q[];"

vector<类型>q[1010] //类同于  “类型 q[1010][]”

操作:

往vector存入一个个数据

函数名:w. push_back(数据);

#include<iostream>

#include<vector>

using namespace std;

vector<int>w;

int main()

{

    int x;

    for(inti=0;i<7;i++)

    {

       scanf("%d",&x);

       w.push_back(x);//在容器的末端塞入数据。这个容器很高端,你就理解为类似数组的存法。

    }

}

2.我们来更好地理解vector里面的东西;

这里有两个函数:q.begin(),q.end();

从英文名begin,end很好理解肯定是开头和结尾;= =废话。

那么,我们来看看他是什么(数据);

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    printf("begin=%dend=%d\n",w.begin(),w.end());

}

结果:

很糟糕的数据- -那就是内存了。然后end-begin不就是7嘛~~~~~

我们称w.begin(),w.end()为迭代器(T^T好厉害的东西)迭代器是个所谓的复杂的指针【这里不多讲什么是迭代器,自己都不知道(啊,丢人..)】,那分别存了什么值呢?

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    printf("begin=%dend=%d\n",*w.begin(),*w.end());

}

结果:

我们很好理解,w.begin()"指向"了第一个值—0,但是end呢,不是6?w.end()是末尾出去的那个,相当于我们定义数组a[10],我们在查询w.end(),就相当于查询a[10]这个元素。那么也就是说最后一个值,就是*(w.end()-1);

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    printf("begin=%d end=%d 最后一个是:%d\n",*w.begin(),*w.end(),*(w.end()-1));

}

结果:


 

然后就是遍历:

这里有一个函数w.size()指这个vector所存的值的区域大小

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    printf("size=%d\n",w.size());

}

结果:


那好,我们就可以遍历了;

这里有一种神奇的用法就是,和数组一样的!!!为什么呢?T^T不知道啊;

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    for(int j=0;j<w.size();j++)

    {

        printf("第%d个=%d\n",j+1,w[j]);

    }

}

结果:

还有一种就是我们知道,w.begin(),w.end()是[迭代器](一种复杂的【指针】),那么我们用同样的【迭代器】去遍历,也可以吧;

定义:vector<int>::iterator b;

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    vector<int>::iterator b;

    int cont=1;

    for(b=w.begin();b!=w.end();b++)

    {

        printf("第%d个=%d\n",cont++,*b);

    }

}

结果:

 

还有就是清空:

w.clear();

 

#include<stdio.h>

#include<iostream>

#include<vector>

using namespacestd;

int main()

{

    vector<int>w;

    for(int i=0;i<7;i++)    //我们把 i 塞进去

    {

        w.push_back(i);

    }

    vector<int>::iterator a;

    int cont=1;

    for(a=w.begin();a!=w.end();a++)

    {

        printf("第%d个=%d\n",cont++,*a);

    }

    w.clear();

 

    printf("begin=%dend=%d\n",w.begin(),w.end());

 

    if(w.begin()==w.end())

        printf("清空啦啦啦啦!!!\n");

 

    vector<int>::iterator b;

    cont=1;

    for(b=w.begin();b!=w.end();b++)

    {

       printf("第%d个=%d\n",cont++,*b);

    }

}

结果:


OK,其他还有很多什么翻转啊,很高级的东西,试一试就什么都知道了。

 

posted @ 2016-05-06 14:13  see_you_later  阅读(141)  评论(0编辑  收藏  举报