• C++常用容器总结


            容器分为三类,顺序容器,关联容器和适配器。顺序容器又分为连续的容器(vector,array),顺序容器中的离散容器(list,slist,forward_list),离连形的deque;关联容器有set,map,mutilset,mutilmap,以及用哈希表实现的unordered_set,unordered_map。

    1.顺序容器

           连续型

            第一个也是最常用的vector,vector元素存放都是连续的,vector开辟内存是以2的倍数增长;还有一个特点就是只能从尾部添加元素。这两个特点使vector具有以下性质:

    适用于可以快速随机查找,在尾部增加删除元素的情况

    1. vector<int> a;
    2. //常用操作
    3. a.push_back();//在尾部插入元素
    4. a.front(); //第一个元素
    5. a.back();//最后一个元素
    6. a.size(); //当前a在内存中有多少个元素
    7. a.capacity();//实际在内存中开辟了多少元素(2的倍数增加)
    8. a.size();
    9. a.empty();
            离散型

            list,我们所熟知的双向链表,可以在双端进行插入删除,不支持随机访问;适用于频繁插入删除的情况。

            list还有一个值得注意的点,list内部封装了sort()排序,一般来说,在排序的时候,如果容器内部有sort(),优先采用容器内部的排序函数,而不采用algorithm库中的排序。

    常用操作

    1. .size();
    2. .front();
    3. .back();
    4. .sort();
    5. .push_back(); .pop_back(); //在尾部进行插入删除
    6. .push_front(); .pop_front(); //在头部进行插入删除

            forward_list,即单项链表,学过DS的,应该都熟知其性质,在操作上和list类似,没有了在头部插入和删除操作。

            离连型

            deque,双端队列,分段连续,但是让使用者感觉是连续的,每次扩充都是一个连续的buff,具有以下性质:

    1,是双端队列类模板,双端队列容器由若干个块构成,每个块中的元素的地址是连续的,但是块的地址是不连续的,

    2,可以从前面或后面快速的插入与删除元素,并可以快速地随机访问元素,但在中间位置插入和删除元素速度较慢

    3,deque容器不像vector那样把所有的元素保存在一个连续的内存块,而是采用多个连续的存储块存放数据元素,所以空间的重新分配要比vector快,因为重新分配空间后原有的元素不需要复制

         常用操作可以和vector类比,也可以和list类比

    1. []// 可以随机访问
    2. .size();
    3. .front();
    4. .back();
    5. .sort();
    6. .push_back(); .pop_back(); //在尾部进行插入删除
    7. .push_front(); .pop_front(); //在头部进行插入删除

    2.容器适配器

            先跳过关联性容器,先来看容器适配器,在源码实现层面,两个适配器stack和queue,都是操作受限的deque。学过DS对这stack和queue的性质应该很清楚。

    stack常用操作

    1. .empty();
    2. .size();
    3. .push();
    4. .pop();
    5. .top();//返回栈顶元素

    queue常用操作

    1. .empty();
    2. .size();
    3. .front();//队头元素
    4. .back();//队尾元素
    5. .push();//队尾插入元素
    6. .pop();//队头弹出元素

    3.关联型容器

            关联型容器,按照存放的元素分类set(存放单个元素)和map(存放键值对);其中set(元素不可重复),map(元素不可重复),mutilset(允许重复元素),mutilmap(允许重复元素)底层是由红黑树来实现的,而unordered_set(不能修改元素,只可以插入删除)和unordered_map底层是由哈希表来实现的。

    set的常用操作

    1. // set/multiset常用成员函数
    2. empty()://判断容器是否为空
    3. size()://返回容器中的实际元素个数
    4. insert()://插入元素
    5. erase()://从容器中删除一个或几个元素
    6. clear()://删除所有元素
    7. count(k)://返回容器中关键字k出现的次数
    8. find(k)://如果容器中存在关键字为k的元素,返回该元素的迭代器,否则返回end()值
    9. upper_bound()://返回一个迭代器,指向关键字大于k的第一个元素
    10. lower_bound()://返回一个迭代器,指向关键字不小于k的第一个元素
    11. begin()://用于正向迭代,返回容器的第一个元素
    12. end()://用于正向迭代,返回容器的最后一个元素后面的一个位置
    13. rbegin()://用于反向迭代,返回容器的最后一个元素的位置
    14. rend()://用于反向迭代,返回容器的第一个元素前面的一个位置

    map的常用操作

    1. //pair类结构的声明形式如下:
    2. struct pair{
    3. T first;
    4. T second;
    5. }
    6. // pair中的first为第一个分量(在map中对应key),second为第二个分量(在map中对应value)
    7. pair <double,double> p1; // 定义pair对象p1
    8. cin >> p1.first >> p1.second;
    9. // 同时pair对==,!=,<,>,<=,>=共六个运算符进行重载,提供了按照字典序对元素进行大小比较的比较运算符模板函数
    10. // map/multimap的主要成员函数如下
    11. empty()://判断容器是否为空
    12. size()://返回容器中的实际元素个数
    13. map[key]://返回关键字为key的元素的引用,如果不存在这样的关键字,则以key作为关键字插入一个元素(不适合multimap)
    14. insert(elem)://插入一个元素elem并返回该元素的位置
    15. clear()://删除所有元素
    16. find()://在容器中查找元素
    17. count()://容器中指定关键字的元素个数(map中只有1或者0)
    18. begin()://用于正向迭代,返回容器中的第一个元素位置
    19. end()://用于正向迭代,返回容器中最后一个元素的位置
    20. rbegin()://用于反向迭代,返回容器中最后一个元素的位置
    21. rend()://用于反向迭代,返回容器中第一个元素前面的一个位置
    22. // 在map中修改元素
    23. map<char,int> mymap;
    24. mymap['a'] = 1;
    25. // 获取map中的值
    26. int ans = mymap['a'];
    27. #include
    28. map<char, int> mymap;
    29. mymap['a'] = 3;
    30. map<char, int>::iterator it;
    31. for (it = mymap.begin(); it != mymap.end(), ++it) {
    32. cout << it->first, it->second;
    33. }

  • 相关阅读:
    讯飞AI算法挑战大赛-校招简历信息完整性检测挑战赛-三等奖方案
    Spring Cloud Gateway核心过滤器之请求限流详解
    AI时代带来的图片造假危机,该如何解决
    PYTHON知识点学习-字典
    Pinia中如何实现数据持久化操作
    cmake工程出现“CMAKE_CUDA_ARCHITECTURES must be non-empty if set.“的解决方法
    美容美发美甲业收银系统源码演示-服务卡项常见问题解答分享
    第二章 cadence后仿教程(Physical Verification).pdf
    【计网】第六章 应用层
    5分钟快速上手maven
  • 原文地址:https://blog.csdn.net/qq_45818574/article/details/136706454