Fab*_*ian 2 c performance pointers
我经常看到人们使用指针迭代C样式数组,而我发现使用索引更具可读性.下面的例子说明了我想到的两种方式.它们不会导致相同的拆卸......
我的问题:使用"跑步者"而不是索引是否有利?顺便问一下,"跑步者"技术还有另一个名字吗?
它是否依赖于底层类型,例如int,char或struct?
struct somestruct
{
float f;
int i;
};
const unsigned int uiSize = 10000;
somestruct * myarray = new somestruct[uiSize];
const somestruct * const pEnd = myarray + uiSize;
// way 1: runner
somestruct * pRunner = myarray;
while(pRunner < pEnd)
{
pRunner->f += 5;
pRunner->i += 5;
++pRunner;
}
// way 2: index
unsigned int ui = 0;
for (ui = 0; ui < uiSize; ++ui)
{
myarray[ui].f += 6;
myarray[ui].i += 4;
}
Run Code Online (Sandbox Code Playgroud)
无论使用整数索引还是指针都无关紧要.但是,您提供的两个示例都不遵循C(或C++)中的标准做法.这是一个重写:
// way 1: runner
for (somestruct * pRunner = myarray; pRunner != pEnd; ++pRunner)
// way 2: index
for (size_t ui = 0; ui < uiSize; ++ui)
Run Code Online (Sandbox Code Playgroud)
当简单地迭代容器的所有元素时,我们总是使用for循环,而不是while循环,因为它更简洁和惯用(意味着每个人都这样做,所以每个人都可以快速阅读它).