0

当我第一次开始学习 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)
}
4

1 回答 1

-2

任何差异充其量都可以忽略不计。使用以下代码:

#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.033 秒的用户时间,因此结果不足为奇。

于 2015-10-24T19:23:34.710 回答