CGAL 概念模型及Traits 概述

news2024/11/15 22:35:07

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.coloradmin.cn/o/2117551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大厂最爱问的MVCC,到底是个啥?

引言 多版本并发控制&#xff08;MVCC&#xff09;是一种用于提高数据库并发性能的技术&#xff0c;尤其在处理高并发读写操作时极为有效。MVCC通过维护数据的多个版本来避免读写冲突&#xff0c;使得读操作无需阻塞写操作&#xff0c;写操作也不会影响读操作。下面&#xff0…

内网环境使用Docker部署Qwen2模型-vLLM篇

在此之前&#xff0c;我们已成功利用Docker与Ollama框架&#xff0c;在内网环境中部署了Qwen2模型。下面我们再来看一下使用Docker与vLLM框架部署Qwen2模型。 准备vLLM镜像 在一台具备网络环境的机器上执行以下命令&#xff0c;拉取vLLM的镜像&#xff1a; # 官方镜像 docke…

探索MySQL数据查询语言的无限魅力:精准检索,驾驭数据海洋的钥匙

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

可视掏耳勺真的有作用吗?测评热门可视掏耳勺

随着现代人对个护健康的日益关注&#xff0c;可视掏耳勺这掏耳神器逐渐风靡市场&#xff0c;但同时也伴随着部分质疑的声音&#xff0c;甚至被贴上“智商税”的标签。因为有不少消费者使用时出现画质低清、材质不舒服等现象&#xff0c;那么&#xff0c;可视掏耳勺真的好用吗&a…

上海亚商投顾:沪指再创阶段新低 全市场下跌个股超4400只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指9月6日冲高回落&#xff0c;午后续创调整新低&#xff0c;创业板指跌1.7%。券商、保险等金融股逆势走强&a…

快速入门游戏领域,开发游戏需要哪些技术?

在这个充满创意和技术的时代&#xff0c;游戏行业成为众多创新人才追求梦想的热土。对于准备踏入这个充满挑战与机遇的领域的新人来说&#xff0c;了解游戏开发流程是至关重要的。 游戏市场蓬勃发展&#xff0c;游戏行业未来行情可观&#xff0c;在这个充满创意和技术的时代&a…

Swiper轮播图框架【前端 24】

Swiper轮播图框架 在如今的网页设计中&#xff0c;轮播图已成为一种不可或缺的元素&#xff0c;它能够以动态的方式展示图片、视频或文本信息&#xff0c;有效吸引用户的注意力并提升页面的互动性。在众多轮播图实现框架中&#xff0c;Swiper以其高度的可定制性、流畅的滑动效果…

浏览器百科:网页存储篇-如何在Chrome中打开IndexedDB窗格(十一)

1.引言 在现代Web开发中&#xff0c;网页存储技术扮演着至关重要的角色。IndexedDB作为一种低级API&#xff0c;允许客户端存储大量结构化数据&#xff0c;并提供高性能的搜索能力。在上一篇文章中&#xff0c;我们深入探讨了IndexedDB的基础知识及其应用场景。为了更有效地调…

回收玻璃减薄中的氢氟酸

回收玻璃减薄中的氢氟酸是一个重要的环保和资源再利用环节。在玻璃减薄过程中&#xff0c;氢氟酸作为主要的化学蚀刻剂&#xff0c;与玻璃基板表面的二氧化硅等成分发生反应&#xff0c;实现玻璃的减薄。然而&#xff0c;随着反应的进行&#xff0c;氢氟酸的浓度会逐渐降低&…

爆改YOLOv8|利用BiFPN双向特征金字塔改进yolov8

1&#xff0c;本文介绍 BiFPN&#xff08;Bidirectional Feature Pyramid Network&#xff09;是一种增强特征金字塔网络&#xff08;FPN&#xff09;的方法&#xff0c;旨在改善多尺度特征融合。BiFPN的主要创新点包括&#xff1a; 双向特征融合&#xff1a;与传统FPN仅在自下…

AI智能工牌:告别手动录入,1小时上门服务报告,3分钟生成

在当今快速发展的商业环境中&#xff0c;提高工作效率和客户满意度成为了企业追求的核心目标之一。传统的手动录入方式不仅耗时耗力&#xff0c;而且容易出错&#xff0c;特别是在上门服务行业&#xff0c;如何快速准确地完成服务报告成为了一个亟待解决的问题。AI智能工牌的出…

从零到精通:亚马逊和Target自养号测评的下单支付与fang关联技巧

在跨境电商的广阔领域里&#xff0c;自养号测评策略已崛起为众多卖家实现低成本、高效市场推广的一把利器。然而&#xff0c;要驾驭好这一策略&#xff0c;确保其成功实施&#xff0c;关键在于精准把握并满足一系列核心条件。接下来&#xff0c;我们将深入剖析这些条件&#xf…

IEEE投稿模板翻译

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

《Neon程序员指南》文档中关于矩阵转置的两处笔误

今天在看《Neon程序员指南》&#xff08;Neon Programmer Guide for Armv8-A Coding for Neon&#xff09;发现两处笔误&#xff0c;随手记在这里。 图6-11中&#xff0c;左边的指令应该是trn1 v1.4s, v0.,4s, v3.4s。 图6-15中trn1的图中有两个箭头画错了。

漏洞挖掘 | 记一次edu通过奖学金名单泄露学号的横向渗透

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这篇文章主要是给师傅们分享下一个简单的手法&#xff0c;通过打edu的时候&#xff0c;我们可以在一些学生管理登录后台&#xff0c;需要我们使用账号是学号登录的系统&#xff0c;然后我们可以尝试通过去网上找公开的奖学金名单…

JAVA在线教育新利器高效答题系统小程序源码

在线教育新利器——高效答题系统 &#x1f680;【开篇引入&#xff1a;教育新风尚】&#x1f680; 在这个快节奏的时代&#xff0c;学习不再局限于教室的四角&#xff0c;在线教育如雨后春笋般蓬勃发展。而今天&#xff0c;我要给大家揭秘一款在线教育的新宠儿——高效答题系…

传统CV算法——threshold阈值算法介绍

阈值化函数我的理解为&#xff0c;在计算机图像视觉中&#xff0c;我们常见的RGB图像表现的信息过多&#xff0c;可能会存在于一些掺杂的噪声&#xff08;因为针对视觉目标不是我们需要的&#xff09;&#xff0c;因此使用阈值算法&#xff0c;直接效果就是可以降噪&#xff0c…

微信公众号获取 openid: 从零到一快速实现一个微信公众号授权项目

一. 前言 上一篇文章说到&#xff0c;微信官方团队发了一则公告&#xff0c;美其名曰&#xff1a;“为了优化开发体验&#xff0c;避免多个同一功能接口对开发者造成困扰&#xff0c;微信团队将对下发统一消息接口进行如下调整。” 正是由于这个调整&#xff0c;而将部分开发者…

力扣: 快乐数

文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 …

社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程

1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data/tpl/app/default/yy_shequn2/lib/epay.config.php…