C ++在单独的文件中存储数组

时间:2016-03-10 04:40:27

标签: c++ arrays header-files

我正在开发一个c ++程序,我必须将数组传递给多个排序函数并比较函数的运行时间。例如,我有一个包含100个元素的数组,其中包含1到10的随机数。我有一个冒泡排序,合并排序和快速排序功能,我必须将数组传递给每个函数。但是当我传递数组时,第一个排序函数会更改原始数组,以便在传递给下一个函数时它已经被排序。这是预期的,但我想知道如何将这个数组存储在一个单独的文件中,也许是一个头文件,以保持每个函数调用的原始数组不被排序。

以下是我的代码的布局:

#include <iostream>
using namespace std;

//void bubblesort, mergesort, quicksort function prototypes

int main()
{
    int a[100];
    for (int i = 0; i < 100; i++)
        a[i] = rand() % 10 + 1;
    bubblesort(a);
    mergesort(a);
    quicksort(a);
    return 0;
}

//void bubblesort, mergesort, quicksort function definitions

此代码显然只是一个布局,除了调用排序函数更改原始数组这一事实外,排序函数与此问题无关。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您不需要此文件。尽管现在操作系统上的常用文件系统很好地映射到内存(在很多情况下这将是它们的缓存)并且延迟交换到磁盘,但是与文件系统交互可能会使您的代码效率低得多,因为您正在写入磁盘。

由于您使用C ++标记了这个问题,我将以C ++方式(或至少是C ++标准库方式)回答这个问题。你想要的是在将数组传递给函数时制作数组的副本。在您传递数组的原始地址时,您不会制作任何副本(只能是指针的副本)。如果您使用vectors,此过程将变得简单。所以程序可能是

#include <iostream>
#include <vector>
using namespace std;

// The declarations would just need to change to this, I am assuming 
// they print to stdout
void bubblesort(vector<int> vec);
void mergesort(vector<int> vec);
void quicksort(vector<int> vec);

int main()
{
    vector<int> a;
    for (int i = 0; i < 100; i++)
        a.push_back(rand() % 10 + 1);
    bubblesort(a);
    mergesort(a);
    quicksort(a);
    return 0;
}

这里的矢量将按值传递,因此函数访问的矢量是原始的副本。带有向量的东西是它们更灵活,在大多数高级编程场景中通常应优先于数组。

但是,如果你的应用程序要求使用低级别数组,你可以使用memcpy来实现这种复制效果。

#include <iostream>
#include <vector>
using namespace std;

//void bubblesort, mergesort, quicksort function prototypes

int main()
{
    int a[100];
    for (int i = 0; i < 100; i++)
        a[i] = rand() % 10 + 1);

    int for_bubble_sort[100];
    memcpy(for_bubble_sort, a, 100);
    bubblesort(for_bubble_sort);

    int for_merge_sort[100];
    memcpy(for_merge_sort, a, 100);
    mergesort(for_merge_sort);

    int for_quick_sort[100];
    memcpy(for_quick_sort, a, 100);
    quicksort(for_quick_sort);
    return 0;
}

答案 1 :(得分:0)

好吧,你应该制作另一个数组。使用memcpy()将原始数组的内容复制到此数组,或使用循环。

答案 2 :(得分:-2)

您可以将数组声明为const,以便将其保留为初始值,而且函数不会更改。