当我第一次开始学习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)
}
答案 0 :(得分:-1)
任何差异都可以忽略不计。使用以下代码:
#include <cstdint>
#include <cstddef>
#include <ctime>
#include <iostream>
#include <vector>
const size_t NUMBER = 1000000;
int main() {
time_t start;
time_t finish;
int fvalues[NUMBER];
time(&start);
for(unsigned int x = 0; x < NUMBER; ++x) {
fvalues[x] = 3;
}
time(&finish);
std::cout << "Fixed For: " << std::difftime(finish, start) << '\n';
time(&start);
for(auto&& i : fvalues) {
i = 5;
}
time(&finish);
std::cout << "Fixed Range: " << std::difftime(finish, start) << '\n';
std::vector<int> dvalues;
for(unsigned int x = 0; x < NUMBER; ++x) {
dvalues.push_back(0);
}
time(&start);
for(unsigned int x = 0; x < NUMBER; ++x) {
dvalues[x] = 3;
}
time(&finish);
std::cout << "Dynamic For: " << std::difftime(finish, start) << '\n';
time(&start);
for(auto&& i : dvalues) {
i = 5;
}
time(&finish);
std::cout << "Dynamic Range: " << std::difftime(finish, start) << '\n';
}
所有测试的结果始终为0。并且整个程序的计时(终端时间命令)产生0.033s的用户时间,因此结果并不令人惊讶。