自加自减运算符
2016-05-26 22:21
239 查看
1. i=i++
int count = 0; for (i = 0; i < 10; ++i) { count = count ++; }
注意,无论循环多少次,最终的 count 的值都是 0.
count++; 执行完成之后,count == 1, 但该表达式的返回值为 0,也就是 count 又重新赋值为 0,将以前自加得到的值又覆盖掉了.
2. 自加自减运算符与循环
int a[] = {1, 2, 3, 4, 5}; int i = 0; while (i < 5){ cout << a[++i] << endl; }
(1)循环控制次数;
(2)初值+次数:最终的访问区间;
本例而言,访问的是
a[1] ~ a[5],显然
a[5]访问越界,输出垃圾值。
// 这样才是对的 while (i < 5){ cout << a[i++] << endl; } // 显然循环退出时, i 的值为5,指向越界的位置
一定要注意退出循环时,一些变量的值的变化情况,尤其是内部含有自加自减等操作。
template <typename T> int Vector<T>::remove(Rank lo, Rank hi){ if (lo == hi) return 0; while (hi < _size) { _elem[lo++] = _elem[hi++]; } // 循环退出时 // 1. hi == _size // 2. lo 和 hi 是同步增长的,也即此时的 lo 和 hi 的值已不是开始的值,但区间的长度是一致的 // 3. 进入循环的次数为 _size - hi // 4. 循环退出时,lo 和 hi 均指向`越界`的位置 _size = lo; shrink(); return hi - lo; }
再来看一个示例:
template <typename T> Rank Vector<T>::find(T const& e, Rank lo, Rank hi){ while (--hi >= lo && e != _elem[hi]); return hi; // 最终退出循环时 // 要么 hi < lo // 要么 e == _elem[hi] 同时 hi >= lo 这就要联想到布尔表达式的短路性质,A && B,当需要判断 B 时,A 必须保证正确 }
相关文章推荐
- ArcSDE 日志文件表(二)
- C语言里面邻接表的创建
- C++基础(一些经常混淆的概念)
- 个人工作总结03(第二阶段)
- 多图详解Spring框架的设计理念与设计模式(1-2-3-4-5-6)
- strace实时查看进程日志输出
- HDOJ/HDU 5686 Problem B(斐波拉契+大数~)
- HDOJ/HDU 5686 Problem B(斐波拉契+大数~)
- find 命令的参数详解
- spark action 操作(1)
- CentOS环境下vim配置(有图)
- css3 -- 文本
- 205. Isomorphic Strings
- 类、函数和正则表达式
- 删除目录软链接注意事项
- 京东2016校招编程题
- JavaEE的十大安全控制
- c中的\n和单双引号
- GetProcAddress函数实现和分析
- MY_GEEK_画板