gpt4 book ai didi

c++ - 在嵌套循环/循环不变量中检查一次

转载 作者:行者123 更新时间:2023-11-30 03:00:22 25 4
gpt4 key购买 nike

在嵌套循环中每次迭代只做一次事情的最聪明的方法是什么?我无法提取不变部分,因为外循环非常复杂。这是我的 C++ 示例:

void foo::bar() {
if(oldCycle == tree.cycle) {
doSomething();
oldCycle++;
}
}

这个方法会被经常调用,直到 tree.cycle 递增。 oldCycle是foo的私有(private)成员变量

claas foo {
public: ...

private:
int oldCycle;
};

编译器是否优化此代码或是否会在每次迭代时运行 if 检查?

编辑:这里就像请求带有循环的代码:第一个循环在 mexFunction() 方法中,算法在 matlab 中启动并调用 mexFunction。

void mexFunction(...) {
for( tree.cycle = 0; tree.cycle<maxIt; tree.cycle++ ) {
foo->startfoo();
}
}

这是另一个循环:

void foo::startfoo() {
for(tree.cur_it = 0; tree.cur_it <=39; tree.cur_it++ ) {
bar();
}
}

最佳答案

对于一般情况,您无法真正优化它,因为您需要以某种方式从集合中删除特殊情况。

但是,对于特殊处理 first 元素的特殊情况(例如,打印带有分隔符的范围时 "1, 2, 3"),您可以使用Knuth 的“半循环”:

朴素循环:

for (unsigned int i = 0; i != values.size(); ++i)
{
if (i != 0) { std::cout << ", "; }
std::cout << values[i];
}

一个半循环:

if (!values.empty())
{
for (unsigned int i = 0; ; )
{
std::cout << values[i];
++i;
if (i == values.size()) { break; }
std::cout << ", ";
}
}

后一种构造更复杂,但可以避免大部分错误检查 i != 0

也就是说,即使您以天真的方式编写代码,一个好的编译器也很有可能会进行部分展开。

关于c++ - 在嵌套循环/循环不变量中检查一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12195600/

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