C++ STL之vector的简单使用_简述stl中容器的使用

目录

简介

代码

运行截图

常用函数

参考


简介

Vector是c++提供的容器之一,可以很好的扩展。除此之外,提供了一些函数。

本篇文章将常用的函数进行了使用,利用switch组成了一个菜单,具有尾部扩张 、插入、删除、排序、显示 、修改等功能。

适合初学者。

迭代器示意图

代码

/*********************

 vector
 Author:YuBo
 Date:2018/1/23
**********************/

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v;       //向量
void menu()
{
 cout<<"*********vector的使用************"<<endl;
 cout<<"*****1.尾部扩张  2.插入**********"<<endl;
 cout<<"*****3.删除      4.排序**********"<<endl;
 cout<<"*****5.显示      6.修改**********"<<endl;
 cout<<"*****7.退出                      "<<endl;

}
void Add()
{
    int temp;int N;
    cout<<"请输入你要输入的整数个数:"<<endl;
    cin>>N;
    cout<<"请输入"<<N<<"个整数(空格分割,换行结束):"<<endl;
    for(int i=0;i<N;i++)
    {
     cin>>temp;
     v.push_back(temp);
    }
}
void Insert()
{
    int place,num;
    cout<<"请输入从第几个元素前插入(首元素位置为0):"<<endl;
    cin>>place;
    cout<<"请输入要插入的一个整数:"<<endl;
    cin>>num;
    v.insert(v.begin()+place,num);
}
void Delete()
{
    int i;int place;int from,to;
    cout<<"*******1.删除1个 2.删除部分 3.全部清除********"<<endl;
    cout<<"请输入菜单号:"<<endl;
    cin>>i;
    switch(i)
    {
    case 1:{
            cout<<"请输入要删除第几个元素(首元素为0):"<<endl;
            cin>>place;
            if(place<0||v.size()<place+1)cout<<"输入位置出界。"<<endl;
            else v.erase(v.begin()+place);
           }break;
    case 2:{
            cout<<"请输入从区间起始和结束位置(结束位置元素不删除):"<<endl;
            cin>>from>>to;
            if(from<0||v.size()<to+1)cout<<"输入区间出界。"<<endl;
            else v.erase(v.begin()+from,v.begin()+to);//删除区间内,包含区间起始点,不包含尾点
           }break;
    case 3:{
            v.clear();
           }break;
    }
}
void Sort()
{
    int i;
    cout<<"*****1.升序  2.降序******"<<endl;
    cin>>i;
    switch(i)
    {
     case 1:sort(v.begin(),v.end());break;
     case 2:reverse(v.begin(),v.end());break;
    }
}
void Display()
{
    vector<int>::iterator it;
    for(it=v.begin();it!=v.end();it++)
    {
     cout<<*it<<" ";
    }
    cout<<endl;
}
void Change()
{
    int place;
    cout<<"请输入要修改的元素的位置(首元素为1):"<<endl;
    cin>>place;
    cout<<"请输入一个整数:"<<endl;
    cin>>v[place-1];
}
int main()
{
    int i;
    while(1)
    {
        menu();
        cout<<"请输入菜单号:"<<endl;
        cin>>i;
        if(i==7)break;
        switch(i)
        {
         case 1:Add();break;
         case 2:Insert();break;
         case 3:Delete();break;
         case 4:Sort();break;
         case 5:Display();break;
         case 6:Change();break;
         default:cout<<"输入错误!"<<endl;break;
        }
    }

}

运行截图

-----------------------------------------------------2020-08-29更新----------------------------------------

常用函数

函数成员函数功能
begin()返回指向容器中第一个元素的迭代器。
end()返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的迭代器。
rend()返回指向第一个元素所在位置前一个位置的迭代器。
size()返回实际元素个数。
capacity()返回当前容量。
empty()判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
reserve()增加容器的容量。
shrink _to_fit()将内存减少到等于当前元素实际所使用的大小。
operator[ ]重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
at()使用经过边界检查的索引访问元素。
front()返回第一个元素的引用。
back()返回最后一个元素的引用。
data()返回指向容器中第一个元素的指针。
assign()用新元素替换原有内容。
push_back()在序列的尾部添加一个元素。
pop_back()移出序列尾部的元素。
insert()在指定的位置插入一个或多个元素。
erase()移出一个元素或一段元素。
clear()移出所有的元素,容器大小变为 0。
swap()交换两个容器的所有元素。
emplace()在指定的位置直接生成一个元素。
emplace_back()在序列尾部生成一个元素。

emplace_back()函数是 C++11 新增加的,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。因此,在实际使用中,推荐大家优先使用 emplace()。

emplace() 是 C++11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。

emplace() 在插入元素时,是在容器的指定位置直接构造元素,而不是先单独生成,再将其复制(或移动)到容器中。因此,在实际使用中,推荐大家优先使用 emplace()。

由于是直接构造元素,emplace()一次只能插入一个元素。而insert除了上述代码显示的还有其他的参数形式。

语法格式用法说明
iterator insert(pos,elem)在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
iterator insert(pos,n,elem)在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
iterator insert(pos,first,last)在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。
iterator insert(pos,initlist)在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。

如果是后面三种情况可以使用insert,或者自己循环使用emplace插入。

删除除了上述代码提到的,还有下面两个

函数功能
pop_back()删除 vector 容器中最后一个元素,该容器的大小(size)会减 1,但容量(capacity)不会发生改变。
remove()删除容器中所有和指定元素值相等的元素,并返回指向最后一个元素下一个位置的迭代器。

参考

cplusplus-vector

更多STL例子: C++ STL的使用

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值