00. 目录

文章目录

  • 00. 目录
  • 01. 保留字
  • 02. 容器概述
  • 03. 构造容器
  • 04. 容器元素操作
  • 05. 预留
  • 06. 附录

01. 保留字

表 8.25 中列出的标识符是保留字,它们的使用严格限于其预定义的含义。 它们不能用作变量名

02. 容器概述

Vector是一个容器,可以容纳任意数量的元素,所有元素都必须具有完全相同的变量类型(即元组、图标对象或向量)。Vector类型的变量是HDevelop特有的。 它在 HDevelop 12.0 或更高版本中可用。 请注意,不能在旧版本的 HDevelop 程序中执行使用Vector变量。

元组或对象的Vector称为一维,元组或对象的Vector的Vector称为二维,依此类推。 Vector的类型在程序中不能改变,即它的维度必须保持不变,元组的Vector不能被分配图标对象,反之亦然。

这是 EBNF(扩展巴科斯-诺尔形式)语法中Vector的定义:

vector = "{" list "}" ;
list = tuplelist | objectlist | vectorlist ;
tuplelist = tuple, {",", tuple} ;
objectlist = object, {",", object} ;
vectorlist = vector, {",", vector} ;
tuple = "[" control "]" ;
control = string | integer | real | boolean ;

03. 构造容器

Vector是通过在大括号中提供以逗号分隔的元素列表来定义的。

vectorT := {[1], [2], [3]} // one-dimensional vector
This is equivalent to:
vectorT := {1, 2, 3} // tuples of length 1 do not require square brackets*Of course, variable names or arbitrary expressions can be used instead of constants.
t1 := 1
vectorT := {t1, t1 * 2, 3}

以下示例定义了一个标图标对象的容器。

read_image (Image, 'clip')
threshold (Image, Region, 0, 63)
connection (Region, ConnectedRegions)
vectorO := {Image, Region, ConnectedRegions}

以下示例定义了一个二维容器变量。

vectorV := {vectorT, {[4,5,6,7], [8,9]}}

也可以使用 .at() 和 .insert() 操作定义容器变量(见下文)。

容器元素的列表也可能是空的,即空Vector {} 是有效的,如下例所示:

vectorV2 := {{1,2}, {}}

但是请注意,空容器没有特定类型。 因此,以下所有三个空赋值有效:

vectorO2 := vectorO
vectorT2 := vectorT
vectorV2 := vectorV
vectorO2 := {}
vectorT2 := {}
vectorV2 := {}

将空容器分配给向量变量等效于 .clear() 操作(见下文)。 另一方面,这意味着将空容器分配给变量不足以定义变量的类型(参见第 276 页的“变量类型”一节)。 这样的变量将具有未定义的类型(因此是无效的),除非它的类型在程序的其他地方正确定义。

04. 容器元素操作

使用 .at() 操作访问单个容器元素,其参数范围从 0 到容器元素个数减去 1。可以组合多个 .at() 操作来访问多维容器的子元素。 访问不存在的容器元素是一个运行时错误。

tuple := vectorT.at(0) // tuple := 1
region := vectorO.at(1) // region := Region
vector := vectorV.at(0) // vector := {[1,2,3]}
tuple := vectorV.at(1).at(1) // tuple := [8, 9]

.at() 操作也用于设置容器元素。 允许写入不存在的容器元素。 如有必要,容器会自动填充空元素。

vectorT.at(2) := 33 // vectorT := {[1], [2], [33]}
vectorE.at(4) := 'text' // vectorE := {[], [], [], [], 'text'}

at() 操作还允许在循环中动态构造容器:

for i:= 0 to 5 by 1
vecT.at(i) := gen_tuple_const(i,5)
endfor

.insert() 操作在指定一个索引位置插入一个值。 它将值从给定索引移到末尾一个位置,并将索引处的值设置为新值。

.remove() 操作执行相反的操作。 它删除指定位置的值并将所有后续值向左移动。

vectorT.insert(1, 99) // vectorT := {[1], [99], [2], [33]}
vectorT.remove(2) // vectorT := {[1], [99], [33]}

与 .at() 操作一样,如果需要,向量会自动填充空元素。

vectorNew.insert(2, 3) // vectorNew := {[], [], [3]}

.concat() 连接两个相同类型和维度的容器。

vectorC := vectorT.concat(vectorNew) // vectorC := {[1], [99], [33], [], [], [3]}

获取容器元素的数量

使用 length() 操作查询容器元素的数量。

i := vectorT.length() // i := 3
j := vectorV.length() // j := 2
k := vectorV.at(0).length() // k := 3

清除容器中元素

.clear() 操作从相应的容器中删除所有元素。 但是请注意,清除的容器仍然保持其变量类型。

vectorT.clear()
* vectorT := vectorO // illegal: vectorT is a tuple vector
* vectorT := vectorV // illegal: vectorT is one-dimensional

修改容器中的元素

.clear()、.insert() 和 .remove() 操作的特殊之处在于它们修改输入容器。
因此,它们只能在独立的程序语句(所谓的可执行表达式)中使用,而不能在赋值或输入参数的表达式中使用。 但是,允许在一个可执行表达式中连接多个修改容器操作,例如:

v := {1, 2, 3}
v.insert(1, 5).insert(2, 4).remove(0) // sets v to {5, 4, 2, 3}

使用executable_expression特殊算子在运算符窗口输入中修改容器。

测试容器变量的(不)相等性

== 和 != 操作符分别用于测试两个容器变量是否相等或不等。

将向量转换为元组,反之亦然

可以使用算子 convert_vector_to_tuple 将容器中的变量转化为元组。

convert_vector_to_tuple (vectorV, T) // T := [1, 2, 3, 4, 5, 6, 7, 8, 9]

可以使用算子 convert_tuple_to_vector_1将元组中的元素转化为容器

convert_tuple_to_vector_1d (T, 1, V) // V := {[1],[2],[3],[4],[5],[6],[7],[8],[9]}

05. 预留

06. 附录

6.1 机器视觉博客汇总
网址:https://dengjin.blog.csdn.net/article/details/116837497

【机器视觉】 HDevelop语言基础(三)-容器和保留字相关推荐

  1. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  2. 【机器视觉】 HDevelop语言基础(五)-多线程

    00. 目录 文章目录 00. 目录 01. 概述 02. 启动线程 03. 等待子线程结束 04. HDevelop中线程的执行 05. 监视线程 06. 挂起和恢复线程 06. 附录 01. 概述 ...

  3. 【机器视觉】 HDevelop语言基础(一)-基本类型和常量

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本类型 04. 控制类型 4.1 整型 4.2 实型 4.3 字符串 4.4 Boolean类型 4.5 句柄类型 05 ...

  4. python标识符的特点_Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别...

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释 单行注释分为两种情况, 例:第一种 #用于计算bim数值 bim=weight/(height*height) 第二种: ...

  5. 【机器视觉】 HDevelop语言基础(六)-错误处理

    00. 目录 文章目录 00. 目录 01. 概述 02. 跟踪算子的返回值 03. 异常处理 04. HDevelop错误码 05. HDevelop 元组操作总结 06. 附录 01. 概述 本节 ...

  6. 【机器视觉】 HDevelop语言基础(四)-流程控制语句

    00. 目录 文章目录 00. 目录 01. 概述 02. if 03. if-else 04. elseif 05. while 06. until 07. for 08. continue 09. ...

  7. 【机器视觉】 HDevelop语言基础(二)-变量和表达式

    00. 目录 文章目录 00. 目录 01. 概述 02. 变量的类型 03. 变量的作用域 04. 图像对象操作 05. 输入控制参数表达式 5.1 元组操作的一般特征 5.2 赋值操作 5.3 元 ...

  8. go语言基础语法-容器数据类型-数组

    文章目录 前言 一. 数组 1. 数组的语法和声明 2 语法 1)语法: 2. 数组的初始化 a) 先声明再赋值 (先声明在初始化) b) 声明并初始化 c) 不限长赋值 d) 索引赋值 3. 访问和 ...

  9. C++语言基础 —— STL —— 容器与迭代器 —— heap

    [概述] 在 STL 中,并没有将堆作为一种容器,其实现需要借助更低一层的容器组件作为其底层机制,比如:list.priority_queue 等,heap 的底层机制 vector 本身就是一个类模 ...

最新文章

  1. centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
  2. 使用SSH反向隧道进行内网穿透
  3. 【机器学习】特征预处理
  4. 基本概念学习(8000)---兼容机
  5. a标签传值到另一个页面_vue-router页面传值及接收值
  6. 获利上亿!一程序员主犯非法挖矿被抓
  7. fatal: Could not read from remote repository.的解决办法
  8. [120_移动开发Android]007_android开发之SAX操作XML文件
  9. 1.微信小程序(colorUI)- 引入colorUI
  10. 汇编语言学习之DOSBox+MASM 安装及使用教程
  11. 2014级学生程序设计学习大数据
  12. 微信社群怎么做?-螳螂SCRM系统社群营销轻松裂变
  13. Android AOSP和Android-X86源码下载编译终极普法
  14. Android架构之高可用移动网络连接
  15. 10、Health Check、及机制Liveness 探测、机制Readiness 探测、在Scale Up(伸缩)中使用Health Check、
  16. python数据分析案例(四):共享单车租用分析
  17. canvas拼接图片
  18. bugku ctf 怀疑人生
  19. 卸载 Office 2016 for Mac
  20. C++ P0002 旅行计划

热门文章

  1. 深入理解计算机系统结构——并发编程
  2. strlen和mb_strlen的区别
  3. C语言中的nan和inf使用
  4. 为什么要用内部类:控制框架【转】
  5. 简单的文本片段替换器
  6. C语言简单题-求整数序列中出现次数最多的数
  7. msg批量转html,SysTools MSG Converter(MSG格式转换器)
  8. 玛纽尔扫地机器人怎样_扫地机器人怎样选?科沃斯超能王VS云鲸对比测试,看完你就懂了...
  9. 关于Python Profilers性能分析器
  10. python 文件流