C++ 使用while的条件赋值
我一直在研究一些代码(为了扩展它),我遇到了以下部分:C++ 使用while的条件赋值,c++,optimization,C++,Optimization,我一直在研究一些代码(为了扩展它),我遇到了以下部分: // 'assignList' is an unsigned int array: "unsigned int assignList[ numElements ]" // 'postAssignList' is a std::vector< unsigned int > for ( unsigned int pp; pp < numElements; ++pp ) { while( assignList[pp] !
// 'assignList' is an unsigned int array: "unsigned int assignList[ numElements ]"
// 'postAssignList' is a std::vector< unsigned int >
for ( unsigned int pp; pp < numElements; ++pp )
{
while( assignList[pp] != postAssignList[ assignList[pp] ] )
{
assignList[pp] = postAssignList[ assignList[pp] ];
}
}
/'assignList'是一个无符号整数数组:“无符号整数assignList[numElements]”
//“postAssignList”是一个std::vector
for(无符号整数pp;pp
我不明白为什么一个
while
循环被用于条件赋值。这是一种优化技术吗?或者它确保了赋值(我认为是有保证的)?这根本不是一个条件赋值,这是一个简单的迭代。更改assignList[pp]
的值会导致postAssignList[assignList[pp]]
的更改。这看起来像一个列表遍历
while( x != Next[ x ] )
{
x = Next[ x ];
}
在执行for
循环之前,每个assignList[pp]
都指向一个由自循环终止的链表
执行后,每个
assignList[pp]
都指向初始列表的尾部元素。这看起来像是一种优化技术,因此如果assignList[pp]
已经持有该值,则不会赋值。不过,我不确定这项技术是否值得,因为您只是使用了一个条件赋值,可能是一个赋值,而不是一个直接赋值。将此视为而循环也很奇怪;通常,这种优化显示为if
。就我个人而言,我会回避这样的事情,尽管可能有更有经验的人会不同意。@computerfreaker:如果一个普通的人做这项工作,他不会吗?我认为,而
的开销更大@哈罗德:不,这个代码经过了严格的同行评审。虽然可能,但可能性很小。assignList[pp]可能会更改,因此在后续迭代中赋值可能会有所不同。这是一个真正的、非平凡的算法,它执行一些索引置换-循环完全按照它所说的那样执行。顺便说一句,如果(a!=b)a=b,则使用条件赋值,例如if(a!=b)与直接赋值相比,code>将完全没有效率a=b代码>。测试比分配成本更高,而且只在一小部分情况下保留了分配,但整个过程都在for
循环中。因此,对于pp
的特定值assignList[pp]
,postAssignList[assignList[pp]]
的值将是“常量”。那么为什么我需要一个while
循环来进行条件检查呢?(或者我是瞎了,错过了什么明显的东西?)是的,你是瞎子。pp
保持不变并不重要,assignList[pp]
会改变。让assignList[9]==0
,postAssignList[0]==1
,postAssignList[1]==2
和postAssignList[2]==2
assignList[9]
将被赋值1
,然后2
。噢,我现在明白了!可悲的是,需要一些人的帮助才能到达那里:(非常感谢,伊夫!