STL | vector的使用

初始vector

vector是同一种类型的对象的集合,不定长的数组。因为vector包含其他对象,所以也被叫做容器

vector类型与数组类型的比较:
  • vector类型 长度动态 的,可以根据需要动态的调用 push_back()函数 添加新的元素,而 数组的长度固定 的;
  • 数组没有获取数组大小的函数,而vector类型提供 size()函数 能够方便的获取容器的大小;
  • 现代C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组指针,只有在强调程序的速度时才在类实现的内部使用数组和指针。

创建vector

vector v1;  //vector保存类型为T的对象,默认的构造函数v1为空【最常见的一种创建方法】
vector v2(v1); //用v1去初始化v2,即v2是v1的一个副本
vector v3(n,i); //v3包含n个值为i的元素
vector v4(n); //v4含有值初始化的元素的n个副本

创建vector时报错

为什么会有错误呢?

#include //检查是否加入了头文件

using namespace std; //检查是否使用了标准空间std
                    //这句是最容易被忽略的

加上这两条语句,就可以在MFC中使用vector啦。

vector对象的操作

1.size()函数

vector对象的成员函数size返回值为size_type,作用是返回vector对象的大小。

#include
#include
using namespace std;
int main()
{
    vectortest;
    int lenght;
    lenght=test.size();
    cout<
2.push_back()函数

vector对象的成员函数push_back操作将接受一个值,并将它作为一个新的元素追加到vector对象的后面。

#include
#include
using namespace std;
int main()
{
    vectortest;
    test.push_back(3); //将 3 (int型)追加到容器末尾 
                      //注意元素的类型应与定义的类型相一致 
}
3.vector对象的下标操作(访问操作)

vector对象的下标操作与普通的数组一致。

#include
#include
using namespace std;
int main()
{
    vectortest;
    test.push_back(3); //将 3 (int型)追加到容器末尾 
                      //注意元素的类型应与定义的类型相一致
    cout<

迭代器的使用

定义

迭代器 是一种检查容器内元素并遍历元素的数据类型(一种类型支持一组确定的操作)

vector::iterator iter;

注:可以这么理解,迭代器类似于指针

begin()和end()函数

每个vector容器都定了一对命名为begin和end的函数,用于返回迭代器。

  • begin() 返回的迭代器指向vector的第一个元素
  • end() 返回的迭代器指向最后一个元素的下一个元素,它指向了一个不存在的元素,所以通常称为超出末端迭代器

遍历vector的常见用法

1.用vector对象的下标操作
#include
#include
using namespace std;
int main()
{
    vectortest;
    test.push_back(3); //将 3 (int型)追加到容器末尾 
                      //注意元素的类型应与定义的类型相一致
    for(int i=0;i!=test.size();i++) //for循环:size()返回容器元素个数 
    {
        cout<
2.利用迭代器
#include
#include
using namespace std;
int main()
{
    vectortest;
    test.push_back(3); //将 3 (int型)追加到容器末尾 
                      //注意元素的类型应与定义的类型相一致
    vector::iterator iter;
    for(iter=test.begin();iter!=test.end();iter++) //iter++:指向下一个元素【迭代器自增】 
    {
        cout<<*iter<
3.一种常见错误
#include
#include
using namespace std;
int main()
{
    vectortest; 
    for(int i=0;i<10;i++)
    {
        test[i]=i;//这种做法以及类似的做法都是错误的。 
                  //下标只能用于获取已存在的元素,而现在的test[i]还是空的对象
        cout<().swap(test); //释放内存 
}

push_back()函数进行修改

#include
#include
using namespace std;
int main()
{
    vectortest; 
    for(int i=0;i<10;i++)
    {
        test.push_back(i); //push_back()
        cout<().swap(test); //释放内存 
}

释放vector内存

在程序退出之前,释放vector内存是必要的。
释放vector内存最简单的方法是vector().swap
其中swap()是交换函数,使vector离开其自身的作用域,从而强制释放vector所占的内存空间。

#include
#include
using namespace std;
int main()
{
    vectortest;
    test.push_back(3); //将 3 (int型)追加到容器末尾 
                      //注意元素的类型应与定义的类型相一致
    test.clear(); //清除(移除容器中所有元素) 
    vector().swap(test); //释放内存 
}

vector的其他操作

当然啦,也不仅仅只有下面的这些函数,还有一些不常用的函数。

#include
#include
using namespace std;
int main()
{
    vectortest;
    test.clear()               //清除容器中所有数据
    test.empty()               //判断容器是否为空
    test.erase(pos)            //删除pos位置的数据
    test.erase(beg,end)        //删除[beg,end)区间的数据
    test.front()               //传回第一个数据
    test.insert(pos,elem)      //在pos位置插入一个elem拷贝
    test.pop_back()            //删除最后一个数据
    test.push_back(elem)       //在尾部加入一个数据
    test.resize(num)           //重新设置该容器的大小
    test.size()                //返回容器中实际数据的个数
    test.begin()               //返回指向容器第一个元素的迭代器
    test.end()                 //返回指向容器最后一个元素的迭代器
}

写在最后

打一波广告,自己的公众号,不是技术文,主要是分享自己的一些想法,欢迎前来关注,非喜勿喷。


STL | vector的使用_第1张图片
我锨说

你可能感兴趣的:(STL | vector的使用)