gpt4 book ai didi

c++ - 玩弄 for arguments

转载 作者:可可西里 更新时间:2023-11-01 18:35:57 25 4
gpt4 key购买 nike

灵感来自 this .

假设我们有一个非空的 std::vector<T> v;有什么区别吗

for (int i = v.size() - 1; i >= 0; i--) {
///Stuff.
}

和:

for (int i = v.size(); i--; ) {
///Stuff.
}

?

我的意思是,为了可读性我不会那样做,但谁知道什么对生活有用......

(Here 只是一个测试,看看它们是等价的)

编辑:重点是 i作为向后访问 vector 的索引(在索引比迭代器更可取的情况下)

编辑 2:出于好奇:他们最终得到了略微不同的汇编代码。参见 thisthis .

最佳答案

人们可以想到 for循环

for (<decl-init> ; <condition> ; <post-adjust>) <body>

粗略相当于 while循环:

<decl-init>;
while (condition) {
<body>;
<post-adjust>;
}

for之间的最大区别上面的重写是在<decl-init>中声明的变量范围 block ,但这对下面的分析并不重要。

将两个循环重写为 while循环给你这个:

int i = v.size() - 1;
while ( i >= 0 ) {
<body>;
i--;
}

对比

int i = v.size(); 
while (i--) {
<body>;
}

如您所见,唯一的区别是 i在进入迭代前递减,条件以i开始大于1比第一个循环。这两个调整“相互抵消”,使您的循环从技术角度来看是等效的。不过,美学是另一回事:有副作用的条件比“纯”条件更难理解,因此第一个循环更具可读性。

关于c++ - 玩弄 for arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com