通用的(泛型)算法 generic algorithm 总览

特性:

1,标准库的顺序容器定义了很少的操作,比如添加,删除等。

2,问题:其实还有很多操作,比如排序,查找特定的元素,替换或删除一个特定值等,但是标准库并未给每个容器都定义成员函数来实现这些操作。

3,解决办法:因为算法是相同的逻辑,只是进行运算的元素的类型是不同的。所以定义了一组与类型无关的通用的(泛型)算法:generic algorithm。它们实现了实现了上述标准库未提供的操作。

4,好处:不用为每个容器实现上述的操作。

大多数算法都定义在头文件algorithm中,数值相关的算法定义在头文件numeric中。

关键概念:算法永远不会执行容器的操作。

通用算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。算法永远不会改变底层容器的大小。算法可能改变容器中保存的元素的值,也可能在容器内移动元素,但永远不会直接添加或删除元素。

以find算法为例,find函数可以接受任意类型的容器

#include <iostream>
#include <vector>
#include <algorithm>
#include <list> using namespace std; int main(){ //find vector<int>
/*
int val = 121;
vector<int> ivec{1,2,3,12,34};
vector<int>::const_iterator result = find(ivec.cbegin(), ivec.cend(),
val);
cout << *result << endl;
*/ //find list<string>
/*
string s("aaa");
list<string> li{"ddd","aaa1","aaa","dds"};
list<string>::const_iterator result =
find(li.cbegin(), li.cend(), s);
cout << *result << endl;
*/ //find 内置数组
int val = 22;
int ar[] = {1,22,33,4};
int* result = find(begin(ar), end(ar), val);
cout << *result << endl;
auto res1 = find(ar, ar + 4, val);
cout << *res1 << endl;
}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 通用的(泛型)算法 generic algorithm 总览的更多相关文章

  1. 【足迹C++primer】30、概要(泛型算法)

    概要(泛型算法) 大多数算法的头文件中定义algorithm在. 标准库也是第一个文件numeric它定义了一套通用算法. #include<iostream> #include<n ...

  2. [C++ Primer] : 第10章: 泛型算法

    概述 泛型算法: 称它们为"算法", 是因为它们实现了一些经典算法的公共接口, 如搜索和排序; 称它们是"泛型的", 是因为它们可以用于不同类型的元素和多种容器 ...

  3. Chapter10(泛型算法)--C++Prime笔记

    关键:算法通过在迭代器上进行操作来实现类型无关.算法不改变所操作序列的大小. 1.算法大多都定义在algorithm头文件中,标准库还在头文件numeric中定义了一组数值泛型算法. 2.泛型算法永远 ...

  4. C++基础之泛型算法

    标准库并未给每个容器添加大量功能,因此,通过大量泛型算法,来弥补.这些算法大多数独立于任何特定的容器,且是通用的,可用于不同类型的容器和不同的元素. 迭代器使得算法不依赖容器,但是算法依赖于元素的类型 ...

  5. 【c++ Prime 学习笔记】第10章 泛型算法

    标准库未给容器添加大量功能,而是提供一组独立于容器的泛型算法 算法:它们实现了一些经典算法的公共接口 泛型:它们可用于不同类型的容器和不同类型的元素 利用这些算法可实现容器基本操作很难做到的事,例如查 ...

  6. C++ 泛型算法

    <C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛 ...

  7. C++的那些事:容器和泛型算法

    一.顺序容器 1,标准库定义了3种类型的顺序容器:vector.list和deque.它们的差别主要在于访问元素的方式,以及添加或删除元素相关操作运算代价.标准库还提供了三种容器适配器:stack.q ...

  8. C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法

    大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ●  find算法,算法接受一对迭代 ...

  9. 【STL】帮你复习STL泛型算法 一

    STL泛型算法 #include <iostream> #include <vector> #include <algorithm> #include <it ...

随机推荐

  1. apache用户认证访问机制(转)

    Apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证.前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,第1步:我们在/var/ww ...

  2. MyBatis源码解析(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...

  3. SHELL脚本--管道和重定向基础

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.8.1 匿名管道"|" 管道符号意如其 ...

  4. Tomcat(一):背景知识和安装tomcat

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 基础背景知识 1.1 java和jdk概念 无论是何种程序,要能在计算机 ...

  5. Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken

    Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins功能包括: ...

  6. iOS 快速排序

    一.快速排序概念及其思想 快速排序(QuickSort),又称为交换排序,是分治算法的一种,快速排序采用分治的策略. 1.分治法的基本思想: 将原问题分解为若干个规模更小但结构和原问题相似的子问题.递 ...

  7. C#线程同步--限量使用

    问题抽象:当某一资源同一时刻允许一定数量的线程使用的时候,需要有个机制来阻塞多余的线程,直到资源再次变得可用.线程同步方案:Semaphore.SemaphoreSlim.CountdownEvent ...

  8. ADO.NET基础学习 一(连接数据库)

    (记录下方便自己复习) 概念 简单地理解为用来连接数据库的类. 工作流程 ①Connection对象用来连接数据库. 两种连接方式:Windows身份验证 / sqlserver验证 private ...

  9. oracle expdp自动备份脚本

    windows: @echo off echo ================================================ echo Windows环境下Oracle数据库的自动 ...

  10. mysql 数据库的备份与还原 at winows

    把cmd的当前目录切换到mysql安装目录; 备份数据库world mysqldump -u root -p  world < c:\all.sql 导入数据库 新建schema world 常 ...