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)用邻接表存储图

原文地址:https://www.cnblogs.com/dreamzj/p/14315465.html