woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

开区间与闭区间——从初等数学中吸取一点编程养分

开区间和闭区间学过这个很多年了吧,估计是在初中时候的数学里。今天特意查了下,终于又知道了“[”是闭的,“”是开的(详细请看下面的花色字体)。

查这个好笑否?其实是有缘由的,当然也有些用处,我慢慢道来

 

1.      编程中,总是很频繁的要实现对数据进行搜索,查找的代码。以搜索举例,要给定开关条件,比如写一个函数,找到login_beginlogin_end之间的帐户。如果这样的代码写得很多了,就会犯糊涂,这里给的条件login_beginlogin_end,到底有没有包含login_beginlogin_end啊?不确定,然后翻代码一看,噢,原来没有包含呀。不确定包含与否的原因,是因为没有使用统一的开闭区间规则。

 

2.      STL的容器和算法的实现,都有一个共性: 迭代器构成的区间是前闭后开的, [vector::begin(), vector::end() ),这样在使用的时候就不会犯糊涂了;

 

3.      C++举例,for(int i= 0; i < 10; ++i)这样的迭代过程,使用的也是一个前闭后开区间,[010,如果这样写for(int i= 0; i <= 9; ++i),虽然等价,但已不是一个良好的格式了;

 

4.     最后所说的吸取养分,总结成如下这句话:业务逻辑上和项目代码里使用统一的开闭区间规则,推荐使用前闭后开“[ ”,为什么?因为所以没原因。

 

 

////////////////////////////////////////////////////////////////////////

a, b 是两个实数, a ≤ b.

1
满足 a ≤ x ≤ b 的实数 x 的集合,
     
表示为 [ a, b ], 叫做闭区间;

2
满足 a x b 的实数 x 的集合,
     
表示为 ( a, b ), 叫做开区间;

3
满足 a ≤ x b a x ≤ b 的实数 x 的集合,
     
分别表示为 [ a, b ), ( a, b ], 叫做半开区间.

这里实数 a, b 叫做区间的端点.

posted on 2008-12-25 17:24 肥仔 阅读(3710) 评论(4)  编辑 收藏 引用 所属分类: 编程思想

评论

# re: 开区间与闭区间&mdash;&mdash;从初等数学中吸取一点编程养分  回复  更多评论   

使用前闭后开并非没有原因,begin + count = end, end - begin = count,多么方便:)
2008-12-26 12:37 | NeutralEvil

# re: 开区间与闭区间&mdash;&mdash;从初等数学中吸取一点编程养分  回复  更多评论   

补充一点,在STL里面,采用半开区间表示范围,那就可以统一使用这样的迭代形式:
for (iter = con.begin(); iter != con.end(); ++iter) ...

否则的话,random access iterator固然可以用<=来判断终止,其他类型的iterator就不方便了。
2008-12-26 12:45 | NeutralEvil

# re: 开区间与闭区间&mdash;&mdash;从初等数学中吸取一点编程养分  回复  更多评论   

@NeutralEvil
第二条补充得太棒了,我没有想到你补充的那点,汗!
STL的伟大,正是在抽象之后,形式上的统一,优美啊。
2008-12-26 21:39 | 肥仔

# re: 开区间与闭区间&mdash;&mdash;从初等数学中吸取一点编程养分  回复  更多评论   

这个问题我已经也想过,我觉的从哲学上来思考的话, 应该是一种平衡的思想, 即如果我们把整数从负无穷到正无穷按等长区间来表示的话, 每个区间, {), 这样每个人都很公平, 或者(]也可以;如果有的区间用[], 或(), 则一定会有区间是()或[],这样显的就不一致了.
2008-12-27 14:32 | vcfly

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理