stl_algorithm算法之融合算法

融合算法:

7.64、template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
  while (true) {
    if (first1==last1) return std::copy(first2,last2,result);
    if (first2==last2) return std::copy(first1,last1,result);
    *result++ = (*first2 < *first1)? *first2++ : *first1++; //使用op< 进行比较排序。
  }
}
//第一个区间和第二个区间进行融合,融合之后的result是排序好的。

7.65、inplace_merge //合并

7.66、template <class InputIterator1, class InputIterator2>
bool includes (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2)
{
  while (first2!=last2) {
    if ( (first1==last1) || (*first2 < *first1) ) return false;
    if (!(*first1<*first2)) ++first2;
    ++first1;
  }
  return true;
}
//所做的事情是:判断第一个区间是否包含在第二个区间中。前提是这两个区间是已经排序好的。

7.67、template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_union (InputIterator1 first1, InputIterator1 last1,
               InputIterator2 first2, InputIterator2 last2,
               OutputIterator result)
{
  while (true)
  {
    if (first1==last1) return std::copy(first2,last2,result);
    if (first2==last2) return std::copy(first1,last1,result);
    if (*first1<*first2)
    {
      *result = *first1; ++first1;
    }
    else if (*first2<*first1)
    {
      *result = *first2; ++first2;
    }
    else
    {
      *result = *first1; ++first1; ++first2;
    }
    ++result;
  }
  return result;
}
//所做的事情是:合并两个区间并排好序.

7.68、template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
                   InputIterator2 first2, InputIterator2 last2,
                   OutputIterator result)
{
  while (first1!=last1 && first2!=last2)
  {
    if (*first1 < *first2)
      ++first1;
    else if (*first2 < *first1)
      ++first2;
    else {
      *result = *first1;
      ++result; ++first1; ++first2;
    }
  }
  return result;
}
//所做的事情是:获得两个区间的交集,返回这个集合。

7.69、template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2, InputIterator2 last2,
                  OutputIterator result)
{
  while (first1!=last1 && first2!=last2)
  {
    if (*first1<*first2)
    {
      *result = *first1; ++result; ++first1;
    }
    else if (*first2<*first1)
      ++first2;
    else
    {
      ++first1; ++first2;
    }
  }
  return std::copy(first1,last1,result);
}
//所做的事情是:获得第一个区间中与第二个区间不同的元素。

7.70、template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1,
                        InputIterator2 first2, InputIterator2 last2,
                        OutputIterator result)
{
  while (true)
  {
    if (first1==last1) return std::copy(first2,last2,result);
    if (first2==last2) return std::copy(first1,last1,result);
    if (*first1<*first2)
    {
      *result=*first1; ++result; ++first1;
    }
    else if (*first2<*first1)
    {
      *result = *first2; ++result; ++first2;
    }
    else
    {
      ++first1; ++first2;
    }
  }
}
//所做的事情是:获取两个区间中不同的元素。
时间: 2024-08-27 22:13:21

stl_algorithm算法之融合算法的相关文章

[stm32] MPU6050 HMC5883 Kalman 融合算法移植

一.卡尔曼滤波九轴融合算法stm32尝试 1.Kalman滤波文件[.h已经封装为结构体] 1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics-> All rights reserved-> 2 3 This software may be distributed and modified under the terms of the GNU 4 General Public License version 2 (GPL2) as

图像融合算法(归纳篇)

综合关注几篇的papers的图像融合算法,对整个过程作归纳,与大家分享(^_^).基于sift特征的全景拼接方法的整个过程的大致流程: 对需拼接的图像进行预处理,主要是几何校正和消噪.对于几何校正,因为我们考虑的是视频的实时处理,那么我们只需考虑摄像机的所有运动形式,其中包含8个自由度,可用投影变换来表示.H=[m0 m1 m2;m3 m4 m5;m6 m7 1],考虑到它的算法复杂度已经有n的3次方,我们可以考虑通过控制摄像机的运动方式来减少复杂度,比如令摄像机只有平移旋转和缩放,即仿射变换,

融合算法集锦

一.PCA: PCA是一种用来对图像特征降维的方法,PCA通过将多个变量通过线性变换以选出较少的重要变量.它往往可以有效地从过于"丰富"的数据信息中获取最重要的元素和结构,去除数据的噪音和冗余,将原来复杂的数据降维,揭示隐藏在复杂数据背后的简单结构.近年来,PCA方法被广泛地运用于计算机领域,如数据降维.图像有损压缩.特征追踪等等.PCA方法是一个高普适用方法,它的一大优点是能够对数据进行降维处理,我们通过PCA方法求出数据集的主元,选取最重要的部分,将其余的维数省去,从而达到降维和简

图像融合算法(感应篇)

复按照几个papers图像融合算法,诱导整个过程,与您分享(^_^). 基于sift的全景拼接方法的整个过程的大致流程: 对需拼接的图像进行预处理.主要是几何校正和消噪.对于几何校正.因为我们考虑的是视频的实时处理,那么我们仅仅需考虑摄像机的全部运动形式,当中包括8个自由度.可用投影变换来表示.H=[m0 m1 m2;m3 m4 m5;m6 m7 1],考虑到它的算法复杂度已经有n的3次方.我们能够考虑通过控制摄像机的运动方式来减少复杂度,比方令摄像机仅仅有平移旋转和缩放,即仿射变换,减少了一次

Python有黄金屋,OpenCV有颜如玉,人脸融合算法开源,堪比整容!

python & opencv 打造当前相机最新的人脸融合功能. 论述 目前大部分IT大企业对人脸技术都是有研究的,人脸识别.人脸检测等等,到我们日常P图软件,随便说一个我知道的天天P图软件APP就可实现,Face++已经打造了人脸技术的API,但是它是收费的并且有点小贵,所以这次把人脸融合算法直接开源,供大家利用.(Python源码至于文末) 先来瞧瞧各大软件与我们利用Python_OpenCV实现的效果差距: 左边为被融合的图,右边为欲融合的图 手把手教你如何实现人脸融合技术: 零.融合函数

十大经典预测算法六---集成学习(模型融合算法)

模型融合算法概念 它不是具体的指某一个算法,而是一种把多个弱模型融合合并在一起变成一个强模型的思想 用模型融合算法的原因 1.单个模型容易过拟合,多个模型融合可以提高范化能力 2.单个模型预测能力不高,多个模型往往能提高预测能力 3.对于数据集过大或过小,可以分别进行划分和有放回的操作,产生不同的数据子集,然后通过数据子集训练不同的分类模型,最终合并成一个大的分类器 4.对于多个异构的特征集的时候,很难进行融合,可以考虑每个数据集构建一个分类模型,然后将多个模型融合 5.模型融合算法成功的关键在

多传感器数据融合算法综述

文章内容来源:https://blog.csdn.net/ZXQHBD/article/details/69389019 多传感器数据融合是一个新兴的研究领域,是针对一个系统使用多种传感器这一特定问题而展开的一种关于数据处理的研究.多传感器数据融合技术是近几年来发展起来的一门实践性较强的应用技术,是多学科交叉的新技术,涉及到信号处理.概率统计.信息论.模式识别.人工智能.模糊数学等理论. 近年来,多传感器数据融合技术无论在军事还是民事领域的应用都极为广泛.多传感器融合技术已成为军事.工业和高技术

stl_algorithm算法之变动性算法和非动性算法

七.算法:(算法头文件:<algorithm>) 所有的算法都需要iterator的支持,列如支持++,*,op=,op==,等等.. 非变动性算法: 7.1.template<class InputIterator, class UnaryPredicate> bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred) //要所有的数据都是符合当前的条件才回返回TRUE,否则FALSE. {

聚类算法和分类算法总结

原文:http://blog.chinaunix.net/uid-10289334-id-3758310.html 聚类算法的种类: 基于划分聚类算法(partition clustering) k-means: 是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据 k-modes: K-Means算法的扩展,采用简单匹配方法来度量分类型数据的相似度 k-prototypes: 结合了K-Means和K-Modes两种