C++ Primer 第五版 中文版 阅读笔记 + 个人思考

C++ Primer 第五版 中文版 阅读笔记 + 个人思考

第 10 章 泛型算法

泛型的体现:容器类型(包括内置数组),元素类型,元素操作方法。
顺序容器定义的操作:insert,erase,back,front,empty,begin_iterator,end_next_iterator。

10.1 概述

算法在容器泛型上的实现:遍历由两个迭代器指定的一个元素范围进行操作。
算法依赖于元素类型支持的操作,允许我们自定义操作代替默认的运算符。

代码演示:find操作的是迭代器,可以用于任何容器。

#include <iostream>  
#include <vector>  
#include <list>  
#include <set>  
#include <map>  
#include <algorithm>  

int main() {
   
    // 1. 在一个向量中查找元素  
    std::vector<int> vec = {
    1, 2, 3, 4, 5 };
    int valToFind = 3;
    if (std::find(vec.begin(), vec.end(), valToFind) != vec.end()) 
    {
   
        std::cout << "Found " << valToFind << " in vector." << std::endl;
    }
    else 
    {
   
        std::cout << valToFind << " not found in vector." << std::endl;
    }

    // 2. 在一个列表中查找元素  
    std::list<int> lst = {
    1, 2, 3, 4, 5 };
    valToFind = 4;
    if (std::find(lst.begin(), lst.end(), valToFind) != lst.end()) 
    {
   
        std::cout << "Found " << valToFind << " in list." << std::endl;
    }
    else 
    {
   
        std::cout << valToFind << " not found in list." << std::endl;
    }

    // 3. 在一个集合中查找元素(集合中的元素是唯一的,所以只会找到一个匹配项)  
    std::set<int> s = {
    1, 2, 3, 4, 5 };
    valToFind = 3;
    if (std::find(s.begin(), s.end(), valToFind) != s.end()) 
    {
   
        std::cout << "Found " << valToFind << " in set." << std::endl;
    }
    else 
    {
   
        std::cout << valToFind << " not found in set." << std::endl;
    }

    // 4. 在一个映射中查找元素(键值对)  
    std::map<int, std::string> m = {
    {
   1, "one"}, {
   2, "two"}, {
   3, "three"} };
    
    auto mit = std::find(m.begin(), m.end(), std::make_pair(2, "two"));
    if (mit != m.end()) 
    {
   
        std::cout << "Found " << mit->first << " in map with value: " << mit->second << std::endl;
    }
    else 
    {
   
        std::cout << valToFind << " not found in map." << std::endl;
    }

    return 0;
}

运行结果:
运行结果

代码演示:find函数用于内置数组。

#include <iostream>  
#include <algorithm>

int main() 
{
   
    int array[5] = {
    1,2,3,4,5 };
    int val = 4;
    if (std::end(array) != std::find(std::begin(array), std::end(array), val))
    {
   
        std::cout << val << " is present" << std::endl;
    }
    else
    {
   
        std::cout << val << " is not present" << std::endl;
    }

    if (array + 2 != std::find(array, array + 2, val))
    {
   
        std::cout << val << " is present" << std::endl;
    }
    else
    {
   
        std::cout << val << " is not present" << std::endl;
    }

    return 0;
}

运行结果:
运行结果

算法运行于迭代器之上,不会修改容器大小。
存在插入器 inserter :赋值时,在底层容器上执行插入操作。

练习10.1

代码演示:

#include <iostream>  
#include <algorithm>
#include <vector>

int main() 
{
   
    std::vector<int> vi = {
    1,2,3,3,3,4,5 };
    int val = 3;
    std::cout << val << " count: " << std::count(vi.begin(), vi.end(), val) << std::endl;

    val = 2;
    std::cout << val << " count: " << std::count(vi.begin(), vi.end(), val) << std::endl;

    return 0;
}

运行结果:
运行结果

练习10.2

代码演示:

#include <iostream>  
#include <algorithm>
#include <vector>
#include <string>

int main() 
{
   
    std::vector < std::string > vs = {
    "hello","hello","hello","world","world" };
    std::string val = "hello";

    std::cout << val << " count: " << std::count(vs.begin(), vs.end(), val) << std::endl;

    val = "world";
    std::cout << val << " count: " << std::count(vs.begin(), vs.end(), val) << std::endl;

    return 0;
}

运行结果:
运行结果

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 06:10:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 06:10:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 06:10:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 06:10:06       20 阅读

热门阅读

  1. 树莓派Debian系统中如何用mDNS广播自己的ip地址

    2024-01-10 06:10:06       33 阅读
  2. [力扣 Hot100]Day1 两数之和

    2024-01-10 06:10:06       41 阅读
  3. 【docker】docker-compose.yml 语法详解

    2024-01-10 06:10:06       34 阅读
  4. nginx upstream负载均衡模块

    2024-01-10 06:10:06       28 阅读
  5. xcode 14.3升级 pod升级

    2024-01-10 06:10:06       29 阅读
  6. Hive之set参数大全-2

    2024-01-10 06:10:06       27 阅读
  7. qt-day2

    qt-day2

    2024-01-10 06:10:06      31 阅读
  8. xcode-docC

    2024-01-10 06:10:06       35 阅读
  9. Hive之函数解析

    2024-01-10 06:10:06       28 阅读
  10. 与AI合作 -- 单例工厂2遗留的问题:bard的错误

    2024-01-10 06:10:06       33 阅读
  11. 【力扣100】【好题】155.最小栈

    2024-01-10 06:10:06       40 阅读
  12. ES6规范

    2024-01-10 06:10:06       28 阅读
  13. 【数值分析】逼近,正交多项式

    2024-01-10 06:10:06       35 阅读