-4
#include <iostream>
#include <time.h>
using namespace std;

void my_func();
int main()
{
    float start_time = clock();
    cout << "Starting time of clock: " << start_time;
    cout << endl << endl;

    for (int i = 0; i < 100000; i++)
    {
        my_func();
    }

    float end_time = clock();
    cout << "Ending time of clock: " << end_time;
    cout << endl << endl;
}

void my_func()
{
    int my_array[5][5];
}

我需要编写一个程序,它只使用下标对二维数组的元素进行大量引用。这实际上是一个由两部分组成的项目,但我只关心第一部分是否正确。第二部分允许使用指针,但现在,我只受“下标”(索引?)的影响。关于如何进行的任何建议?

感谢 Volkan İlbeyli,我成功完成了第一部分。我现在进入第二部分:

我需要编写一个程序,使用指针和指针算法对二维数组的元素进行大量引用。这是我到目前为止所拥有的:

#include <iostream>
#include <time.h>
using namespace std;

void my_func();

int main()
{

    float start = clock();

    for (int i = 0; i < 100000; i ++)
    {   
        my_func();
    }

    float end = clock();
    cout << "Ending time of clock: " << (end - start) / ((double)CLOCKS_PER_SEC);
}

void my_func()
{
    int my_array[10][10];

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            *(my_array+i+j);
        }
    }
}

我已经完成了第一部分,现在我正在研究下一部分。我只是想知道我是否错过了什么。代码工作正常,程序也是如此。指针不是我的强项,我花了很多时间在互联网上找到我的答案。现在就指针和“指针算术”寻求技术观点。

4

1 回答 1

1

好吧,即使我无法理解您正在尝试的任务的目的或含义,如果我没有弄错,您会被要求通过使用索引来访问 2D 数组的元素。

考虑到您的代码,您my_func()无法访问这些元素。您只声明您将使用大小为 5x5 的二​​维数组。要访问元素,(我认为)在您的情况下引用数组,您应该使用for循环和索引来访问数组的元素。

在你的情况下,我应该这样做:

void my_func()
{                                   //assuming that the usage of
    int my_array[1500][500] = {0};  //square matrice is not mandatory

    for(int i=0; i<1500 ; i++){
        for(int j=0; j<500 ; j++){
            my_array[i][j]; //no operation is done, only accessing the element
        }
    }

    return;
}

您还可以交换 for 循环以垂直方式访问数组,即遍历第一列,然后是第二列,然后是第三列……这将使您通过索引引用 2D 数组的速度变慢。请参阅这篇关于 SO为什么它减慢交换 for 循环的帖子,即将行列顺序更改为列行。

您还应该注意,如果您关心某个事件的关键时间测量,则在开始时钟和结束时钟时应该只包括该事件。在您的代码中,您还包括了调用cout,endl的时间,其调用时间与数组引用my_func()无关。此外,我宁愿测量函数中的时间,因为访问 2D 数组不需要太多代码。如果确实需要太多时间,我会调用该函数,在其中声明计时变量,绝对不打印开始时间,在重复操作循环之前开始时间并在循环终止后停止。你可以看到这个帖子main()了解如何测量和打印时间(当您需要考虑秒或毫秒等时)。

于 2013-04-20T09:45:31.263 回答