• vector详解


    简述: 

      头文件—vector,vector是STL里的容器之一,与数组一样,内存空间连续,起始地址不变,能在O(1)做到随机存取。但添加和删除元素需要拷贝则时间为O(n),数组的大小为定义时分配,但vector可以实现动态增长,程序员可以不用考虑容量问题。size返回已用容量大小,capacity返回总空间大小,若capacity与size相等,vector则会分配新内存,拷贝原空间,释放原空间,新分配内存为原内存的两倍,但程序效率不高,我们可以用reserve(n)预先分配一定大小的空间。

    定义:

    vector<int> ve;
    vector<int>::iterator it;//迭代器 
    vector<int>::reverse_iterator rit;//逆向迭代器 

    vector基本操作: /*x为元素,pos,sta,end为迭代器*/

    (1)容量:

    •向量大小:ve.size();

    •向量判空:ve.empty();

    • 向量清空:ve.claer();

    (2)修改:

    •ve.push_back(x);   末尾添加

    •ve.pop_back(x);     末尾删除

    •ve.insert(pos,x);     在pos位置插入x

    •ve.erase(pos);        删除pos位置的元素

    •ve.erase(sta,end);       删除[sta,end]之间的元素

    •ve.assign(n,x);            将ve变成n个x

    •ve.assign(sta,end);     将ve2的[sta,end)拷贝到ve

    •reverse(sta,end);   将[sta,end)的元素翻转 

    (3)查询:

    ve.begin();             首迭代器

    ve.end();     末迭代器

    •ve.rbegin();      末位元素的迭代器

    •ve.rend();    首位元素往前一个的迭代器

    •ve.front();    首元素

    •ve.at(index);          index下标的元素

    •find(sta,end,x);   在[sta,end)中查找x,找到返回迭代器位置,找不到返回end()

     

    (4)遍历:

    //通过迭代器:
    for(it=ve.begin();it!=ve.end();it++){
        cout<<*it<<" ";
    }
    //通过下标 
    for(int i=0;i<ve.size();i++){
        cout<<ve[i]<<" ";
    }
    //通过迭代器,这样连it也不用声明了 
    for(auto it=ve.begin(); it!=ve.end(); it++) {
        cout<<*it<<" ";
    }
    // 通过auto 
    for(auto it:ve) {
        cout<<it<<" ";
    }
    //it为元素的拷贝,若要修改原元素则要使用&it 元素则要使用&it

     去重:

    sort(ve.begin(),ve.end());
    ve.erase(unique(ve.begin(),ve.end()), ve.end());
    //unique()函数将重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器 再用erase函数擦除从这个元素到最后元素的所有的元素

      

  • 相关阅读:
    软考-高项
    Env Navigator项目设计
    传统Winform系统的转小程序化设想
    .net 混淆和反混淆工具
    ObjectListView 使用技巧
    Dapr资料汇总
    Keycloak保护Spring Boot Restful API接口
    将B站英语教学视频转成mp3和课件
    Java: 如何将XML格式化
    Java: 非泛型类如何设计List<T>这样的属性
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/12459997.html
Copyright © 2020-2023  润新知