C++ STL初学之vector用法总结之补充

9 篇文章 0 订阅

接上一篇文章:
C++ STL初学之vector用法及使用

一、 访问vector中的数据

使用两种方法来访问vector。
1、 vector::at()
2、 vector::operator[]
  operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。
但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。
由于operator[]容易造成一些错误,所有我们很少用它,下面进行验证一下:

二、删除vector中的数据

vector能够非常容易地添加数据,也能很方便地取出数据,
同样vector提供了erase(),pop_back(),clear()来删除数据,
当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。

三、排序

  • 使用algorithm库中的sort()排序,得到升序结果;
  • 使用algorithm库中的reverse(),将元素倒置
    1.升序:
    (1)sort(data.begin(),data.end()),然后正序输出
    2.降序
    (1)sort(data.rbegin(),data.rend()),然后正序输出
    (2)sort(data.begin(),data.end()),reverse(data.begin(),data.end())
    (3)sort(data.rbegin(),data.rend()),然后逆序序输出
#include <iostream>
#include <vector>
#include <algorithm>  //许多有用的算法在这个里面

using namespace std;

int main()
{
    //定义一个vector数据结构的数据data
    vector<int> data;
    vector<int> data1(2);

    /* 插入 */
    //尾部插入 data.push_back(int m);---在data的最后面插入m;
    data.push_back(2);
    data.push_back(4);
    data.push_back(9);
    data.push_back(1);
    //现在data中的数据为2,4,9,1,5

    //插入  insert( &p,int m);  p是指要插入的地址,m是要插入的数据
    data1[0]=10;
    data1.insert(data1.begin(),20);  //在头部插入一个元素20
    data1.push_back(14);
    data1.insert(data1.begin()+1,17);   //在下标为1的位置上插入17(从0开始)
    //现在的data1中的数据为20,17,10,0,14

    //返回头部第一个元素的地址及数据
    cout << "data中的头部第一个元素为:"<<*data.begin()<<endl;
    cout << "data中的头部第二个元素为:"<<*(data.begin()+1)<<endl;
    //返回尾部最后一个元素的地址及数据
    cout << "data中的尾部最后一个元素为:"<<*(data.end()-1)<<endl;
    
    //得到第一个数据与最后一个数据
    cout <<"\ndata1中的第一个数据为:"<<data1.front()<<endl;
    cout <<"data1中的最后一个一个数据为"<<data1.back();


    
    //排序
    sort(data.begin(),data.end());  //升序
    reverse(data1.begin(),data1.end()); //倒置  

    //遍历
    vector<int>::iterator it;  //定义一个遍历容器
    cout <<"\ndata1导致\n";
    for(it=data1.begin();it!=data1.end();it++)
    {
        cout<<*it<<" ";
    }
    cout <<"\ndata遍历\n";
    for(int i=0;i<data.size();i++)
    {
        cout << data.at(i) <<" ";
    }



    //修改
    data1[2]=100;

    //删除
    //删除一个
    data.erase(data.begin());  //删除第一个元素,参数为地址
    //大小
    cout << "\ndata中的数据的个数:"<<data.size();
    cout << "\ndata1中数据的个数:"<<data1.size();
    //删除最后一个
    data.pop_back();
    //删除多个
    data.erase(data.begin(),data.begin()+2); //删除data中[0,2) *前开后闭*-----
    //删除全部
    data1.clear();

    //大小
    cout << "\ndata中的数据的个数:"<<data.size();
    cout << "\ndata1中数据的个数:"<<data1.size();

}

在这里插入图片描述

四、vector中最大值与最小值

使用用algorithm库中的max_element()及min_element()函数,二者返回的都是迭代器或指针。

1.用法
(1)求数组的最大值或最小值

1)vector容器

例 vector vec

最大值:int maxValue = *max_element(v.begin(),v.end());

最小值:int minValue = *min_element(v.begin(),v.end());

2)普通数组

例 a[]={1,2,3,4,5,6};

最大值:int maxValue = *max_element(a,a+6);

最小值:int minValue = *min_element(a,a+6);

(2)求数组最大值最小值对应的下标

1)vector容器

例 vector vec

最大值下标:int maxPosition = max_element(v.begin(),v.end()) - v.begin();

最小值下标:int minPosition = min_element(v.begin(),v.end()) - v.begin();

2)普通数组

例 a[]={1,2,3,4,5,6};

最大值下标:int maxPosition = max_element(a,a+6) - a;

最小值下标:int minPosition = min_element(a,a+6) - a;

#include <iostream>
#include <vector>
#include <algorithm>  //基本的算法

using namespace std;

int main()
{
    vector<int> b(5);   //定义一个大小为5的vector容器
    b[0]=14;
    b[1]=12;b[2]=16;b[3]=44;
    b.push_back(99);  //在b的最后面,开辟一个空间,并填充值1
    b.push_back(11);
     
    cout <<"最大值为:"<<*max_element(b.begin(),b.end())<<endl;
    cout<<"最大值下表为:"<<max_element(b.begin(),b.end())-b.begin()<<endl;

    cout <<"最小值为:"<<*min_element(b.begin(),b.end())<<endl;
    cout<<"最小值下表为:"<<min_element(b.begin(),b.end())-b.begin()<<endl;
}

在这里插入图片描述

  • 请各位大佬多多指教
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值