有关C++中STL中的vector的一些个人理解

第一次写博客,心里还有点小激动,希望各位大牛帮我看看我对于vector的一些个人理解对不对,倘若有错误,请指出,在此特别感谢

首先先说一下我对于C++的vector的一些个人理解,我刚开始是学C的,所以前一阵的练习一些竞赛题目的时候,习惯用数组模拟一切,但时间长了就会觉得很吃力,打算入C++的坑,所以对于vector的理解还是觉得它是一个可变的数组,并不理解为什么要叫它向量,望有dalao能指点一下为什么vector要叫向量。
好开始正题
正如前面所说,vector是一个可变数组,但它和数组又不一样,vector有一些自己定义的函数,以及不同与数组的命名方式
定义一个名字为text元素为int的vector:vector text;
定义一个对应该vector的名字为p的迭代器:vector:: iterator p;

vector对应的函数
begin():无需传入,返回 一个 指向 vector的第一个元素所在地方的迭代器
end():无需传入,返回 一个 指向 vector的最后一个元素所在迭代器 的后一个 //注意是后一个,因为C++的STL的内部函数对一个区间的操作是左闭右开[ , ),所以对应的取end的迭代器就是指到最后一个元素的后面

在这里上一个图加深理解(这个图是我从网上找来的,在此感谢提供者)

在这里插入图片描述

push_back(元素):传入一个元素,在vector后添加该传入的元素,不用像数组那样考虑vector得大小,但只能以该类往vector中添加元素,因为该列是vector得自带得类,所以可以理解为这个类自动往后申请空间然后添加元素;
pop_back():无需传入,删除vector最后一个元素,彻底删除的那种,数组只能覆盖而无法删除;
erase(iterator):传入一个迭代器,然后删除该迭代器指向的元素;//text.erase(text[text.size()-1])等同于text.pop_back
insert(iterator,元素):传入一个迭代器和一个元素,将 传入的元素 插入 传入的迭代器指向的地方 和 传入的迭代器的上一个的地方 之间
size():返回该可变数组得大小;
resize():改变可变数组得大小,倘若将vector当作数组来用,需在使用之前用该类改变大小;//一般如果习惯用数组经常需要用这个来改变vertor的长度
vector倘若当作数组用,[]里面的数字必须小于该vector的size,如果大于等于的话会发生不可预料的事情,和数组一样,超出我们对vector定义的空间了,但只是超出我们定义的空间了;

下面上代码

#include<iostream>
#include<vector>
#include<algorithm> 
using namespace std;
int main()
{
    vector<int> number;//定义一个名字为number的vector 
    int n;//接下来将要输入n个数 
    cin>>n;
    while(n--)
    {
        int text;
        cin>>text;
        number.push_back(text);
        //用push_back往vector中添加 
    }
    /*注意如果想让number当作数组来用的话,应该怎么输入
    number.resize(n);//这句是关键,必须初始化否则程序会运行不起来,可以删除这句话然后再运行一下试试 
    for(int i=0;i<n;i++)
        cin>>number[i];
    */ 
    
    vector<int>::iterator p;//定义一个名为p的迭代器  迭代器是一个类似于指针但比指针更智能化的东西,迭代器来源于指针,可以说迭代器是指针的儿子 
    for(p=number.begin();p!=number.end();p++)//这句话是使用迭代器访问vector中的每个元素的惯用语句 
        cout<<*p<<" ";
    cout<<endl; 
    //注意倘若number的size变化(该变化是因为resize||pop_back||push_back||erase||insert)则迭代器指向的地方将会变的混乱,建议重新赋值 
    
    number.pop_back();//删除vector的最后一个元素 
    for(p=number.begin();p!=number.end();p++)
        cout<<*p<<" ";
    cout<<endl;
    
    sort(number.begin(),number.end());//在下边需要用lower_bound函数,该函数使用前需排序 
    
    int x;
    cin>>x;
    p=lower_bound(number.begin(),number.end(),x);//该函数会返回第一个大于等于x的元素的迭代器,倘若没有则返回number.end()
    if(p!=number.end()) number.erase(p);//删除该元素 
    for(p=number.begin();p!=number.end();p++)//遍历一遍看看删除了没有 
        cout<<*p<<" ";
    cout<<endl;
    
    cin>>x;
    p=lower_bound(number.begin(),number.end(),x);//该函数会返回第一个大于等于x的元素的迭代器,倘若没有则返回number.end()
    if(p!=number.end()) number.insert(p,x);//在该元素前插入x,其实就是在一个排好序的数组中插入一个元素,保持顺序不表 
    for(p=number.begin();p!=number.end();p++)//遍历一遍看看插入了没有 
        cout<<*p<<" ";
    cout<<endl;
    
    return 0;
}

想了解一下的人建议仔细读读代码,注释已经刚开始的解释都挺详细的
测试数据
10
1 6 2 3 5 8 9 7 4 0
5
5
样例输出
1 6 2 3 5 8 9 7 4 0
1 6 2 3 5 8 9 7 4
0 1 2 3 4 6 7 8 9
0 1 2 3 4 5 6 7 8 9
//第一行是用迭代器输出vector中的所有元素
//第二行是用pop_back()删除了vector的最后一个元素
//第三行是输入了5然后删除了5后输出vector中的剩余元素,使用了erase()
//第四行是输入了5然后在排好序的vector中不乱序的插入了元素5

最后望各位能发现我得错误,指出我得错误,谢谢各位
★,°:.☆( ̄▽ ̄)/$:.°★
撒个花

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值