STL vector 详解

STL vector 详解

在这里插入图片描述

一级目录

二级目录

三级目录

1. vector容器

C++中,矢量是-一个十分有用的容器。它能够像容器一样存放各
种类型的对象。也就是说, vector是-个能够存放任意类型的动态
数组。

vector是同一种类型的对象的集合,每个对象都有一个对应的整数
矢量索引值。和string对象-样,标准库将负责管理与存储元素相关的
内存。

把vector称为容器,是因为它可以包含其他对象。一个容器中的所
有对象都必须是同一种类型的。

2. vector 容器的初始化函数

1.初始化

vector name(int nSize,const &t=0);    //创建一个元素为nSize,值为t的向量
vector name(const vector &t );      //复制构造函数

//复制另一个向量[begin,end)区间内的元素到该向量 ,这里要注意的是,区间是左开右闭
vector name(begin,end);     

vector<int>v(10);        //声明一个含10个元素的向量,默认值为0
vector<int> v1(10,2);     //声明一个含10个元素,值为2的向量
vector<int>v3(v2);          //将v2拷贝给v3
vector<int>v4(v2.begin(),v2.begin()+1);       //把v2中的第一个赋值给v4

2.案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

 
int main()
{
    //vector声明
    vector<int>arr={1,2,4};
    Print(arr);
    vector<double>arr1={1.2,4.5,6.7,8};
    Print(arr1);
    vector<char>arr2={'a','b','d','e'};
    Print(arr2);
   
    cout<<endl;
    //vector初始化
    vector<int>arr3(4);
    Print(arr3);
    vector<double>arr4(3,2.4);
    Print(arr4);
    vector<char>arr5(arr2);
    Print(arr5);
    vector<int>arr6(arr.begin(),arr.begin()+1);
    Print(arr6);
    return 0;
}

结果:

3. vector的访问函数

1. 成员函数访问

reference at(int pos)//返回pos位置元素的引用

reference front();        //返回首元素的引用

reference back();          //返回尾元素的引用

iterator begin();           //返回向量头指针,指向第一个元素

iterator end();     //返回向量尾指针,指向向量最后一个元素的下一个位置

reverse_ iterator rbegin();   //反向迭代器,指向最后一个元素

reverse_ iterator rend();    //反向迭代器,指向第一个元素之前的位置

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    vector<int>v={2,3,4,1,7};

    cout<<v.at(3)<<endl;

    cout<<*v.begin()<<endl;

    cout<<*v.end()<<endl;

    cout<<v.front()<<endl;

    cout<<v.back()<<endl;

    cout<<*v.rbegin()<<endl;

    cout<<*v.rend()<<endl;
    return 0;
}

结果:
在这里插入图片描述

2. 操作符[ ]访问

vector<int>v1={3,4,5};
cout<<v1[2]<<endl;

3.案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    //vetcor获取向量内部元素的相关函数
    vector<int>arr={1,2,3,4,5,6,7,8,9};
    cout<<arr.at(4)<<endl;
    cout<<arr.front()<<endl;
    cout<<arr.back()<<endl;
    for(auto i=arr.begin();i!=arr.end();i++)
    {
        cout<<*i<<" ";
    }
    cout<<endl;
    for(auto i=arr.rbegin();i!=arr.rend();i++)
    {
        cout<<*i<<" ";
    }
    cout<<endl;
    return 0;
}

4. vector的插入函数

1. 语法


void push_back(const T& x)
//向量尾部增加一个元素X

iterator insert(iterator it,const T& x)
//向量中迭代器指向元素前增加一个元素x

iterator insert(iterator it,int n,const T& x)
//向量中迭代器指向元素前增加n个相同的元素x

iterator insert(iterator it,const_ iterator first,const_ iterator last)
//向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

2. 案例

#include<iostream>
#include<vector>

using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    //vector向量增加元素的相关函数
    vector<int>arr={1,3,5};
    vector<int>arr1={14,15};
    arr.push_back(3);
    Print(arr);
    arr.insert(arr.begin(),12);
    Print(arr);
    arr.insert(arr.begin()+2,3,10);
    Print(arr);
    arr.insert(arr.begin(),arr1.begin(),arr1.end());
    Print(arr);
    return 0;
}

结果:
在这里插入图片描述

5. vector的删除函数

1.语法

iterator eraseliterator it); 
//删除向量中迭代器指向元素

iterator erase(iterator first, iterator last);
//删除向量中[first,last)中元素

void pop_back();
//删除向量中最后一个元素

void clear();
//清空向量中所有元素

2. 案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}


int main()
{
    //vector使用
    vector<int>arr={1,2,4,6,7,5};
    arr.pop_back();
    Print(arr);

    arr.erase(arr.begin());
    Print(arr);

    arr.erase(arr.begin(),arr.begin()+2);
    Print(arr);

    arr.clear();
    Print(arr);
    
    return 0;
}

结果:
在这里插入图片描述

6. vector的判断函数

vector<int>v;
cout<<v.empty()<<endl;

7. vector的大小函数

vector<int>v={3,45,6,2};

cout<<v.size()<<endl; //当前向量的元素个数

cout<<v.max_size()<<endl;  //向量最大能容纳的元素个数

cout<<v.capacity()<<endl;   //当前向量的容量

结果:
在这里插入图片描述

8. vector的其他函数

1. 语法


void swap(vector& t)
//交换两个同类型向量的数据

void assign(int n,const T& x)
//设置向量中前n个元素的值为x

void assign(const_ iterator first,const_ iterator last)
//向量中[first,last)中元素设置成当前向量元素

2. 案例


#include<iostream>
#include<vector>

using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
vector<int>v={3,45,6,2};
v.assign(2,0);
Print(v);`

vector<int>v1;
v1.assign(5,8);
Print(v1);

v1.swap(v);
Print(v);
Print(v1);

return 0;
}

结果:
在这里插入图片描述

结尾

文章到这里就结束了,希望可以各位读者可以点赞支持一下。
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值