博客
关于我
C++学习记录 五、C++提高编程(2)
阅读量:385 次
发布时间:2019-03-05

本文共 2996 字,大约阅读时间需要 9 分钟。

C++ STL学习笔记

一、STL容器基础

1.1 set容器

简介:set容器是一个关联式容器,存储元素时会自动排序。其底层基于二叉树实现。本质:set容器不允许重复元素,适合存储唯一的元素。

1.1.1 set构造与赋值

  • 构造:
    set
    st;
  • 赋值:
    set
    & operator=(const set
    & st);

1.1.2 set操作

  • 插入:
    pair
    insert(const T& val);
  • 删除:
    iterator erase(iterator pos);
  • 查找:
    iterator find(const T& val);

1.2 map容器

简介:map容器是一个关联式容器,元素按key值自动排序。其底层同样基于二叉树实现。本质:map容器不允许重复的key值,适合存储键值对。

1.2.1 map构造与赋值

  • 构造:
    map
    mp;
  • 赋值:
    map
    & operator=(const map
    & mp);

1.2.2 map操作

  • 插入:
    pair
    insert(const pair
    & val);
  • 删除:
    iterator erase(iterator pos);
  • 查找:
    iterator find(const T1& val);

二、STL算法概述

2.1 常用遍历算法

2.1.1 for_each

功能描述:遍历容器中的元素。

  • 使用方式:
    for_each(begin(), end(), func);

    其中func可以是普通函数或仿函数。

2.1.2 transform

功能描述:将容器中的元素按照指定规则进行变换。

  • 使用方式:
    transform(begin(), end(), dest(), func);

    dest()需要预先分配空间。

2.2 常用查找算法

2.2.1 find

功能描述:查找容器中是否存在指定元素。

  • 使用方式:
    iterator find(begin(), end(), value);

2.2.2 find_if

功能描述:按条件查找容器中的元素。

  • 使用方式:
    iterator find_if(begin(), end(), predicate);

    predicate是谓词。

2.3 常用排序算法

2.3.1 sort

功能描述:对容器内的元素进行排序。

  • 使用方式:
    sort(begin(), end(), comparator);

    comparator是排序规则。

三、STL函数对象

函数对象(仿函数)是通过重载operator()操作符定义的类,具有一些函数的行为。

3.1 函数对象的使用

  • 算术仿函数:
    template
    T plus
    (T a, T b) { return a + b; }
  • 关系仿函数:
    template
    bool greater
    (T a, T b) { return a > b; }

四、STL案例:员工分组

案例描述:公司招聘了10名员工(编号A到J),需要随机分配部门(策划、美术、研发),并通过multimap存储部门与员工信息。

实现步骤:

  • 创建10名员工并存入vector。
  • 随机分配部门编号(0、1、2)。
  • 使用multimap存储员工信息,部门编号为key,员工对象为value。
  • 按部门显示员工信息。
  • 代码示例:

    #include 
    #include
    #include
    #include
    #include
    using namespace std;class Worker {public: string m_Name; int m_Salary; Worker(string name, int salary) { this->m_Name = name; this->m_Salary = salary; }};void creatWorker(vector
    & v) { srand((unsigned int)time(nullptr)); string nameSeed = "ABCDEFGHIJ"; for (int i = 0; i < 10; i++) { Worker worker; worker.m_Name = "员工" + nameSeed[i]; worker.m_Salary = rand() % 10000 + 10000; v.push_back(worker); }}void setGroup(vector
    & v, multimap
    & m) { for (vector
    ::iterator it = v.begin(); it != v.end(); it++) { int deptId = rand() % 3; // 0, 1, 2 m.insert(make_pair(deptId, *it)); }}void showWorkerByGroup(const multimap
    & m) { for (auto& dep : m) { int deptId = dep.first; auto it = m.find(deptId); int count = m.count(deptId); int index = 0; for (; it != m.end() && index < count; ++it, ++index) { cout << "姓名:" << it->second.m_Name << " 工资:" << it->second.m_Salary << endl; } cout << "------------------------------" << endl; }}int main() { srand((unsigned int)time(nullptr)); vector
    vWorker; creatWorker(vWorker); multimap
    mWorker; setGroup(vWorker, mWorker); showWorkerByGroup(mWorker); system("pause"); return 0;}

    五、总结

    通过本次学习,掌握了C++ STL中set、map、multiset等容器的使用方法,以及常用算法如for_each、transform等的应用。同时,通过员工分组案例,熟悉了multimap的实际应用场景。未来需要进一步深入学习STL的高级功能和算法优化技术。

    转载地址:http://muhwz.baihongyu.com/

    你可能感兴趣的文章
    Python 中的装饰器是什么?
    查看>>
    Python 中的装饰器是如何工作的,有哪些实际应用场景?
    查看>>
    python请求html_使用Python请求获取HTML?
    查看>>
    Python 之匿名函数和偏函数
    查看>>
    python 之栈的实现
    查看>>
    python语音播放
    查看>>
    python语言:装饰器原理
    查看>>
    Python 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>