假设我们有一个非空的std :: vector< T> v;
两者之间有什么区别吗?
for (int i = v.size() - 1; i >= 0; i--) {///Stuff.}
和:
for (int i = v.size(); i--; ) {///Stuff.}
?
我的意思是,出于可读性的考虑,我不会这样做,但是谁知道生活中有用的东西……
(Here只是一个测试,看他们是相同的)
编辑:关键是让我作为索引向后访问向量(在索引优于迭代器的情况下)
编辑2:出于好奇:他们的汇编代码略有不同.见this和this.
解决方法 人们可以想到一个for循环for (<decl-init> ; <condition> ; <post-adjust>) <body>
作为这个while循环的粗略等价物:
<decl-init>;while (condition) { <body>; <post-adjust>;}
上面的for和rewrite之间的最大区别是在< decl-init>中声明的变量的范围.阻止,但这对下面的分析并不重要.
将这两个循环重写为while循环可以为您提供:
int i = v.size() - 1;while ( i >= 0 ) { <body>; i--;}
与
int i = v.size(); while (i--) { <body>;}
正如您所看到的,唯一的区别是i在进入迭代之前递减,并且条件以i大于第一循环开始.这两个调整“相互抵消”,从技术角度来看,使您的循环等效.然而,美学是另一回事:副作用的条件比“纯”的条件更难理解,因此第一个循环更具可读性.
总结以上是内存溢出为你收集整理的c – 玩弄争论全部内容,希望文章能够帮你解决c – 玩弄争论所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)