表驱动的认识以及用法——原创---非抄书

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表驱动的认识以及用法——原创---非抄书相关的知识,希望对你有一定的参考价值。

表驱动是什么:通过查找数据表来代替复杂的逻辑结构(如 if ... else ......, switch等);

表驱动的优点是: 1、 将编程的重心调整到解决问题上,而不是复杂的逻辑判断;
2、 增加了程序的灵活性,易添加,易修改;
3、数据驱动,如果将数据写入文件,每次启动时,从文件中读取,那么,如果要修改一些变量,可能直接修改数据文件,而不是去修改程序结构;

表驱动的三种方法:
1、直接驱动法: 你需要找什么,指定索引,就可以给你立即返回索引在表中对应的元素 或者动作;

                                               案例1:(一维查找:即可以代替一层的if结构或者switch结构):
                                               比如你要查找1--12月份每个月的天数,如下:
                                               month_day[12] = {31,30,29,30,30,31,31,31,30,30,31,30};
                                               return month_day[5];
                                               这样直接对应的就是5月的天数;
                                               直接驱动 是 指 索引 和 需要的得到的数据 或者动作是直接对应关系;

                                               案例2:(三维查找:即有三个条件同时限制,如果使用if  或者 switch 可能需要三层嵌套结构)

                                                比如一个路由景点,收费标准因 性别,是否学生,以及是否残疾 三项  共同决定门票的价格,那么,我们可以
                                                使用三维数据驱动表来代替 复杂的上层if 语句;

                                                 int entrance_ticket_fee[][][] = 
                                                 {      { {0,10} , {0,15} }, { {0,15},{15,30} }      }
                                                 这是一个三维向量,三个维度分别代表了不同的限制,
                                                 第一维代表性别,索引 0代表女,1 代表男;
                                                 第二维代表是否是学生,索引 0代表是,索引 1 代表不是;
                                                 第三维代表是否是残疾, 索引 0代表残疾, 索引 1代表健康;
                                                 以上这个三维数组代表的是:
                                                 女孩,学生,残疾  0元
                                                 女孩 ,学生,健康 10元;
                                                 女孩, 非学生,残疾 0 元;
                                                 女孩, 非学生,非常急15元;

                                                 男孩,学生,残疾 0元;
                                                 男孩,学生,健康,15元;
                                                 男孩,非学生,残疾 15元;
                                                 男孩,非学生,健康,30元;

                                                 通过给定性别,是否是学生,是否残疾,来确定其返回值;
                                                 return entrance_ticket_fee[0][1][1]                   //15元;

                            2、索引驱动法:
                                              由于很多情况,有分段时,各段情况不一样,比如 按年龄来分,18岁以下和60岁以上的人 景区门票按照标准减一半,而 19 -- 59 之
                                               间的人,门票和年龄相对应,那么,如果还用直接索引法的话,对于0--18岁以下 和 60 岁以上,都对应一个数值,那么其实可以用
                                               一个索引来 代替,这样就节省了空间,这种转化通过函数来实现;
                                              索引驱动是对直接驱动法在节约空间方面的改进;

                           3、阶梯访问表:
                                             很多问题,并不需要一对一,而是要将其进行归类,简单的例子,比如说按成绩分类:
                                                    100 - 90 : A
                                                    89  - 80  : B
                                                    79 -- 60  : C
                                                    59 -- 0    : D
                                             给定一个数,判断其所在的范围,即可以云阶梯访问。

                                              阶梯访问是通过将要对比的数 (原数据) 和 各个区域的上限(或者下限)进行比较,可以选择顺序比较,也可以选择二分法之类的。

                                               阶梯访问是对 索引驱动法的在节约内存空间方面的再次改进                                                   

以上是关于表驱动的认识以及用法——原创---非抄书的主要内容,如果未能解决你的问题,请参考以下文章

C语言表驱动法编程实践(精华帖,建议收藏并实践)

sscanf的最基础用法(非原创)

SQL Select 语句的用法

vector最最最基础用法(非原创)

Xcode中的变量模板(variable template)的用法

JDK编译以及在CLion中进行源码调试(抄书+踩坑记录)