c – 玩弄争论

c – 玩弄争论,第1张

概述受到 this的启发. 假设我们有一个非空的std :: vector< T> v; 两者之间有什么区别吗? for (int i = v.size() - 1; i >= 0; i--) {///Stuff.} 和: for (int i = v.size(); i--; ) {///Stuff.} ? 我的意思是,出于可读性的考虑,我不会这样做,但是谁知道生活中有用的东西…… (Her 受到 this的启发.

假设我们有一个非空的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 – 玩弄争论所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存