vector容器

13 篇文章 0 订阅
11 篇文章 0 订阅

 

vector容器

vector基本概念

功能:

  • vector数据结构和数组非常相似,也称为单端数组

vector与普通数组区别:

  • 不同之处在于数组是静态空间,而vector可以动态扩展

动态扩展

  • 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数拷贝新空间,释放原空间

vector 容器的操作(表格)

函数 vector<int>v;意义使用
v.begin()迭代器指向第一个元素
v.end()迭代器指向最后一个元素的下一个位置
v.rbegin()指向倒数第一个元素
v.rend()指向第一个元素的前一个
v.push_back(ele)尾插法插数,尾部插入元素elev.push_back(存入数据);当数组//尾插法输出正
v.pop_back()尾删法删除数,删除最后一个元素
v.insert(const_iterator pos,ele)头插法,迭代器指向位置pos插入元素elev.insert(v.begin,存入数据);//头插法输出反
v.insert(const_iterator pos ,int count,ele)迭代器指向位置pos插入count个元素elex.insert(x.begin(),存入量,存入数据);
v.erase(const_iterator pos)删除迭代器指向的元素v.erase(v.begin());//因为是begin所以是头删
v.erase(const_iterator start,const_iterator end)删除迭代器从start到end之间的元素v.erase(v.begin(),v.end());//删除全部,任何区间左闭右开 v.erase((2+x.begin()),(v.end()-5));头尾自己操作函数帮忙删中间
v.clear();删除容器中所有元素v.clear();清空
vector<类型>c;c=a;将a赋值给cvector<int>c; c=a;
x.assign(入容器名.begin(),入容器名.end())将传入容器赋值给调用容器vector<int>d;d.assign(c.begin(),d.end());
x.assign(个数,内容)内容个 个数给调用vector<int>e;e.assign(10,100);
empty();判断容器是否为空e.empty();为空返回真,不为空返回假;
capacity();容器的容量e.capacity; 容器的容量
size();返回容器中元素的个数e.size();容器中存放的数据的量
resize(int num);1.重新指定容器的长度为num若容器变长,则默认值填充新位置2.如果容器变短,则末尾超出容器长度的元素被删除e.resize(新的容量大小);不够补0,超出删除
resize(int num,elem);1.重新指定容器的长度为num,若容器变长,则以elem值填充新位置2.如果容器变短,则末尾超出容器长度的元素被删除e.resize(新的容量大小,补充的内容);不够补 补充的内容,超出删除
v.front()返回容器中第一个数据元素cout<<"第一个元素为"<<a.front() << endl;
v.back()返回容器中最后一个数据元素cout << "最后一个元素为" << a.back() << endl;
v.at(int idx)返回索引idx所指的数据for (int i = 0; i < a.size(); i++) { cout << a[i] << " " << endl; }
operator[];返回索引idx所指的数据for (int i = 0; i < v.size(); i++) { cout << v[i] << " " << endl; }v
swap(vec)将vec与本身的元素互换a.swap(b);a容器对象可以和b容器对象存储数据量不同
vector<int>(a).swap(a);//收缩内存创建一个匿名vector对象 通过a来初始化匿名对象 之后匿名对象与原对象交换 交换完匿名对象离开当前行被立即销毁
reserve(int len);容器预留len个元素长度,预留位置不初始化,元素不可访问v.reserve(预留空间); 让其只开辟一次空间

  • vector容器的迭代器是支持随机访问的迭代器

vector构造函数

功能描述

  • 创建vector容器

vector容器构造

#include<iostream>
#include<vector>
using namespace std;
​
vector<int>v1;
void funs(vector<int>&v)
{
    for(vector<int>::iterator it=v.begin;it!=it.end();it++)
    {
        cout<<*it<<endl;
    }
}
int main()
{
    vector<int>b;
    funs(b);
    
    vector<int>c;  //默认构造无参构造
    for(int i=0;i<10;i++)
    {
        c.push_back(i);
    }
    //通过区间方式进行构造
    printVector(c);
    vector<int>d(c.begin(),c.end());//将迭代器中数据传入
    printvector(d);//数据赋值
    
    //n个elem方式构造
    vector<int>e(10,100);//10个100
    printvector(e);
    //拷贝构造
    vector<int>f(e);
    printvector(f);
    
    system("pause");
    return 0;
}

vector赋值操作

功能描述:给vector容器进行赋值

#include<iostream>
#include<vector>
using namespace std;
void test()
{
    vector<int>a;
    for(int i=0;i<10;i++)
    {
        a.push_back(i);
    }
    vector<int>b;
    b=a;
    vector<int>c;
    c.assign(10,c);
    vector<int>d;
    d.assign(d.begin(),d.end());
}
int main(){}

vector容量和大小

功能描述:

  • 对vector容器的容量和大小操作

#include<iostream>
#include<vector>
using namespace std;
​
void printvector(vector<int>&x)
{
    for(vector<int>::iteratorit=x.begin();it!=x.end(),it++)
    {
        cout<<*it<<endl;
    }
}
int main()
{
    vector<int>a;
    for(int i=0;i<10;i++)
    {
        int b;
        cout<<"输入数字"<<endl;
        cin>>b;
        a.push_back(b);
    }
    if(a.empty()==1)  //如果为真代表容器为空
    {
        cout<<"容器为空"<<endl;
    }
    else
    {
        printvector(a);
        cout<<"容器的容量为"<<a.capacity()<<endl;
        cout<<"容器中存放数据数为"<<a.size()<<endl;
    }
    a.resize(15);
    printvector(a);
    a.resize(17,10);不够自动补10
    
    system("pause");
    return 0;
}

vector插入和删除

功能描述: 对vector容器进行插入删除操作

#include<iostream>
#include<vector>
using namespace std;
​
void printvector(vector<int>&a)
{
    for(vector<int>::iterator it=a.begin();it!=a.end();it++)
    {
        cout<<*it<<endl;
    }
}
​
int main()
{
    vector<int>a;
    int b;
    cout<<"输入打算插入元素个数"<<endl;
    cin>>b;
    for(int i=0;i<b;i++)
    {
        int c;
        cout<<"输入要插入的数字"<<endl;
        cin>>c;
        a.push_back(c);
    }
    printvector(a);
    
    vector<int>x;
    int d;
    cout<<"输入打算插入元素个数"<<endl;
    cin>>d;
    for(int m=0;m<d;m++)
    {
        int j;
        cout<<"输入要存人的数字"<<endl;
        cin>>j;
        x.insert(x.begin(),j);//插入的j第一个的位置变成了begin
    }
    printvector(x);
    int g;
    int r;
    cout<<"输入要插入的元素量"<<endl;
    cin>>g;
    r=g;
    g=d+g;
    x.resize(g); //先扩大
    for(i=d;i<g;i++)
    {
        int y;
        cout<<"输入要插入的数字"<<endl;
        cin>>y;
    x.insert(x.begin(),r,y);
    }
    printvector(x);
    x.erase(x.begin());//删除头的一个
    x.erase(x.begin(),x.end());//删除全部
    x.clear();//清空
    system("pause");
    return 0;
}
#include<iostream>
#include<vector>
using namespace std;
​
void printvector(vector<int>& a)
{
    for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
    {
        cout << *it <<"   " ;
    }
}
​
int main()
{
    vector<int>a;
    int b;
    cout << "输入打算插入元素个数" << endl;
    cin >> b;
    for (int i = 0; i < b; i++)
    {
        int c;
        cout << "输入要插入的数字" << endl;
        cin >> c;
        a.push_back(c);
    }
    printvector(a);
    cout << endl;
    vector<int>x;
    int d;
    cout << "输入打算插入元素个数" << endl;
    cin >> d;
    for (int m = 0; m < d; m++)
    {
        int j;
        cout << "输入要存人的数字" << endl;
        cin >> j;
        x.insert(x.begin(), j);//插入的j第一个的位置变成了begin
    }
    printvector(x);
    cout << endl;
    x.erase((2+x.begin()),(x.end()-5));
    printvector(x);
    system("pause");
    return 0;
}   //修改了部分的让操作输出什么更好看还有一些上面没有的调用删除的部分

vector数据存取

功能描述

  • 对vector数据的存取操作

#include<iostream>
#include<vector>
using namespace std;
​
void printvector(vector<int>& a)
{
    for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
    {
        cout << *it << " " << endl;
    }
}
void printvector2(vector<int>& a)
{
    for (int i = 0; i < a.size(); i++)
    {
        cout << a[i] << " " << endl;
    }
}
​
void printvector3(vector<int>& a) 
{
    for (int i = 0; i < a.size(); i++) 
    {
        cout << a.at(i) << "   ";
    }
}
int main()
{
    vector<int>a;
    int b;
    cout << "输入要存入几个整数" << endl;
    cin >> b;
    for (int i = 0; i < b; i++)
    {
        int t;
        cout << "输入要存入的数字" << endl;
        cin >> t;
        a.insert(a.begin(), t);
    }
    printvector2(a);
    printvector3(a);
    system("pause");
    cout<<"第一个元素为"<<a.front() << endl;
    cout << "最后一个元素为" << a.back() << endl;
    return 0;
}

vector互换容器

功能描述:

  • 实现两个容器内元素进行互换

#include<iostream>
#include<vector>
using namespace std;
void printvector(vector<int>&a) 
{
    int b;
    cout << "选择调用循环方式3种" << endl;
    cin >> b;
    switch (b)
    {
    case 1:
    {
        for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
        {
            cout << *it << endl;
        }
    }break;
    case 2: 
    {
        for (int i = 0; i < a.size(); i++)
        {
            cout << a[i] << endl;
        }
    }break;
    case 3: 
    {
        for (int i = 0; i < a.size(); i++)
        {
            cout << a.at(i) << endl;
        }
    }break;
    }
}
int main()
{
    vector<int>a;
    int d;
    cout << "输入要存入多少个数" << endl;
    cin >> d;
    for (int i = 0; i < d; i++) 
    {
        int t;
        cout << "输入要存入的数字" << endl;
        cin >> t;
        //a.insert((a.begin()-1),t);  //逆转版头插法-》尾插法  输入一个数之后报错
        a.insert(a.begin(), t);
    }
​
    vector<int>b;
    int e;
    cout << "输入要存入多少个数" << endl;
    cin >> e;
    for (int i = 0; i < e; i++)
    {
        int t;
        cout << "输入要存入的数字" << endl;
        cin >> t;
        //a.insert((a.begin()-1),t);  //逆转版头插法-》尾插法  输入一个数之后报错
        b.insert(b.begin(), t);
    }
​
    printvector(a);
    printvector(b);
    a.swap(b);//数据量不同也可以换
    printvector(a);
    printvector(b);
    system("pause");
    vector<int>(a).swap(a);//收缩内存 创建一个匿名vector对象 通过a来初始化匿名对象 之后匿名对象与原对象交换 交换完匿名对象离开当前行被立即销毁
    return 0;
}

vector预留空间

功能:

  • 减少vector在动态扩展容量时的扩展次数

#include<iostream>
#include<vector>
using namespace std;
​
void printvector(vector<int>& a)
{
    for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
    {
        cout << *it << " " << endl;
    }
}
void printvector2(vector<int>& a)
{
    for (int i = 0; i < a.size(); i++)
    {
        cout << a[i] << " " << endl;
    }
}
​
void printvector3(vector<int>& a)
{
    for (int i = 0; i < a.size(); i++)
    {
        cout << a.at(i) << "   ";
    }
}
int main()
{
    vector<int>a;
    int b;
    cout << "输入要存入几个整数" << endl;
    cin >> b;
    for (int i = 0; i < b; i++)
    {
        int t;
        cout << "输入要存入的数字" << endl;
        cin >> t;
        a.insert(a.begin(), t);
    }
    printvector2(a);
    printvector3(a);
    system("pause");
    cout<<"第一个元素为"<<a.front() << endl;
    cout << "最后一个元素为" << a.back() << endl;
​
​
    vector<int>g;
​
    g.reserve(15);  //预留空间
​
    int num=0;//统计开辟次数(搬家次数)
    int* p = NULL;
    for (int i = 0; i < 10; i++) 
    {
        g.insert(g.begin(), i);
        if (p != &g[0]) 
        {
            p = &g[0];
            num++;
        }
    }
    return 0;
}

如果你真的因为这段影片而感动,那么唯一不用做的事就是原谅奥托。 你可以记恨他,因为他视生命为草芥,因为他伤害了一个个我们心爱的女武神。 你可以同情他,因为他爱而不得,注定无法与那个他愿付出一切来换回的爱人重逢。 你可以佩服他,因为他可以真正做到不择手段,把自己当成达成自己目的的最大工具。 你可以可怜他,因为他人渣的一生中还有他唯一心爱的孙女,却只能让她永远记恨他。 你可以怜悯他,因为他亲手将自己逼进绝路,亲手造就了成为众矢之的愚者——伪神奥托。 在他漫长而又短暂的五百年生命中,很多事只有他能想出来,很多事也只有他能做出来。在最后,他需要的不是正名,因为那是他自己都不愿赐给自己的东西。如果说世界上存在一个最恨伪神奥托的人,那个人一定是前天命主教、卡莲的大发明家,奥托 阿波卡利斯。 奥托需要的不是洗白,是纯黑,是独自沉沦的黑,是将所有人排斥在外的黑。如果奥托在最后一刻被原谅,被理解,那么他过去的一切都被否定了,不管是他做过的好事还是坏事,都失去了它们之所以发生的意义。 奥托的离开需要的不是“走好”或“安息”,可能他仅仅只是需要旁人心中,哪怕那么一瞬的对生命的脆弱和逝去而感到的悲悯。因为那才是奥托成为恶人,成为愚者,成为伪神的原因。 其他人的逝去,我们可以说一句“永别了,老朋友。”,至于奥托,不如就送他一句“永别了,老逼登。”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只符华单推人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值