博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现子集数的总和等于给定的数算法(附完整源码)
    查看>>
    Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
    查看>>
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串levenshtein distance编辑距离算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>
    Objective-C实现字符串split函数功能算法(附完整源码)
    查看>>
    Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
    查看>>
    Objective-C实现字符串word patterns单词模式算法(附完整源码)
    查看>>
    Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
    查看>>
    Objective-C实现字符串加解密(附完整源码)
    查看>>
    Objective-C实现字符串反转(附完整源码)
    查看>>
    Objective-C实现字符串复制功能(附完整源码)
    查看>>
    Objective-C实现字符串字符是否可以重新排列以形成回文算法(附完整源码)
    查看>>
    Objective-C实现字符串排列算法(附完整源码)
    查看>>
    Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
    查看>>
    Objective-C实现字符串是否是有效的url地址算法(附完整源码)
    查看>>
    Objective-C实现字符串是否是有效的电子邮件地址算法(附完整源码)
    查看>>
    Objective-C实现字符串替换replace函数功能(附完整源码)
    查看>>