在C中,有很多东西需要自己实现。C++提供了标准模板库(Standard Template Libray,STL),其中封装了很多容器,不需要费力去实现它们的细节而直接调用函数来实现功能。

具体容器链接:setstringmapqueuepriority_queuestackpair

1、vector的用法

  vector:向量,这里叫“变长数组”,长度根据需要而自动改变的数组。有时会碰到普通数组会超过内存的情况,可以使用vector解决。而且,vector可以用来以邻接表的方式存储图,可以解决当节点数太多,无法使用邻接矩阵,又害怕使用指针实现邻接表的时候,使用很简单。

  使用vector,需要添加头文件,#include<vector>,还要头文件下加入using namespace std;

1.1、vector的定义

vector<typename> name;

相当于定义了一个一维数组name[SIZE],只不过size可以根据需要进行变化,比较节省空间,也就是变长数组

typename:任何基本类型,int,char,double,结构体,STL容器vector,set,queue等。

如果typename是STL容器,定义的时候要在>>之后加上空格,如果不加空格,编译器就把它认为是位操作。

vector<int> stu;
vector<double> stu;
vector<char> stu;
vector<Node> stu;//Node是结构体类型
vector<vector<int>> name;

二维数组的定义:一维是一个数组的数组

vector<typename> Arrayname[arraySize]
/*Arrayname[]的每一个元素都是一个vector,可以理解为两个维都是可变长的二维数组*/
写法一:vector<int> vi[100];//一维长度已经固定为arraySize
vi[0]~vi[99]中每一个都是一个vector容器。
写法二:vector<vector<int>> vi//区别:这个两个维度是变长的

1.2、vector容器内元素的访问

  vector访问方式:下标访问、迭代器访问。

  1.2.1、下标访问

  和访问普通数组一样,下标从0~size()-1。

  比如定义的:vector<typename> vi,使用vi[index](vi[0],vi[1])。

  1.2.2、通过迭代器访问

  迭代器(iterator)理解为类似指针的东西。

  定义:vector<typename>::iterator it;//it是一个迭代器变量。

#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
    vector<int> vi;
    for(int i=0;i<5;i++)
    {
        vi.push_back(i);
    }
    vector<int>::iterator it=vi.begin();//vi.begin()是vi的首元素地址,用迭代器变量it指向这个地址
    for(int i=0;i<5;i++)
    {
        printf("%d\n",*(it+i));//输出vi[i];
    }
    return 0;
}
View Code

相关文章: