• STL中最常见的三种容器vector、list、map对比分析


    vector

    listmap

    1、构造;

    vector v1; //无参构造

    1、构造

    list<int>L1; //默认构造;

    1、构造

    map<int,int>m; //默认构造 

    2、vector容量、大小;

    if (v1.empty())
    {
    cout << "v1为空" << endl;
    } else
    {
    cout << "v1不为空" << endl;
    cout << "v1的容量 = " << v1.capacity() << endl;
    cout << "v1的大小 = " << v1.size() << endl;
    }

    //resize 重新指定大小 ,若指定的更大,默认用0填充新位置,可以利用重载版本替换默认填充
    v1.resize(15,10);
    //resize 重新指定大小 ,若指定的更小,超出部分元素被删除
    v1.resize(5);

    2、大小操作

    if (L1.empty())
    {
    cout << "L1为空" << endl;
    } e
    lse
    {
    cout << "L1不为空" << endl;
    cout << "L1的大小为: " << L1.size() << endl;
    } 

    //重新指定大小
    L1.resize(10);
    L1.resize(2);  

    2、大小操作

    if (m.empty())
    {
    cout << "m为空" << endl;
    } else
    {
    cout << "m不为空" << endl;
    cout << "m的大小为: " << m.size() << endl;
    } 

    3、vector插入、删除

    //尾插
    v1.push_back(10);

    //尾删
    v1.pop_back();

    //插入(位置迭代器)
    v1.insert(v1.begin(), 100); 

    //删除(位置迭代器)
    v1.erase(v1.begin()); 

    //清空
    v1.erase(v1.begin(), v1.end());
    v1.clear(); 

    3、插入、删除

    //尾插
    L.push_back(10); 

    //头插
    L.push_front(100); 

    //尾删
    L.pop_back(); 

    //头删
    L.pop_front(); 

    //插入(位置迭代器)
    list<int>::iterator it = L.begin();
    L.insert(++it, 1000); 

    //删除
    it = L.begin();
    L.erase(++it); 

    //移除
    L.remove(10000); //删除容器中所有与elem值匹配的元素。

    3、插入和删除

    m.insert(make_pair(2, 20)); 

    //删除
    m.erase(m.begin());//删除pos迭代器所指的元素,返回下一个元素的迭代器 

    m.erase(3);//删除容器中值为key的元素

    4、数据的存取;

    for (int i = 0; i < v1.size(); i++)
    {
    cout << v1[i] << " "; //也可以通过.at(i)

    4、数据存取

    不支持随机访问[],.at();

    cout << "第一个元素为: " << L1.front() << endl;
    cout << "最后一个元素为: " << L1.back() << endl; 

    4、查找和统计

    //查找
    map<int, int>::iterator pos = m.find(3);
    if (pos != m.end())
    {
    cout << "找到了元素 key = " << (*pos).first << " value = " << (*pos).second << endl;
    } else
    {
    cout << "未找到元素" << endl;
    }

    //统计
    int num = m.count(3);
    cout << "num = " << num << endl; 

    5、互换空间;

    v1.swap(v2); 

    m.swap(m2); 

    6、排序

    sort(d.begin(), d.end()); 

    5、反转和排序

    不支持标准算法,只能使用内置的成员函数;

    //反转容器的元素
    L.reverse(); 

    //排序
    L.sort(); //默认的排序规则 从小到大 

    L.sort(myCompare); //指定规则,从大到小 

    5、排序

    //默认从小到大排序
    //利用仿函数实现从大到小排序
    map<int, int, MyCompare> m; 

  • 相关阅读:
    Java异常的处理(超详细)
    直播课堂系统11--腾讯云点播管理模块(三)
    本地代码上传到gitlab
    Apollo Planning规划算法仿真调试(11):速度规划ComputeSTBoundary
    stm32单片机测量外部脉冲宽度
    鸿蒙系统扫盲(二):再谈鸿蒙是不是安卓套壳?
    vscode软件中不显示文件前的图标
    22-k8s中pod的调度-亲和性affinity
    Cron正则表达式总结汇总说明
    2.28 OrCAD中怎么对元器件管脚属性进行统一更改?
  • 原文地址:https://blog.csdn.net/weixin_46432495/article/details/127421726