CGAL 概念模型及Traits 概述

CGAL 概念模型及Traits

本节释了概念Concepts 、模型Models以及Traits类的含义。

CGAL Concepts and Models

概念Concepts是对类型的一组要求,即它具有特定的嵌套类型、特定的成员函数或具有特定的以该类型为参数的自由函数。概念的模型 Models是一个满足概念需求的类。

示例

template <typename T>
T duplicate(T t)
{
  return t;
}

如果想用一个类 C 来实例化这个函数,这个类必须至少提供一个复制构造函数,而且我们说 类C 必须是 CopyConstructible 的模型。单例类不能满足这个要求。
CopyConstructible 是一个概念,可构造拷贝的概念;这里类C是一个模型。

template <typename T>
T& std::min(const T& a, const T& b)
{
  return (a<b)?a:b;
}

只有当 operator<(…) 是为 T 类型定义的,并且我们说该类型必须是LessThanComparable的模型时,这个函数才能编译。

LessThanComparable 是概念,凡是重载operator<(…)操作的类T都是LessThanComparable 的模型。

Kernels and Traits Classes

template<class InputIterator , class OutputIterator , class Traits >
OutputIterator convex_hull_2(
			  InputIterator first,
              InputIterator beyond,
              OutputIterator result,
              const Traits & ch_traits)

典型的凸包算法使用什么几何基元?当然,这取决于算法,所以让我们考虑一下什么可能是最简单的高效算法,即所谓的“Graham/Andrew Scan”。该算法首先对点集进行从左到右的排序,然后从排序列表中一个接一个地添加点,增量地构建凸包。要做到这一点,它必须至少知道一些点的类型,它应该知道如何对这些点排序,而且它必须能够评估三个点的方向
这就是模板参数 Traits 的作用。
对于 ch_graham_andrew() ,它必须提供以下嵌套类型:

  • Traits::Point_2
  • Traits::Less_xy_2
  • Traits::Left_turn_2
  • Traits::Equal_2
    Left_turn_2 负责方向测试,而 Less_xy_2 用于对点进行排序。这些类型必须满足的要求以 ConvexHullTraits_2 的概念完整记录。
template <class InputIterator, 
		  class OutputIterator, 
		  class Point_2, class Less_xy_2, class Left_turn_2, class Equal_2>
		  
OutputIterator ch_graham_andrew(
				  InputIterator  first,
                  InputIterator  beyond,
                  OutputIterator result);

任何CGAL中的概念 Kernel 的模型提供了 ConvexHullTraits_2 概念所需要的东西。

总结

  1. 概念Kernel的模型Point_2、和Point_3 都提供了 ConvexHullTraits_2 概念所需要的东西。
  2. 概念BGL Graph的模型有Surface_mesh , Polyhedron , Arrangement_2 ,和2D triangulation classes 都提供了boost::graph_traits概念所需的东西。

在图模型上操作的算法在类boost::graph_traits的帮助下确定类型。这些类型是 vertex_descriptor ,类似于CGAL数据结构中的顶点句柄,或 edge_descriptor ,类似于半边数据结构中的半边句柄或二维三角网格中的类型边。还有一种迭代器,比如类似于CGAL数据结构中的顶点迭代器的 vertex_iterator ,以及类似于边循环器的 out_edge_iterator ;它能够迭代与一个顶点相关的边。这两个迭代器是相似的,但并不等价,因为它们的值类型是 vertex_descriptor ,而在CGAL句柄中,迭代器和循环器的值类型都是相同的,即顶点类型或边类型。

boost::graph_traits<Graph>::vertex_descriptor vd;
boost::graph_traits<Graph>::edge_iterator ei;
...

这里的Graph 可以是Surface_mesh , Polyhedron , Arrangement_2 ,和2D triangulation classes

template < class VertexListGraph, class Param, class Tag, class Rest >
inline void dijkstra_shortest_paths(const VertexListGraph& g,
    typename graph_traits< VertexListGraph >::vertex_descriptor s,
    const bgl_named_params< Param, Tag, Rest >& params)
{}

算法dijkstra_shortest_paths的第一个参数是图的模型,第二个参数是boost::graph_traits用于确定类型。

相关内容

示例1

template <typename T>
diff_int(T t,ture_type)
{
}
template <typename T>
diff_int(T t,false_type)
{
}
template <typename T>
void diff(T t)
{
 //决定调用哪一个函数
  diff_int(t,std::is_integral<T>());
}

示例2

traits

template<typename Iterator, typename T>
void func_impl(Iterator iter, T t)
{
    T temp;//这里就解决了问题
}
 
template<typename Iterator>
void func(Iterator iter)
{
    func_impl(iter, *iter);//func的工作全部都移到func_impl里面了
}
 
int main(int argc, const char *argv[])
{
    int i;
    func(&i);
}

在这里插入图片描述

示例3

在这里插入图片描述
在这里插入图片描述

STL

在这里插入图片描述

参考及相关链接

  1. https://doc.cgal.org/latest/Manual/tutorial_hello_world.html
  2. STL源码解析
  3. CGAL Hello World
  4. C++核心编程——初识STL——STL的基本概念和六大组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/873694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时&#xff0c;您应该注意以下几个关键点&#xff1a; 平衡精度 平衡精度是衡量平衡机性能的核心指标&#xff0c;直接影响到不平衡量的检测与校准的准确性&#xff0c;从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声&#xff0c;提高磨…

IEEE投稿模板翻译

>将这一行替换为您的稿件id号(双击此处编辑)< IEEE 期刊和会议论文的撰写准备&#xff08;2022&#xff09; 第一作者 A. 作者&#xff0c;IEEE成员&#xff0c;第二作者 B. 作者&#xff0c;第三作者 C. 作者 Jr.&#xff0c;IEEE成员 摘要—本文档为IEEE会刊、期刊和…

推荐一个Python流式JSON处理模块:streaming-json-py

每天&#xff0c;我们的设备、应用程序和服务都在生成大量的数据流&#xff0c;这些数据往往大多是以JSON格式存在的。 如何高效地解析和处理这些JSON数据流是一大挑战。今天&#xff0c;我要为大家介绍一个能极大简化这一过程的利器&#xff1a;streaming-json-py streaming…

负载均衡调度器--LVS

文章目录 集群和分布式集群分布式 LVS介绍LVS特点LVS工作原理LVS集群架构 LVS集群中的术语CIPVIPRSDIPRIP LVS集群的工作模式NAT模式DR模式DR的工作原理DR的特点:DR的网络配置1.配置负载均衡器2.配置后端服务器lo接口的作用 3.测试连接&#xff1a; DR的典型应用场景 TUN模式 L…

新电脑Win11系统想要降级为Win10怎么操作?

前言 现在的电脑大部分都是Windows 11系统&#xff0c;组装机还好一些&#xff0c;如果想要使用Windows 10&#xff0c;只需要在安装系统的时候选择Windows 10镜像即可。 但是对于新笔记本、厂商的成品机、一体机来说&#xff0c;只要是全新的电脑&#xff0c;基本上都是Wind…

评论的组件封装

主评论的人在数组第一层级&#xff0c;回复的评论都在children里面 【{ name:"张三" idGenerator: 475403892531269 info_Conmment":"今天天气晴朗&#x1f600;" children:[ { mainIdGenerator:475388950118469 name:"张三" name1&#x…

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家&#xff0c;并整理七大洲和这些国家的KML矢量数据分析分享给大家&#xff0c;如果你需要这些数据&#xff0c;请在文末查看领取方式。 世界上横跨两大洲的国家 …

2024全开源彩虹晴天多功能系统源码/知识付费系统/虚拟商城系统 完美可用带教程

源码简介&#xff1a; 2024最新彩虹晴天多功能系统源码&#xff0c;知识付费虚拟商城&#xff0c;完美可用&#xff0c;无需授权、国内外服务器皆可搭建、无论是不是备案域名也都可以部署、可以商业运营。 这个源码实用&#xff0c;它不仅完美可用&#xff0c;而且完全免F&am…

CSS之我不会

非常推荐html-css学习视频&#xff1a;尚硅谷html-css 一、选择器 作用&#xff1a;选择页面上的某一个后者某一类元素 基本选择器 1.标签选择器 格式&#xff1a;标签{} <h1>666</h1><style>h1{css语法} </style>2.类选择器 格式&#xff1a;.类…

2024 乐鑫全球开发者大会精选 QA

2024 乐鑫科技全球开发者大会精彩落幕&#xff01;我们在这三天的大会中&#xff0c;收获了来自开发者们的热烈互动和丰富提问。在每晚的“研发主管一对一问答”环节中&#xff0c;来自乐鑫的技术专家们对这些技术问题进行了深入的剖析和详尽的解答。为了让错过这场思想碰撞的观…

百度大模型构建智能问答系统技术实践

背景 随着大模型的飞速发展&#xff0c; AI 技术开始在更多场景中普及。在数据库运维领域&#xff0c;我们的目标是将专家系统和 AI 原生技术相融合&#xff0c;帮助数据库运维工程师高效获取数据库知识&#xff0c;并做出快速准确的运维决策。 传统的运维知识库系统主要采用…

FPGA低功耗设计

FPGA低功耗设计 文章目录 FPGA低功耗设计前言一、功耗类型1.1 动态功耗1.2 静态功耗1.3 浪涌功耗 二、系统级低功耗设计2.1 **多电压技术&#xff1a;**即工作频率、电压和功耗的关系2.2 系统时钟分配&#xff1a;2.3 软硬件划分2.4 p 或单元库选择 三、RTL级别低功耗设计3.1 并…

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始&#xff0c;按照书籍的划分&#xff0c;第10章开始就进入保护模式&#xff08;Protected Mode&#xff09;部分了&#xff0c;感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断&#xff08;Interrupt&#xff09;的设计&#…

jantic/DeOldify部署(图片上色)附带Dockerfile和镜像

克隆代码到DeOldify git clone https://github.com/jantic/DeOldify.git DeOldifyDeOldify源码 安装依赖 这里会安装python以及创建deoldify环境 cd DeOldify conda env create -f environment.yml(base) rootDESKTOP-1FOD6A8:~/DeOldify# conda env create -f environment.ym…

MySQL递归查询

一、为什么要使用MySQL递归查询 在很多场景下有树形表需要去遍历&#xff0c;若通过编程语言去递归遍历树将多次进行与数据库的交互操作&#xff0c;相当于100个葡萄去楼下超市买100次&#xff0c;在路上多走了99次浪费了大量时间&#xff0c;肯定不如一次买100葡萄省事。所以与…

景联文科技:专业数据标注公司,推动AI技术革新

数据标注作为AI技术发展的重要支撑&#xff0c;对于训练高质量的机器学习模型以及推动应用领域的创新具有不可替代的作用。 景联文科技作为专业的数据标注公司&#xff0c;致力于提供专业的数据标注服务&#xff0c;帮助客户解决AI链条中的数据处理难题&#xff0c;共同推动人工…

2024霸王餐小程序cps,h5公众号小程序开源版系统搭建开发,外卖霸王餐小程序系统源码

目录 前言&#xff1a; 一、霸王餐小程序的操作是怎么样的&#xff1f; 二、霸王餐系统后台 三、怎么搭建部署? 前言&#xff1a; 霸王餐项目基于美团和饿了么平台开发的小程序。 一、霸王餐小程序的操作是怎么样的&#xff1f; 1、进入小程序后选择自己要下单的店铺&am…

RTMP播放器延迟最低可以做到多少?

技术背景 RTMP播放器的延迟可以受到多种因素的影响&#xff0c;包括网络状况、推流设置、播放器配置以及CDN分发等。因此&#xff0c;RTMP播放器的延迟并不是一个固定的数值&#xff0c;而是可以在一定范围内变化的。 正常情况下&#xff0c;网上大多看到的&#xff0c;针对R…

华为手机找不到wifi调试?不急,没有wifi调试一样可以进行局域网模式调试

最近小黄在使用uniapp启动无线调试的时候突然发现华为的手机突然找不到wifi调试了&#xff0c;那么我们怎么进行无线调试呢&#xff1f; 其实他只是找不到开关而已&#xff0c;正常使用就行。 1.使用数据线连接手机。 打开cmd命令行执行&#xff1a;adb tcpip 5555 2.再执行ad…

论文120:Giga-SSL: Self-supervised learning for gigapixel images (2023, CVPR, 开源)

文章目录 1 要点2 方法2.1 算法设计2.2 设计选择 1 要点 题目&#xff1a;用于千兆像素图像的自监督学习 (Giga-SSL: Self-Supervised Learning for Gigapixel Images) 代码&#xff1a;https://github.com/trislaz/gigassl 研究目的&#xff1a; 现有的WSI分类方法依赖于有…