欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【STL】vector小结

程序员文章站 2022-07-12 22:51:08
...

vector是最简单的序列式容器,支持随机访问元素,类似一个动态数组。使用vector时应当包含头文件< vector >.

定义与初始化

vector<int> vt;
vt.reserve(5); //在初始化之前应当先设置容器的容量
vt.push_back(1); //使用push_back()函数向尾部添加元素
vt.push_back(2);
vt.push_back(3); 

大小与容量
vector的大小是指容器中现有的元素数量,由函数size()的返回值获取,函数resize()可以修改容器大小。
vector的容量是指容器实际可以容纳的元素数量,由函数capacity()的返回值获取,函数max_size()可以返回容器可以容纳的最大元素数量。

访问元素
vector容器对元素的操作方法主要有如下几种方式:

vector<double> vt;
vt[index]; //类似数组下标的用法,返回引用,不可用这种方式初始化
vt.at(index); //与方括号的使用方式类似,返回引用
vt.front(); //返回第一个元素
vt.back(); //返回最后一个元素

迭代器相关函数
下面的函数均返回一个迭代器。

vt.begin(); //指向第一个元素
vt.end(); //指向最后元素的下一个位置
vt.rbegin(); //指向逆向迭代的第一个元素
vt.rend(); //指向逆向迭代最后元素的下一个位置

遍历容器
可以使用at()函数实现遍历, 也可以使用迭代器来实现。

//使用at()函数遍历,也可用[]实现
vector<int> vt;

for(int i = 0; i < vt.size(); i++){
    cout<<vt.at(i)<<endl;
}

//使用迭代器实现遍历
vector<int>::iterator it;
for(it = vt.begin(); it != vt.end(); it++)
{
    cout<<*it<<endl;
}

//使用逆向迭代器实现逆向遍历
vetor<int>::reverse_iterator it2;
for(it2 = vt.rbegin(); it != vt.rend(); it2++)
{
    cout<<*it2<<endl;
}

另外可以通过使用算法头文件< algorithm >中的for_each()函数实现类似遍历个功能。

#include<algorithm>
void out(int &n)
{
    cout<<n<<endl;
}
vector<int> vt;
for_each(vt1.begin(), vt1.end(), out); //正向遍历
for_each(vt1.rbegin(), vt1.rend(), out); //逆向遍历

插入
可以使用push_back()函数向末尾添加元素,也可以使用insert()函数像任意位置插入元素。

    vector<int> vt;
    vector<int>::iterator it;
    vt.reserve(10);
    vt.push_back(1);
    vt.push_back(2);
    vt.insert(vt.begin(), -1); //向迭代器所指位置之后插入一个元素
    vt.insert(vt.end(), 2, 0); //向迭代器所指位置之后插入多个相同个元素

    //注意迭代器it在这里的使用方式
    it = vt.begin();
    vt.insert(it+2, 2, 3); //向迭代器所指位置之后插入多个相同个元素

    for(int i = 0; i < vt.size(); i++)
        cout<<vt[i]<<' ';
    cout<<endl;

输出结果

-1 1 3 3 2 0 0 

删除
注意erase()函数返回一个迭代器,指向被删除元素后面的位置

vector<int> vt;
vector<int>::iterator it;
it = vt.begin();

vt.pop_back(); //删除最后一个元素
it = vt.erase(it+2); //删除迭代器所指的元素
vt.erase(it, vt.end()); //删除指定范围内的元素
vt.clear(); //删除全部元素