2016-03-10 35 views
3

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

这里是我的代码布局:

#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 

此代码显然只是一个布局和排序功能是不相关的,就只给一个排序函数的调用改变其他这个问题原始数组。谢谢你的帮助。

+1

只要将数组复制到一个新的数组变量,每次你想排序。无需将其保存到文件中。看看'memcpy()'或者写一个for循环。 –

回答

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; 
} 
+0

你的第二个代码示例在函数声明中仍然有'vector' – vu1p3n0x

+0

@ vu1p3n0x谢谢你指出! – Curious

+0

谢谢@Curious! – tfreiner

-2

你可以声明你的数组为const,所以它保留它的初始值并且函数不会改变它。

0

那么,你应该做另一个数组。使用memcpy()将原始数组的内容复制到这个数组中,或使用循环。

相关问题