如果你不得不循环7次循环,你会使用:
for (int i = 0; i < 7; i++)
Run Code Online (Sandbox Code Playgroud)
要么:
for (int i = 0; i <= 6; i++)
Run Code Online (Sandbox Code Playgroud)
有两个注意事项:
为了性能,我假设Java或C#.使用"小于"或"小于或等于"是否重要?如果您对其他语言有所了解,请说明哪些语言.
为了便于阅读,我假设基于0的数组.
UPD:我提到的基于0的数组可能会让人感到困惑.我不是在讨论迭代数组元素.只是一个循环.
关于使用常数可以解释这个神奇数字是什么,下面有一个好点.所以,如果我有" int NUMBER_OF_THINGS = 7"然后" i <= NUMBER_OF_THINGS - 1"看起来很奇怪,不会.
我参与了很多项目,其他人已经给了别人更新的代码.我经常编译它并获得大约1,000多个编译器警告.当我看到编译器警告时他们让我觉得很脏,所以我的第一个任务是清理代码并将它们全部删除.通常我发现大约十几个问题,比如未初始化的变量.
我不明白为什么人们把它们留在里面并且没有完全干净的编译而没有任何警告.我错过了什么吗?是否有正当理由离开他们?分享任何恐怖故事?
不久之前,我偶然发现了Alexandrescu的2001年DDJ文章:http: //www.ddj.com/cpp/184403799
它是关于比较各种方法来初始化缓冲区到某个值.就像"memset"对单字节值的作用一样.他比较了各种实现(memcpy,显式"for"循环,duff的设备),并没有真正找到所有数据集大小和所有编译器的最佳候选者.
引用:
所有这一切都有一个非常深刻和悲伤的认识.我们是在2001年,即Space Odyssey的一年.(...)开箱即用,看看我们 - 50年后,我们仍然不擅长填充和复制记忆.
编辑:我正在研究图像处理软件.我的数组项目是POD,每毫秒都很重要!
编辑2:感谢您的第一个答案,这里有一些额外的信息:
检查a std::vector是否排序的最佳方法是什么?有没有比循环检查更快的东西v[i]<=v[i+1]?迭代器更快/更清洁吗?或者sort每次调用实际上更好(虽然"v已经排序"的情况很常见)?
我们可以安全地假设向量只包含POD,通常是floats,有时double是s和ints.
向量的大小是非平凡的(通常是几千个项目),但不是极端的(不是千兆字节大小).
由于finally在C++中没有,你必须使用RAII设计模式,如果你希望你的代码是异常安全的.一种方法是使用像这样的本地类的析构函数:
void foo() {
struct Finally {
~Finally() { /* cleanup code */ }
} finalizer();
// ...code that might throw an exception...
}
Run Code Online (Sandbox Code Playgroud)
与直接解决方案相比,这是一个很大的优势,因为您不必编写清理代码2次:
try {
// ...code that might throw an exception...
// cleanup code (no exception)
} catch (...) {
// cleanup code (exception)
throw;
}
Run Code Online (Sandbox Code Playgroud)
本地类解决方案的一大缺点是您无法直接访问清理代码中的局部变量.因此,如果您需要访问它们,它会使您的代码膨胀很多,无论如何:
void foo() {
Task* task;
while (task = nextTask()) {
task->status = running;
struct Finally {
Task* task;
Finally(Task* task) : task(task) {}
~Finally() { task->status …Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×2
optimization ×2
algorithm ×1
c++-faq ×1
conventions ×1
exception ×1
finally ×1
memory ×1
performance ×1
readability ×1
vector ×1
warnings ×1