C++ STL容器之vector容器快速入门

发布于 2020-02-08  203 次阅读


vector:长度可变数组,即“长度根据需要而自动改变的数组”。
使用vector需于代码头部添加#include<vector>,并且随后加上一句:using namespace std;即可。

vector的定义

vector<type> name;
其中type可为任何基本类型(如int等)、结构体和STL标准容器。
注意:(1)若type也是STL容器(STL容器嵌套),则需要在>>后加上空格(C++11之前标准的编译会将其视为移位操作)。即vector<vector<int>> name;。此时可把vector理解成两个维度都可变的二维数组理解。

vector数组的定义

vector<int> vi[100];
这样vi[0]到vi[100]中每一个vector都是一个vector容器。
vector<vector<int>> name;不同的是:这种数组是一维长度为100,另一维长度可变的二维数组。

vector容器内元素的访问

(1)通过下标访问(从0到name.size()-1进行访问,直接访问name[index]即可。

(2)通过迭代器(类似指针)访问

定义:vector<typename>::iterator it;

代码:

#include<stdio.h>
#include<vector>
using namespace std;
int main(){
    vector<int> vi;
    for(int i = 1; i <= 5; i++){
        vi.push_back(i);  //依次在vi的末尾添加5个元素,即1、2、3、4、5
        //push_back(x)会在vector后添加一个元素x,时间复杂度为O(1)
    }
    vector<int>::iterator it = vi.begin();
    //vi.begin()为取vi的首元素地址,而it指向此首元素地址
    //遍历元素
    for(int i = 0; i < 5; i++){
        printf("%d ",*(it + i));  //输出vi[i],即vi[i]和*(vi.begin()+i)是等价的
        //只有vector和string中,才允许使用迭代器加上整数这种写法
    }
    //遍历元素
    for(vector<int>::iterator it = vi.begin(); it != vi.end(); it++){
        //vector的迭代器不支持it < vi.end(),因此使用it != vi.end()
        //迭代器it还支持自加和自减各两种操作
        //end()取尾元素地址的下一个地址,即左闭右开
        //end()作为迭代器末尾标志,不存储任何元素
        printf("%d ",*it);
    }
    printf("%d\n",vi.size());  //计算vi的长度,输出5,时间复杂度为O(1)
    vi.pop_back();  //删除vi的尾元素5,时间复杂度为O(1)
    vi.insert(vi.begin()+2,-1);//将-1插入vi[2]的位置,时间复杂度为O(N)
    vi.erase(vi.begin()+3); //输出1、2、-1、4
    vi.erase(vi.begin()+1,vi.begin()+4);//删除vi[1]、vi[2]、vi[3]
    vi.clear();//清空vector中的所有元素,,时间复杂度为O(N)
}

常见用途

1 存储数据

(1)vector可以作为数组使用,而且在一些元素个数不确定的场合可以节省空间。

(2)若需要根据一些条件把部分数据输出在同一行,数据中间用空间隔开。由于在其当中输出数据个数不确定,为了使最后一个满足条件的数据后面不输出额外的空格。

可以先用vector记录所有需要输出的数据,然后一次性输出。

2 用邻接表存储图

本文标题:《C++ STL容器之vector容器快速入门》

本文链接:https://wnag.com.cn/276.html

特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~


正因为有要好好实现的梦想,所以今天也要好好加油。