【发布时间】:2015-10-24 18:26:52
【问题描述】:
当我第一次开始学习 Java 时,我记得我想如何在 C++ 中创建一个 for-each 循环;但是,既然已经添加了它们,而且我(稍微)比以前更聪明,我不得不怀疑它们是否真的更有效率?
有两种情况我很好奇,第一种是传统的数组,第二种是动态大小的对象,比如std::vector。
我预测使用 for 循环迭代传统的固定大小数组会更有效,而使用基于范围的循环动态分配的存储会更快。
int fvalues[NUMBER];
for(unsigned int x = 0; x < NUMBER; ++x) {
//Do Stuff
}
for(auto&& i : fvalues) {
//Do Stuff
}
std::vector<int> dvalues = std::vector<int>(NUMBER);
for(unsigned int x = 0; x < NUMBER; ++x) {
//Do Stuff (not adding or removing from vector)
}
for(auto&& i : dvalues) {
//Do Stuff (not adding or removing from vector)
}
【问题讨论】:
-
不是预测,而是对其进行基准测试。
-
为什么应该比另一个更有效率?你对这件事有什么想法,还是这只是你的“直觉”?
-
它并不比使用迭代器迭代慢。
-
我的怀疑是固定大小的索引可以根据内存位置直接访问,但动态的会有跳过指针的可能。这意味着当前索引使用动态类型会更快,而在固定大小上会产生不必要的开销。
-
我认为这种“我认为这可能是真的.. 让我们问一下我是否正确”的风格不是 SO 应该存在的。它是关于问题和解决方案的。你这种查询更适合一般的论坛
标签: c++ loops c++11 ranged-loops